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

时间:2009-06-02 22:25:25

标签: linux web-services http shell

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

该项目使用Python进程(Django)提供,当然不能以root权限运行它。

命令的参数是硬编码的,因此无法注入任何内容,而且它是一个受到保护的应用程序,所以我可以稍微更自由一点安全,因为有权访问它的用户将是值得信赖的(希望如此)。但理想情况下,我想安全地做到这一点。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

使用setuid:http://en.wikipedia.org/wiki/Setuid

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

......非常,非常小心!

答案 2 :(得分:1)

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