使用 unix 管道将敏感的输出数据作为输入重定向到另一个程序是否安全?

信息安全 linux 权限 Unix 须藤 终端
2021-09-04 13:51:03

我想让 Node.js 开发服务器使用 HTTPS,方法是让其访问 TLS 证书和私钥文件的内容。

一方面,我不喜欢让除根以外的任何人都可以读取 TLS 私钥文件的想法。另一方面,我更不喜欢以 root 身份运行 Node 服务器的想法。

所以我突然想到,我可以通过使用以下 shell 命令手动启动我的开发服务器来避免使用这些方法:

sudo cat /path/to/private/key/file | /path/to/node/server

(在我的例子中,服务器程序可以配置为读取 STDIN 并根据需要解析关键内容。)

我在这里的假设是管道(|在上面的命令中)是匿名的(与命名管道相反),并且非特权的第三个程序无法访问与它们对应的文件描述符(至少在 Linux 上?)。那是对的吗?

还有其他我需要注意的安全方面吗?这是一个好的解决方案,还是有更好的选择?

1个回答

|是匿名的。任何不是 root 或其中一个进程的所有者的人通常都无法访问该管道。一旦您读取标准输入并关闭它,cat 进程就会退出,并且管道将不再存在,甚至无法被 root 或剩余进程的所有者利用。

也就是说,将您的程序编码为以 root 身份启动但在它真正关注从外部传入的任何内容之前放弃特权通常不会那么麻烦。这是电子邮件和 Web 服务器中使用的机制,可以让它们侦听特权端口,但不被视为等待发生的根级外部可访问安全漏洞。