我有一个在 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