Linux 通过HTTP运行更高权限命令的适当方式是什么

Linux 通过HTTP运行更高权限命令的适当方式是什么,linux,web-services,http,shell,Linux,Web Services,Http,Shell,我有一个web项目,需要在请求特定URL时运行该项目的命令,但该命令需要root权限 该项目由一个Python进程(Django)提供,当然,使用root权限运行它不是一个选项 该命令的参数是硬编码的,因此不可能注入任何东西,而且它是一个受权利保护的应用程序,因此我可以在安全性方面稍微宽松一些,因为将访问它的用户将是可信的(希望如此)。然而,理想的情况下,我想做它安全 .使用setuid: setuid和setgid(分别是执行时设置用户ID和执行时设置组ID的缩写)是Unix访问权限标志,允许

我有一个web项目,需要在请求特定URL时运行该项目的命令,但该命令需要root权限

该项目由一个Python进程(Django)提供,当然,使用root权限运行它不是一个选项

该命令的参数是硬编码的,因此不可能注入任何东西,而且它是一个受权利保护的应用程序,因此我可以在安全性方面稍微宽松一些,因为将访问它的用户将是可信的(希望如此)。然而,理想的情况下,我想做它安全

.

使用setuid:

setuid和setgid(分别是执行时设置用户ID和执行时设置组ID的缩写)是Unix访问权限标志,允许用户以可执行文件所有者或组的权限运行可执行文件


…而且要非常非常小心

使用
NOPASSWD:
选项通过
sudo
调用命令,该选项允许您进行细粒度的访问控制,并允许您免费在syslog中进行审核。避免使用shell,并使用直接将参数作为数组的
exec
变量。

尽可能避免使用setuid和setgid,您希望以尽可能低的权限保留HTTP服务器。对于需要root权限的进程,使用http服务器创建一个全新的单独进程并调用sudo。但是,您不应该在sudoers中包含HTTP服务器uid或gid,而应该包含其他某个用户,该用户是唯一可以访问该程序的用户,并且该程序是唯一可以作为root用户运行的用户。然后HTTP服务器启动一个新进程,它将UID更改为哑用户,然后以sudo作为根用户执行该进程。

是的,不要自食其果。你所要求的是被剥削的尖叫;-)如果我的理解是正确的,正确的方法不是在HTTP服务器本身上设置gid/uid,而是在要运行的二进制文件的隐藏副本上设置gid/uid。例如,我想通过用户www数据运行命令“svnserve”。我可以在www data和setuid的主文件夹中复制“svnserve”二进制文件。这样,唯一可以在没有root权限的情况下运行“svnserve”的用户就是www数据。并且此用户无法运行任何其他需要root权限的可执行文件。不完全是这样,您创建了一个名为svnserver runner的用户,并将svnserver runner添加到sudoers列表中,该列表可以作为root用户运行svnserve。然后http服务器创建一个新线程,将该线程的UID更改为SVN服务器运行程序,然后该线程使用SUDO执行SVN服务,以使其以root用户身份运行。