3

Amazon Elastic Beanstalk를 사용하여 배포 할 Node.js 응용 프로그램을 구성하려고합니다.AWS Elastic Beanstalk - 사용자 권한 문제

실제로 웹 소켓을 활성화하고 yum을 여러 모듈에 설치하고 필요한 일부 사용자 정의 소프트웨어를 설치하기 위해 .ebextensions 내에 몇 개의 구성 파일을 만들었습니다.

지금까지 App 배포가 작동하고 구성된 모든 소프트웨어가 Beanstalk에 의해 설치되었습니다.

문제점 nodejs 사용자가 노드 응용 프로그램을 실행 중이며 우리 beanstalk 사용자 정의 구성에 의해 설치된 명령 행 도구를 실행할 수있는 권한이 없다는 것입니다.

  1. 이 앱은 사용자의 파일 업로드를 지원하고 업로드 된 파일 (이해야처럼 작동) 인스턴스에 대한 몇 가지 임시 폴더에 을 저장됩니다

    더 구체적으로.

  2. 그런 다음 응용 프로그램은 /홈/EC2 사용자/계산기/빈 변환 파일 이름 출력 파일 이름 같은 것을 실행 뭐죠, 사용자 정의 파일 형식으로 업로드 파일을 변환하는 명령 줄 실행을 수행합니다. 이 시점에서

는이 오류를 얻을 : 은 {[오류 : 산란이 EACCES] 코드 : 'EACCES이', errno를 'EACCES'콜 '부활'}

점수는 응용 프로그램이 여러 가지 필요 이러한 변환 작업을위한 명령 줄 도구가 올바르게 실행됩니다. 사실 그들은 모두 같은 문제가 있습니다. Imagemagick과 같이 yum에 의해 설치된 도구조차도 앱에 의해 실행되지 않습니다.

수동으로, ec2 사용자 계정을 사용하여 모든 파일을 올바른 시스템 경로에 배치하고 정상적으로 작동합니다. 그래서 모든 설치가 올바르게 작동하는 것 같습니다.

이미 사용자 nodejs에 수동으로 권한을 부여하고 파일을 chmod했으나 여기서는 아무런 영향을 미치지 않는 것 같습니다.

큰 문제는 .. nodejs 사용자에게 필요한 권한을 부여하거나 node.js를 실행하기 위해 정의 된 사용자를 사용하는 방법은 무엇입니까?

답변

2

은 내가 nodejs 사용자가 셸을 사용하여 권한이없는 것을 믿는다

[[email protected] ~]$ cat /etc/passwd 
.... 
nodejs:x:497:497::/tmp:/sbin/nologin 

According to the docs, node runs the command in a shell and returns it.

나는 또한 시도 :

[[email protected] ~]$ pwd 
/home/ec2-user 
[[email protected] ~]$ cat test.js 
#!/opt/elasticbeanstalk/node-install/node-v0.10.31-linux-x64/bin/node 
require('child_process').exec('/usr/bin/whoami', function (err, data) { 
    console.log(data); 
}); 
[[email protected] ~]$ ls -l 
total 4 
-rwxrwxrwx 1 ec2-user ec2-user 169 Nov 3 21:49 test.js 
[[email protected] ~]$ sudo -u nodejs /home/ec2-user/test.js 
sudo: unable to execute /home/ec2-user/test.js: Permission denied 

나는이에 대한 혼란 메신저, 이는 작동 말할 것이다 (어쩌면 누군가가 명확히 차임 수) :

$ sudo -u nodejs /usr/bin/whoami 
nodejs 

그러나, 외부 관찰자로 콩 줄기가 너에게 잘 맞지 않는 것 같아. 일반적으로 Beanstalk는 손쉬운 완전 관리 추상화 디자인으로 파일 시스템 권한으로 엉망이며 사용자 권한이 그 한계를 뛰어 넘습니다.

제쳐두고, 아마도 consider moving to OpsWorks을 원할 수도 있습니다. http://aws.amazon.com/opsworks/faqs/에서 :

콩 줄기는 bash는 명령을 실행하기 위해 EC2 사용자 계정을 사용하고 있습니다 :

Q: How is AWS OpsWorks different than AWS Elastic Beanstalk?

AWS OpsWorks and AWS Elastic Beanstalk both focus on operations, but with very different orientations. AWS Elastic Beanstalk seeks to automatically provide key operations activities so that developers can maximize the time they spend on development and minimize the time they spend on operations. In contrast, AWS OpsWorks delivers integrated experiences for IT administrators and ops-minded developers who want a high degree of productivity and control over operations.

+0

안녕하세요,이 문제를 제외하고는 Beanstalk을 사용하여 꽤 잘하고 있습니다. 필요한 모든 것이 설치되어있어 응용 프로그램을 훨씬 쉽게 확장 할 수 있습니다. Beanstalk에 대한 Documentation이 부족하다는 것을 알았으므로이 사용 권한 문제를 처리하는 방법을 알고 있기를 바랍니다. – user2458046

+0

nodejs 사용자와 쉘 액세스가 없으면 의미가 있습니다. "sudo su nodejs"를 수행하면 해당 계정을 사용할 수 없습니다. – user2458046

+0

아마존은 당신이 권한을 가지고 장난하기를 원하지 않기 때문에이 영역에서 문서가 부족합니다. 그러나 그것은 당신에게 달렸습니다. 나는 단지 조언을 해줄 수있다. 그리고 네가 내가하는 일을 살펴보면 간단한 스크립트에서 간단한'exec' 명령을 실행하지 못할 것이다. 그래서 정말로 문제를 해결하고 싶다면 (bash :'sudo chsh -s/bin/bash nodejs ') 기본 쉘을 bash로 바꿀 수있다. – mattr

1

드디어 해결책을 발견. 권한 충돌로 인해 nodejs 사용자 계정에서 명령 줄에 의해 설치된 모든 것을 실행할 수 없습니다.

해결책은 설치된 모든 도구를 모든 사용자가 실행할 수있는/usr/local/bin에 복사하는 것이 었습니다.

07_myprogram: 
     command: sudo cp bin/* /usr/local/bin 
     cwd: /home/ec2-user/myprogram 
     ignoreErrors: true 
관련 문제