AWS Elastic Beanstalk - 用户权限问题

时间:2014-11-03 15:56:56

标签: node.js amazon-web-services amazon-ec2 imagemagick elastic-beanstalk

我正在尝试将我们的Node.js应用程序配置为使用Amazon Elastic Beanstalk进行部署。

实际上我在.ebextensions中做了一些配置文件来启用Websockets,为几个模块做yum安装并安装我们需要的一些自定义软件。

到目前为止,App部署正常运行,所有已配置的软件都由Beanstalk安装。

我遇到的问题是nodejs用户运行节点应用程序,没有权限执行我们的beanstalk自定义配置安装的命令行工具。

更具体:

  1. 该应用支持用户文件上传,并保存上传的文件 到实例上的某个临时文件夹(就像它应该的那样)。

  2. 然后,应用程序执行命令行执行以转换上传的 以自定义文件格式存档,执行类似的操作 / home / ec2-user / converter / bin转换文件名输出文件名。

  3. 此时我收到此错误: {[错误:产生EACCES]代码:' EACCES',错误:' EACCES',系统调用:' spawn' }

    总体而言,该应用需要多个命令行工具才能使此类转换任务正常运行。 实际上他们都有同样的问题。即使是由yum安装的工具,例如Imagemagick,也不会被应用程序执行。

    手动,通过使用ec2-user帐户,我能够执行所有这些,所有文件都在适当的系统路径上,并且它们正常工作。所以所有安装似乎都正常。

    我已经尝试手动授予用户nodejs的权限,并确实chmod了这些文件,但这似乎没有任何效果。

    重大问题是..如何向nodejs用户授予所需权限,或者如何使用已定义的用户执行node.js?

2 个答案:

答案 0 :(得分:2)

我认为nodejs用户没有使用shell的权限:

[ec2-user@host ~]$ cat /etc/passwd
....
nodejs:x:497:497::/tmp:/sbin/nologin

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

我也尝试过:

[ec2-user@host ~]$ pwd
/home/ec2-user
[ec2-user@host ~]$ 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);
});
[ec2-user@host ~]$ ls -l
total 4
-rwxrwxrwx 1 ec2-user ec2-user 169 Nov  3 21:49 test.js
[ec2-user@host ~]$ 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并不适合你。一般来说,Beanstalk是一种完全托管的抽象设计,它可以解决文件系统权限问题,而用户权限则超出了这些边界。

顺便说一句,也许你想要consider moving to OpsWorks。来自http://aws.amazon.com/opsworks/faqs/

  

问:AWS OpsWorks与AWS Elastic Beanstalk有何不同?

     

AWS OpsWorks和AWS Elastic Beanstalk都专注于运营,但是   具有非常不同的方向。 AWS Elastic Beanstalk寻求   自动提供关键操作活动,以便开发人员可以   最大化他们花在开发上的时间并最大限度地缩短他们的时间   花在运营上。相比之下,AWS OpsWorks提供集成   经验丰富的IT管理员和具有思想意识的开发人员   高效的生产力和对运营的控制。

答案 1 :(得分:2)

我终于找到了解决方案:

Beanstalk正在使用ec2-user帐户运行bash命令。 因此,由于权限冲突,nodejs用户帐户无法执行命令行安装的所有内容。

解决方案是将所有已安装的工具复制到/ usr / local / bin中,任何用户都可以在其中执行这些工具。

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