权限为rwxr-xr-x时为什么不能执行shutdown?

Kor*_*era 34 shutdown security permissions

我在/sbin,我看到shutdown有权限rwxr-xr-x。这不是说任何人都可以执行吗?

ale*_*xis 76

任何人都可以执行shutdown,但触发系统关闭需要 root 权限。但是shutdown不是setuid,所以只有root才能成功执行。该shutdown程序足以检查您的权限并让您知道是否有问题,但即使它天真地尝试关闭系统,也不会发生任何事情。

GLENDOWER:我可以从浩瀚的深处召唤灵魂。
HOTSPUR:为什么,我可以,或者任何人都可以;但是当你打电话给他们时,他们会来吗?
(来自亨利四世)

shutdown与 没有什么不同/bin/rm。每个人都可以执行它,但普通用户不能删除/etc,或其他用户的主目录。

具体来说:只有以 root 权限(有效 UID 0)运行的进程才能指示init 系统停止系统服务,终止所有用户进程,并发出实际停止机器的系统调用。(如果shutdown是 setuid,无论谁调用它,它都会以 root 身份运行;但事实并非如此。)

如何shutdown从 GUI调用,例如使用 control-alt-del?重要的是要意识到,在这种情况下,它shutdown是由直接启动init以 root 权限运行的。 因此,走到控制台的每个人都可能将其关闭。如果这是不可取的, control-alt-delete 将实际运行shutdown -a。(请参阅@some1 在他们的回答中引用的文档)。这告诉shutdown检查当前登录的用户是否有权运行它。但这只是相关的,因为shutdown在这种情况下以 root 身份运行。

  • 说明:任何人都可以执行“shutdown”程序,但该程序**不能**真正触发系统关闭,除非当前用户具有 root 权限。对? (2认同)

cha*_*aos 15

二进制文件shutdown本身会检查您的 UID 是否为 0。

查看以下的 strace 输出:

strace /sbin/shutdown -r -h now
...
...
geteuid()                               = 10001
setuid(10001)                           = 0
getuid()                                = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1)                           = ?
Run Code Online (Sandbox Code Playgroud)

  • +1 用于显示 strace 的使用......这很有用。但是,我没有看到此跟踪如何显示 `shutdown` 检查您的 UID 是否为 0。 (4认同)

Vin*_*inz 5

是的 !每个人都可以运行该命令。正如您所说,您可以运行它,但您面临的是“需要成为 root”消息,而不是permission denied. 该shutdown命令会检查您UID是否是 root 用户。