我必须开发一个用CGI编写的网站。
我想知道如何从CGI运行具有root权限的脚本。
假设脚本名称为hello
,我从CGI运行它,如 system(“pathToTheFile / hello”)。
现在我想以root身份运行这个hello文件;任何人都可以帮我这个吗?
答案 0 :(得分:2)
通常,最安全的方法是使用类UNIX操作系统的 setuid 功能。如果您将hello
程序的所有者设置为root
,然后设置setuid位:
chmod u+s hello
然后无论谁执行程序,它都将以root身份执行。这适用于本机可执行文件,但不适用于解释的脚本。如果“你好”必须是一个脚本,那么这对你不起作用。
现在,我不得不说,一般来说,setuid root程序并不是一个好主意。通常,您可以创建一个特殊用户来拥有该脚本,并为该用户提供所需的一些有限权限,然后将脚本setuid设置为该用户。
答案 1 :(得分:1)
正常的方法是让你想要运行它的用户拥有可执行文件,然后设置SUID位。
使用sudo
的方法通常需要用户输入密码(有很多方法,但它们很复杂)。
我想我不需要提及设置SUID位是一件非常危险的事情,是吗?如果任何以其他方式做你想做的事,你应该使用它。
您可能想要考虑的一件事是,不是根据您需要的解决方案提出问题,而是根据您想要解决的问题提出问题。以root身份运行是解决方案,并不一定是好的。发布你想要实现的,而不是如何,,我们可以用更危险的方式帮助你。
答案 2 :(得分:1)
从网页以root身份执行操作的更安全的方法是断开程序执行与网页的连接。而是使用Unix本地套接字,命名管道或排队作业目录。
该目录可能是最容易处理的。设置网页可以将文件写入的目录。当您的页面需要完成某项操作时,请编写描述该作业的文件。然后你有一个以root身份运行的程序,等待新的工作。它可以在需要快速响应时连续运行,也可以使用crontab条目每分钟或每隔几分钟运行一次。