![ElasticBeanstalk 上的 Node.js 应用程序无法访问服务器上的私钥文件](https://linux22.com/image/682821/ElasticBeanstalk%20%E4%B8%8A%E7%9A%84%20Node.js%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E7%A7%81%E9%92%A5%E6%96%87%E4%BB%B6.png)
我有一个在 ElasticBeanstalk 上运行的 node.js 应用程序。其配置的一部分是 .p12 密钥文件的路径。当应用程序尝试使用密钥文件时,会引发权限被拒绝异常。
我的问题是,我是否将密钥文件放在具有正确权限的最佳位置,或者是否应该使用其他地方或权限。
该应用程序是一个解析服务器示例克隆安装到 EB 服务器上的 /var/app/current。我已将密钥文件放在 /home/ec2-user/.ssh 中。我尝试将密钥文件的权限设置为 400、644 甚至 777。.ssh 目录本身的权限为 700。我看到的错误是:
parse-server-example 在端口 8081 上运行。/var/app/current/node_modules/parse-server/lib/ParseServer.js:339 抛出错误;^
错误:EACCES:权限被拒绝,在错误处打开‘/home/ec2-user/.ssh/key.p12’(本机)
答案1
我在尝试安装/运行 etherpad 时也遇到了这个问题
事实证明,这与文件的权限无关,而是与上级目录的权限有关
如果我以 root 身份执行此操作,我会得到:
ls -l /etc/letsencrypt/live/domain/privkey.pem
lrwxrwxrwx 1 root root 42 May 20 13:03 /etc/letsencrypt/live/domain/privkey.pem -> ../../archive/domain/privkey1.pem
但是如果我运行相同的命令,就会etherpad
收到权限被拒绝的情况。
ls -ld
对每个目录执行up 操作都显示live
具有权限rwx------
,即无法读取或列出该目录。
chmod 755 /etc/letsencrypt/live /etc/letsencrypt/archive
就我的情况而言,这解决了这个问题。您的情况可能会有所不同。
答案2
最终对我而言有效的是为 .p12 密钥创建一个目录,并将该目录和密钥的所有权授予 nodejs 用户。
sudo mkdir -p /etc/foo
sudo chown nodejs /etc/foo
sudo chmod 700 /etc/foo
sudo cp my_key.p12 /etc/foo
sudo chown nodejs /etc/foo/my_key.p12
sudo chmod 600 /etc/foo/my_key.p12