3

例如,当一个程序由 root 用户在 *nix 环境中运行,但程序所有者是非 root 用户时,该程序可以执行具有 root 权限的操作吗?

4

3 回答 3

3

应用程序的权限取决于执行该程序的用户。

例如,如果它需要所有者的权限,则该sudo命令将没有任何效果。此外,/bin(或任何其他系统位置)中的大多数应用程序都归根用户所有(因此无法(轻松)修改它们),但仍以用户权限执行。

请注意,如果程序设置了setuidorsetgid位,则应用程序将分别以用户和/或组权限启动。这允许普通用户执行通常需要 root 权限的操作,而无需访问 root 帐户。

要设置setuid位使用:

chmod u+s /path/to/application

位也是如此setgid,但使用g+s而不是u+s.

于 2013-02-27T11:42:20.337 回答
2

默认情况下,该进程使用启动它的用户的 ID 和权限运行,而不是使用程序所有者 ID。因此,如果root从普通用户拥有的程序启动进程,该进程将以 ID=0 运行。

正如Johnsyweb评论中提到的,如果程序碰巧setuid设置了位,它将作为所有者运行。这就是setuid意思:设置用户 ID。通常这样做是为了允许普通用户运行ping需要超级用户权限的程序。

但是请注意,例如 Linux 具有“ Linux Capabilities ”形式的高级机制,其中可以授予某些选择权限而不是完整的 setuid。

于 2013-02-27T11:42:36.847 回答
1

启动程序的用户决定了该运行的权限。如果您希望程序以其他用户的权限运行,您可以使用susudo设置该setuid程序的位

chown user program
chmod u+s program

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

于 2013-02-27T11:47:41.490 回答