我有一个直接访问一些磁盘的VMWare虚拟机。为了运行(不将 vmware 作为 su 运行,这有其自身的问题),我需要更改设备的所有权。我已经使用手动完成此操作尼莫,所以我知道需要执行什么操作。
我写了一个 shell 脚本来做到这一点
chown john:john /dev/disk/by-id/blahblah /dev/anotherblah /dev/lastoneblah
我将其保存为文件drive-owner
,设置执行位,然后在 root shell 中将其所有者更改为 root 并设置 +s 特殊模式标志。
根据 ls 的结果,结果是-rwsr-sr-x
。
如果我从普通(非 root)shell 运行它,我会收到来自 chown 的错误,不允许操作。 它的运行不会受到 root shell 的抱怨。
我似乎缺少自动以 root 身份运行脚本的部分。我认为这就是“setuid”权限的目的和功能,并且+s 是如何指定的。
我缺少什么?
答案1
出于安全原因,shell 脚本会忽略 setuid 和 setgid 标志。
答案2
请按照下列步骤操作:
- 尝试
sudo
- 尝试
chmod +x script_path
- 如果安全性不重要,请运行
chmod 777 script_path
答案3
@hildred 在上面的评论中指出了这一点。我会将其扩展为答案,因为我认为这是正确且强烈推荐的答案。
这极好的命令
…允许指定用户像 root 一样执行脚本(或其他命令);或者它可以在执行命令之前根据每个命令设置 uid、gid 和/或补充组。它旨在成为使脚本 setuid root 的安全替代方案。 Super还允许普通用户提供命令供其他人执行;这些命令使用提供命令的用户的 uid、gid 和组来执行。
(强调我的)。