【发布时间】:2010-09-23 00:23:20
【问题描述】:
还是只有root可以? 我想从 .sh 脚本更改非 root 用户的 uid/gid 通过调用 setuid/setgid。有可能吗?
【问题讨论】:
标签: unix
还是只有root可以? 我想从 .sh 脚本更改非 root 用户的 uid/gid 通过调用 setuid/setgid。有可能吗?
【问题讨论】:
标签: unix
默认情况下,只有 root 可以使用 setuid/setgid。也许与 selinux 或类似的东西。
【讨论】:
sh(1)(Bourne shell)没有可用的 setuid 或 setgid 命令。实际上setuid(2) 和 setgid() 是系统调用,只能在 C 或 Perl 等编程语言中使用(以及除了 shell 脚本之外的几乎任何代码)。即使可用,这些调用在以非 root 用户身份调用时也具有有限的实用性。这些调用没有赋予真实用户不可用的特权。
还有文件模式setuid(setuid bitset)或者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?
【讨论】: