为什么执行设置了 suid 的脚本时不应用所有者权限?

为什么执行设置了 suid 的脚本时不应用所有者权限?

我有一个 bash 文件,当由组用户执行时,我想以所有者权限运行它。因此,我使用以下命令设置文件权限:

sudo -u owner_user chmod 4750 bash_script

该文件则具有以下权限:

-rwsr-x---.  1 owner_user group 6559 Mar 15  09:52 bash_script

该文件包含以下行:

cp other_folder/source_file other_folder/destination_file

当我以属于该组但不同于文件所有者的用户身份运行该文件时owner_user,收到以下错误消息:

cp:  cannot create regular file ´other_folder/destination_file´: Permission denied

文件的权限为:

-rw-r--r--. 1 owner_user group 4331 Mar 13  11:51 other_folder/destination_file
-rw-r--r--. 1 owner_user group 4331 Mar 13  11:51 other_folder/source_file

owner_user当我使用命令运行 bash_script 时

sudo -u owner_user ./bash_script

我没有收到上面的 cp 错误消息。

我期望在运行时应用owner_user的权限,无论谁执行它,因为 suid 已设置为。但事实似乎并非如此。有谁知道为什么吗?other_folder/destination_filebash_scriptbash_script

答案1

Linux 忽略所有解释型可执行文件的 setuid 位 (SUID) 和 setgid 位 (SGID)。

请阅读我们姊妹网站 Unix & Linux SE 上这个获得高度赞同的答案:允许在 shell 脚本上设置 setuid. 最重要的片段是 [强调添加]:

Linux 忽略所有解释型可执行文件(即以一行开头的可执行文件)上的 setuid¹ 位#!comp.unix.questions 常见问题解释 setuid shell 脚本的安全问题。这些问题分为两类:shebang 相关和 shell 相关;[…]

如果您不关心安全性并希望允许 setuid 脚本,那么在 Linux 下,您需要修补内核。[…]

[…]

  • Setuid shebang 不安全但通常会被忽略。
  • 如果您以特权运行程序(通过 sudo 或 setuid),编写本机代码或 perl,或者使用清理环境的包装器启动程序(例如带有选项的 sudo env_reset)。

¹如果你用“setgid”代替“setuid”,本讨论同样适用它们都会被 Linux 内核在脚本中忽略

如果您发现此信息有用,并且想要在超级用户上对此答案投赞成票,那么请首先考虑对链接的答案投赞成票。

您将在这里找到一些想法和链接:我可以让脚本始终以 root 身份执行吗?

相关内容