程序能否采用用户的权限,还是完全受所有者限制?

3
例如,当一个非root用户拥有程序所有权,但在*nix环境下由root用户运行该程序时,该程序能否以root权限执行操作?

2
http://en.wikipedia.org/wiki/Setuid? - Roman Saveljev
3个回答

3

应用程序的权限是根据执行该程序的用户来确定的。

如果它采用所有者的权限,例如sudo命令将没有任何效果。 此外,大多数位于/bin(或任何其他系统位置)中的应用程序都由root用户拥有(因此无法(轻松地)修改它们),但仍使用用户权限执行。

请注意,如果一个程序设置了setuidsetgid位,则该应用程序将分别以用户和/或组权限启动。 这使得普通用户可以执行通常需要root权限才能执行的操作,而无需访问root帐户。

要设置setuid位,请使用:

chmod u+s /path/to/application

同样适用于setgid位,但使用g+s而不是u+s

2
默认情况下,进程以启动它的用户的ID和权限运行,而不是程序所有者的ID。因此,如果root从属于普通用户的程序启动进程,则该进程将以ID=0运行。
正如Johnsyweb在评论中提到的那样,如果程序恰好设置了setuid位,它将作为所有者运行。这就是setuid的含义:设置用户ID。通常,这样做是为了允许普通用户运行需要超级用户权限的程序,例如ping。
但请注意,例如Linux有一种更高级的机制,即“Linux Capabilities”,可以授予某些选择权限,而不是完全的setuid。

默认情况下是这样的。...除非可执行文件设置了setuid属性。 - johnsyweb
1
@Johnsyweb 好主意。我希望没有人会提到它 :-)) - cnicutar

1
用户启动程序时,确定该运行的权限。如果您想使用另一个用户的权限运行程序,则可以使用susudo,或为程序设置setuid位。
chown user program
chmod u+s program

这将强制使用user的权限,无论谁运行程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接