我需要运行脚本作为root
。链接中给出的说明说我应该:
- 设置脚本上的 SETUID 位(即
chmod 4755
)。 - 以 sudo 运行脚本(即
sudo /path/to/thescript.sh
)
从我正在阅读的有关 SETUID 位的文档中,我的理解是,通过设置它,运行脚本的任何人都将获得所有者的特权。因此,如果脚本的所有者是root
,那么任何在 SETUID 位打开的情况下运行该脚本的人都将以 root 权限运行该脚本。
sudo
如果是这样的话,如果设置了 SETUID 位,为什么我需要在运行脚本之前执行 a操作?
如果我需要使用sudo
来运行脚本,为什么还要设置 SETUID 位呢?就像一个实验一样,我只是使用运行了我的脚本sudo
,它能够完成我需要做的事情(脚本递归地更改一堆文件的权限)。
答案1
好吧,简短的回答,SETUID root
永远不要设定剧本。事实上,它似乎不起作用。
长答案:永远,永远,永远,设定脚本SETUID root
,永远!
既然这太脑残了,我现在就到此为止。
那家伙说这种方法可能会造成严重的安全漏洞!噢噢!那你为什么这么回答呢?
您只SETUID root
信任能够完成特定任务的二进制程序,即使如此,也要非常非常谨慎!
话虽这么说,你想实现什么目标?
如果您希望普通用户能够以root
特权运行脚本,请确保该脚本对所有人来说都是只读的,root
并且向您的文件中添加一个条目/etc/sudoers
,以允许您的用户执行该脚本并且仅执行该脚本。
请参阅man sudoers
获取更多信息。
如果您有用户所属组的名称和脚本的完整路径,我可以/etc/sudoers
为您编写一条规则。