您可以使用 SetUID 位使脚本以文件所有者的权限运行。您可以通过将其所有者更改为 root 并设置其 SetUID 位来允许特定文件始终以 root 身份运行。设置 SetUID 位:
chmod 4755 <filename>
掩码:4000 是 SetUID,0700 是所有者 rwx,0050 和 0005 是组和世界 rx。
您必须确保所有者以外的用户不能编辑此文件,因为如果可以,他们将能够以您的用户身份运行任意命令,这是一个安全风险。
为了在需要时有效,您还必须将文件的所有者设置为 root:
sudo chown root <filename>
在这种情况下,<filename>
应该是您打算运行的任何脚本。它必须是可执行的——如果不是,即你试图运行一个没有设置为独立执行的python程序,你将需要使用一个启动它的包装器。
更多信息:http ://en.wikipedia.org/wiki/Setuid
请注意,使用 SetUID 位会带来许多安全风险。如果您需要澄清,请发表进一步的评论。
一位评论者指出,这很可能不适用于 shell 脚本。相反,您需要使用一个包装器,该包装器将从 C 或 C++ 等编译语言调用您的进程。
/* setuid_wrapper.cpp */
#include <unistd.h>
int main(int c, char * v[])
{
// the program to execute
// replace this with the program you want to call.
const char * executable = "/bin/false";
// arguments to pass to program
// MUST be null terminated, MUST start with executable path
const char * arguments[] = {executable, "arg1", "arg2", "etc...", NULL};
execv(executable, arguments);
perror("execv: ");
return 1;
}
编译:
g++ -o setuid_wrapper setuid_wrapper.cpp
按照前面的说明将其所有者更改为 root 并设置 SetUID 位,并配置您的系统以在需要时运行它而不是您的脚本。