是否可以仅对特定用户应用 setuid?

是否可以仅对特定用户应用 setuid?

据我了解,setuid 位意味着任何可以执行文件的用户都会以文件所有者的身份执行该文件。是否有可能,使用 ACL 或其他东西,以便只有选定的用户列表作为所有者执行该文件,而其他人则作为自己执行该文件?

我认为它是sudo.或者我必须为此使用sudo(或) 吗?su

答案1

这是不可能的,如果一个用户执行该文件,那么它会执行 setuid,但如果另一个用户执行该文件,它会在没有 setuid 的情况下执行。 setuid 位不包含在访问控制列表中。对于文件,它要么打开,要么关闭。

您可以部分实现您的目标。您可以只允许某些用户执行 setuid 文件,但其他用户将被完全禁止执行。

例如,考虑虚构的“privileged_command”程序。如果您想让它设置为 setuid 但只允许 adm 组的成员通过 acl 运行它,那么您可以通过以下方式执行此操作:

$ chown root.root privileged_command
$ chmod 4000 privileged_command
$ ls -l privileged_command
---S------ 1 root root 152104 Nov 17 21:15 privileged_command
$ setfacl -m g:adm:rx privileged_command

这是一个非常简单的示例,只需组权限即可实现。但是您可以继续使用 setfacl 来创建一组复杂的用户/组,这些用户/组可以执行该程序,也不能执行该程序。唯一的问题是,每个能够运行该命令的人都会运行它 setuid。其他任何人都会被拒绝,并且根本无法执行它。

这是我能想到的最接近您实际要求的内容。话虽如此,您所问的可能是一个坏主意™。额外权限的最佳实践适用于以下用户授权的行使这些特权积极地当且仅当他们打算以该权力行事时,才承担该权力。这就是 sudo 背后的全部目的。让某些命令根据执行者的不同自动以不同的权限执行,很容易导致意外误用。这就是为什么您通常不会一直以 root 身份登录的原因。

此外,以这种方式使用 ACL 会导致以后出现安全漏洞。 ACL 很少使用,甚至更很少需要。在这种情况下,使用它们来控制谁可以运行程序 setuid,谁拥有什么权限并不是立即显而易见的,没有中央文件或存储库显示谁拥有什么权限,或者哪些文件有什么 ACL 条件。它很快就会成为一场行政噩梦。

我不会说永远没有使用 ACL 的地方,但我可以用一只手用很多未使用的手指数出我见过令人信服的案例,证明这是一个好主意的次数。

相关内容