![脚本要求输入 root 密码,即使它对每个人都具有可执行权限](https://linux22.com/image/1479452/%E8%84%9A%E6%9C%AC%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%20root%20%E5%AF%86%E7%A0%81%EF%BC%8C%E5%8D%B3%E4%BD%BF%E5%AE%83%E5%AF%B9%E6%AF%8F%E4%B8%AA%E4%BA%BA%E9%83%BD%E5%85%B7%E6%9C%89%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%9D%83%E9%99%90.png)
我有一个名为“somescript”的脚本,它对每个人都具有可执行权限(755),但当我尝试使用非 root 用户运行它时,它一直询问 root 密码。我甚至尝试将其设置为 4755,但没有成功。目前只有管理员用户和具有 root 密码的用户运行该脚本。
我怎样才能让任何用户都能运行该脚本(但不能更改它)
-rwxr-xr-x 1 root group1 2841 Jul 8 2014 somescript
user@node:~> somescript
root's password:
编辑:在尝试 Setuid 和 Setgid 后发现它们不起作用,我通过脚本进行了更多检查,发现脚本正在检查用户名是否为 root,如果不通过 sudo 执行,则会强制使用 root 密码。注释掉此脚本应该可以通过将 setuid 设置为 root 来使其工作。
if [ "$uid" != "root" ]
then
exec sudo /someplace/somescript
else
答案1
脚本可能要求执行某些具有root
特权的操作,这与权限无关(在这种情况下),因为此操作将由当前用户执行,并且您没有启用SETUID
或SETGID
位。
但是,您可以激活SETUID
脚本上的位。这将使脚本以所有者用户的身份运行(在您的情况下)root
,但运行脚本的用户无需执行任何特权提升。
您可以通过运行以下命令来执行此操作:
chmod u+s somescript
更多关于SETUID/SETGID
:了解 setuid 和 setgid 权限以提高安全性