我可以让脚本始终以 root 身份执行吗?

我可以让脚本始终以 root 身份执行吗?

如何让脚本以 root 身份执行,无论是谁执行它?

我读过有关 setuid 的信息,但我不确定如何做到这一点。

我正在使用 Linux,Ubuntu 12.04 LTS。

答案1

一定要小心:与 setuid 结合的脚本非常危险!

首先,请看一下这个问题/答案,尤其是这个答案和安全警告

如果您仍想使用 set 执行脚本setuid,那么您可以编写一个简短的 C 程序作为包装器并setuid在编译的二进制文件上设置位。

包装器示例:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

另一个解决方案是使用sudo(提到)这里):

  1. 以 root 身份阻止对脚本的写访问(以及其他访问):

    chown root /absolute/path/to/your/script.sh
    chmod 700 /absolute/path/to/your/script.sh
    
  2. 确认除 root 之外没有人可以替换脚本例如通过修改父文件夹的访问权限:

    chown root /absolute/path/to/your/
    chmod 755 /绝对/路径/到/你的/
    
  3. /etc/sudoers使用以下命令修改 sudo 访问权限visudo

    全部 全部 = (根)NOPASSWD:/absolute/path/to/your/script.sh
    

    有关设置的更多详细信息(例如限制特定用户或组的访问)可以在 sudoers 手册页中找到。

之后,所有用户都可以以 root 身份运行脚本,无需密码:

sudo /absolute/path/to/your/script.sh

这与上面的使用wrapper/setuid解决方案类似。

答案2

最简单、最安全的方法是在文件权限中使用 SETUID 位。这样命令权限将提升为文件所有者权限。

为了防止脚本被编辑,请不要为每个人设置写入位。

答案3

我不知道这是否有用,但是为了使脚本仅以 root 身份运行,您可以在脚本的第一行使用这个 shebang:

#!/bin/su root

答案4

当我搜索这样的片段时偶然发现了这个问题:

[ "$(id -u)" != 0 ] && exec sudo "$0"

将其添加到脚本顶部将以 sudo 开头,并确保它始终以 root 身份运行,从而允许我们以 身份运行脚本./hello.sh。当然,sudo 仍会要求输入密码,但接受的答案将有助于避免这种情况。

相关内容