还是只有root可以吗? 我想从.sh脚本更改非root用户的uid / gid 通过调用setuid / setgid。有可能吗?
答案 0 :(得分:0)
默认情况下,只有root可以使用setuid / setgid。也许与selinux或类似的东西。
答案 1 :(得分:0)
Bourne shell sh(1)没有setuid或setgid命令。实际上setuid(2)和setgid()是仅在编程语言(如C或Perl)中可用的系统调用(以及除shell脚本之外的任何代码)。即使可用,当作为非root用户调用时,调用的实用性也有限。这些调用不提供真实用户尚无法使用的权限。
还有文件模式setuid(setuid bit set)或setgid(意思是setgid位设置);但这些仅适用于二进制可执行文件,而不是(通常)用于sh脚本*。
对于普通用户,无需重新输入密码即可以其他用户身份运行命令,即使是从脚本中,也可以使用sudo(8)命令。 Sudo需要系统管理员进行配置。
还有其他方式可以作为不同的用户;但所有这些都涉及调用一个外部可执行文件,这个外部可执行文件已经被超级用户祝福(有setuid bit设置),或者让其他一些用户的进程执行任务。
另见
sudo(8) sudo命令
setuid(2) setuid系统调用
setuid bit访问模式
* Setuid on Shell Scripts
How can I get setuid shell scripts to work?