Ram*_*esh 4 setuid permissions
我正在尝试详细了解权限。我正在阅读有关setuid及其用途的信息。然而,这个特殊情况让我感到困惑。
我已经制作了一个小脚本,现在我已经为脚本设置了suid位,如下所示。
chmod u+s ramesh
Run Code Online (Sandbox Code Playgroud)
我看到权限设置如下。
-rwsrw-r-- 1 ramesh ramesh 29 Sep 30 10:09 ramesh
Run Code Online (Sandbox Code Playgroud)
现在,我相信使用 setuid 任何用户都可以执行脚本。现在,我执行了命令
chmod u-x ramesh
Run Code Online (Sandbox Code Playgroud)
它给了我许可,
-rwSrw-r-- 1 ramesh ramesh 29 Sep 30 10:09 ramesh
Run Code Online (Sandbox Code Playgroud)
现在,我明白S表示没有可执行位的 setuid。也就是说,没有人可以执行这个文件。
所以我的问题是,S位的设置有什么实际用途?我试图从设置这个位的示例角度来理解。
现在,我相信使用 setuid 任何用户都可以执行脚本。
不完全的。要使每个用户都可以执行脚本,您只需要设置 a+rx 权限:
chmod a+rx script
Run Code Online (Sandbox Code Playgroud)
setuid 意味着脚本总是以所有者的权限执行,也就是说,如果您有以下二进制文件:
martin@dogmeat ~ % touch dangerous
martin@dogmeat ~ % sudo chown root:root dangerous
martin@dogmeat ~ % sudo chmod a+rx,u+s dangerous
martin@dogmeat ~ % ll dangerous
-rwsrwxr-x 1 root root 0 Sep 30 17:23 dangerous*
Run Code Online (Sandbox Code Playgroud)
无论执行它的用户如何,此二进制文件将始终以 root 身份运行。显然,这是危险的,您必须非常小心使用 setuid,尤其是在编写 setuid 应用程序时。此外,您根本不应该在脚本上使用 setuid,因为它在 Linux 上本质上是不安全的。
现在,我明白 S 表示没有可执行位的 setuid。也就是说,没有人可以执行这个文件。
所以我的问题是,S位的设置有什么实际用途?我试图从设置这个位的示例角度来理解。
我认为没有实际目的,IMO 这只是权限位的可能组合。