这是一个迟来的答案,但您可以在每次登录时执行它,并通过执行以下操作以 root(或您想要的任何其他用户)身份运行它:
/path/to/root-script.sh.让 root(或所需的用户)成为脚本的所有者。
chown root:root /path/to/root-script.sh`
Run Code Online (Sandbox Code Playgroud)在脚本上设置 setuid 位以及其他所需的权限。(确保它不是普遍可写的等)
chmod 4755 /path/to/root-script.sh
Run Code Online (Sandbox Code Playgroud)
该4方法设置 setuid 位,这将导致脚本以脚本所有者的身份运行。这是用来sudo确保以 root 身份执行的。
root-script.sh为了确保它在每次登录时运行,请从 中运行 Sticky-bit-set /etc/profile。/etc/profile无论用户使用什么 shell,都应该运行。请注意,这仅适用于交互式登录。
编辑。正如 Scott 在评论中指出的,该解决方案通常不适用于具有 Perl < 5.12.0 之外的任何 shebang 脚本的任何现代系统。现代内核会忽略带有 setuid 位的脚本,除非它们已被修补,出于安全原因,不建议这样做。
相反,setuid 通常仅适用于已编译的二进制文件和
可以使用(Perl <5.12.0 ) 和suidperl。
这个 Unix/Linux SE 问题彻底回答了为什么 shebang 脚本会忽略 setuid,并总结了 TL;DR:
Setuid shebang 不安全,但通常被忽视。如果您使用特权运行程序(通过 sudo 或 setuid),请编写本机代码或 perl,或者使用清理环境的包装器启动程序(例如带有 env_reset 选项的 sudo)。