gpt4 book ai didi

node.js - 允许非 root 用户 process.setuid 给某些其他用户

转载 作者:太空狗 更新时间:2023-10-29 12:24:27 32 4
gpt4 key购买 nike

我以非根用户身份运行 Node.js 进程,权限非常有限 (limited_user)。

但是,在这个应用程序中,有一个潜在的可攻击部分,我(在其他安全预防措施中)希望以权限更低的用户身份运行。我想通过将程序的这一部分放入不同的文件并使用 childProc.execSync("node my_dangerous_subprocess.js"); 来执行它在该文件中,process.setuid('very_limited_user'); 用于切换到不同的用户。

这行得通,只要我以 root/sudo 身份运行主进程。但是,我不想要那样。该过程应由 limited_user 运行 - 如果可能,没有 sudo 权限。

那么,在 Ubuntu 16.04 LS 上运行,我该怎么做才能让某个非根用户(limited_user)切换到某个其他用户(very_limited_user)通过 process.setuid?

使用的 Node.js 版本是 6.10.2。

最佳答案

你不仅可以使用sudo命令以管理员身份运行某些程序,sudo命令还可以用于以特定用户身份运行某些程序。

我不知道是否可以配置 sudo 使得特定命令可以作为特定用户执行而无需输入密码。

那么你要做的是:

childProc.execSync("sudo -u very_limited_user node my_dangerous_subprocess.js");

我自己不会这样做,因为我不知道 sudo 配置文件(而且我害怕以 sudo 的方式破坏这些文件不再工作了)但我可以很好地编写 C 语言。

我会编写以下程序:

#include <stdio.h>
#include <unistd.h>

int main()
{
int i;
i=geteuid();
setreuid(i,i);
i=getegid();
setregid(i,i);
execlp("node","node","my_dangerous_subprocess.js",NULL);
fprintf(stderr,"Could not execute node!\n");
return 1;
}

(注意 "node" 作为 execlp() 的参数出现了两次。)

我将编译程序并更改用户 ID、组 ID 和生成的可执行文件的标志(在此示例中,C 源文件名为“my_dangerous_part.c”):

gcc -o my_dangerous_part.bin my_dangerous_part.c
sudo chown less_privileged_user:less_privileged_group my_dangerous_part.bin
sudo chmod 6755 my_dangerous_part.bin

然后我可以像这样运行程序:

childProc.execSync("/directory_containing_the_file/my_dangerous_part.bin");

关于node.js - 允许非 root 用户 process.setuid 给某些其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46047205/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com