我想在启动时拥有 root 权限,然后再删除它们。后台是在Ubuntu 24.04上用NodeJS编写的服务器,需要读入私钥。我按照 这些说明 使用
process.setgid()
和 process.setuid()
,之后提升权限不起作用。
但我看到process.env
没有更新。它仍然显示用户为 root,但字段 SUDO_USER
、SUDO_UID
和 SUDO_GID
添加了正确的值。
好奇的是,我尝试在放弃权限后读取仅限 root 的文件,但它仍然有效。我尝试读取其他仅限 root 的文件,并且成功了。
那么我做错了什么或者我忘记了什么,因为当我仍然可以读取仅限 root 的文件时,放弃 root 权限有什么意义。
您遇到的行为是版本 20.11.1 中修复的安全缺陷(Changelog)。您应该更新您的节点版本或通过仅使用环境变量运行节点来解决它
UV_USE_IO_URING=0
。
...之后,提升权限就不起作用了。
放弃特权后,没有机制可以重新获得它们。
但是我看到 process.env 没有更新。它仍然将用户显示为 root,但字段 SUDO_USER、SUDO_UID 和 SUDO_GID 添加了正确的值。
我不希望使用
setuid
和 setgid
来改变你的环境变量。存在 SUDO_*
变量是因为您正在使用 sudo
运行流程。如果您需要检查您的用户信息,可以使用 require('os').userInfo()
(docs)。