【问题标题】:Start NodeJS through pm2 with sudo privileges to access SSL keys使用 sudo 权限通过 pm2 启动 NodeJS 以访问 SSL 密钥
【发布时间】:2019-07-24 13:01:46
【问题描述】:

我有一个运行 Ubuntu 16.04 的数字海洋水滴。我跟着this guide 在我的NodeJS 服务器上使用HTTPS。

总之

我使用certbot创建了一个SSL证书,也就是说在这个目录/etc/letsencrypt/live/yourdomain.com/,创建了3个文件:

  1. privkey.pem
  2. cert.pem
  3. chain.pem

所以在我的服务器代码中,我必须获取这些文件,我会这样做:

// Certificate
const privateKey = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/chain.pem', 'utf8');

问题

当我尝试使用命令 node server 或使用 pm2 start server 运行我的服务器时,我收到了以下错误消息:

  { Error: EACCES: permission denied, open '/etc/letsencrypt/live/yourdomain.com/privkey.pem'
    at Object.fs.openSync (fs.js:646:18)
    at Object.fs.readFileSync (fs.js:551:33)
    at Object.<anonymous> (/home/myuser/mywebsite/lib/server-configurations.js:13:21)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/etc/letsencrypt/live/yourdomain.com/privkey.pem' }
 

但是

当我尝试使用 sudo node server 启动它时,它确实工作没有任何问题。

小通知

我知道我可以更改文件的权限,但我不想这样做,因为我多次阅读过最好不要更改这些文件的权限。

最重要的是……

感谢您的帮助:)

【问题讨论】:

  • 为什么最好不要更改这些文件的权限,而不是以 root 身份启动您的应用程序?
  • @TGrif 我真的不知道,但我见过很多次说不要更改 Linux 中的权限,尤其是敏感数据。我并不是真正的 Linux 专家,因为这是我第一次管理 Linux 服务器(或管理服务器)。我很想知道您是否认为更改权限没有问题,以及您是否认为我对此的想法存在缺陷。
  • 我的建议是永远不要以 root 身份启动您的应用程序。所以我认为你必须以某种方式处理你的证书文件权限。

标签: node.js ssl ubuntu-16.04 file-permissions pm2


【解决方案1】:

我确实根据Let's encrypt SSL couldn't start by "Error: EACCES: permission denied, open '/etc/letsencrypt/live/domain.net/privkey.pem'"更改了权限 这适用于运行

节点文件.js

现在 pm2 的进程仍然无法访问证书,即使它应该以与 node 相同的用户身份运行......令人困惑。

【讨论】:

  • 我遇到了完全相同的问题。更改权限后,我可以自己运行程序,但 PM2 不能,即使它应该以我的用户身份运行它。你找到解决方案了吗?
  • 我遇到了同样的问题,重启了机器,它工作了。
【解决方案2】:

您可以使用this certbot script

More info on certbot renewals 可能会有所帮助,以及此问题的其他解决方案on the Let's Encrypt forums

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多