我有一个以普通用户身份运行的程序,但有时需要运行需要 root 权限的命令。因此,我编写了一个 shell 脚本,并授予用户使用 sudo 运行该脚本的权限。
当我从 shell 运行程序时,脚本执行成功,但作为服务运行时失败。Sudo 退出并显示以下错误:
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with
the 'nosuid' option set or an NFS file system without root privileges?0
user ALL = (root) NOPASSWD: /path/to/script
我不知道为什么。Sudo 工作正常,并且 的权限/usr/bin
也/usr/bin/sudo
正确。
答案1
您已NoNewPrivileges=true
在单元文件中设置
来自文档:
如果为 true,则确保服务进程及其所有子进程永远无法获得新权限。此选项比相应的安全位标志(见上文)更强大,因为它还禁止任何类型的 UID 更改。这是确保进程及其子进程永远无法再次提升权限的最简单、最有效的方法。
因此,即使可执行文件设置了 suid 位,sudo 也不会获得 root 权限