如何在Linux中使用root权限运行脚本

问题描述:

我必须开发一个用CGI编写的网站。如何在Linux中使用root权限运行脚本

我想知道如何从CGI运行具有root权限的脚本。

假设脚本名称为hello,我从CGI运行它,如system(“pathToTheFile/hello”)

现在我想以root身份运行这个hello文件;有人可以帮助我吗?

+2

有什么好的理由呢? – 2011-05-25 03:36:11

+0

现在我必须使用脚本在我的系统中编写一个文件,但我需要root权限来编写文件。 – kevin 2011-05-25 03:37:31

+4

顺便说一句,你应该考虑允许网页获得root权限的分歧。 – 2011-05-25 03:39:26

正常的方法是将用户拥有的可执行文件归您所有,然后设置SUID位。

使用sudo的方法通常需要用户输入密码(这里有解决方法,但它们非常复杂)。

我想我不需要提到设置SUID位是非常危险的事情,是的?如果有任何其他方式来做你想要的,你应该使用它。你可能要考虑


一件事是提出这个问题不是你需要的解决方案方面,而且在你要解决的问题是什么。以root身份运行的是解决方案,并不一定是好的。 Post 什么你试图实现,而不是如何,,我们可以帮助你在一个非常危险的方式。

通常最安全的方法是使用类似UNIX的操作系统的功能setuid。如果设置了hello程序的所有者是root,然后设置setuid位:

chmod u+s hello 

那么无论谁执行的程序,它会执行为根。这适用于本机可执行文件,但不适用于解释脚本。如果“你好”必须是脚本,那么这对你不起作用。

现在,我不得不说,一般来说,setuid root程序并不是一个好主意。通常,您可以创建一个特殊用户来拥有该脚本,并为该用户提供一些所需的有限权限,然后将脚本setuid设置为该用户。

+2

不,这不适用于脚本。只有二​​进制文件。此外,*你*无法设置,这将是一个很大的安全漏洞。现有的root帐户必须设置该帐户。但是,这可能是你。 – Keith 2011-05-25 03:41:38

+0

@Keith,你应该有一个脚本,它运行经过特殊修改的setuid shell(一个“真实”可执行文件),并传递另一个脚本作为参数。这会解决这个问题。答案是肯定的,但大多数问题都有解决方法。 – paxdiablo 2011-05-25 03:44:32

+0

@pax,true,但你仍然需要在某处设置一些二进制文件。这篇文章没有提到额外的步骤,所以我想我会的。另外,我不同意这是最安全的方式,因为“无论谁执行”它都会获得更高的权限。 'sudo'更安全,因为您可以定义对谁可以执行的更细粒度的控制(例如,仅限Web服务器的UID)。 – Keith 2011-05-25 03:50:19

一个更安全的做法是将网页中的程序执行从网页中断开连接。相反,使用Unix本地套接字,命名管道或排队作业目录。

该目录可能是最容易处理的。设置您的网页可以写入文件的目录。当你的页面需要完成时,写一个描述作业的文件。然后你有一个以root身份运行的程序,等待新的工作。如果需要快速响应,它可以连续运行,也可以使用crontab条目每分钟或每几分钟运行一次。