我进去了/sbin
,我看到shutdown
有权限rwxr-xr-x
。这是否意味着任何人都可以执行它?
shutdown
命令。
shutdown
。
我进去了/sbin
,我看到shutdown
有权限rwxr-xr-x
。这是否意味着任何人都可以执行它?
shutdown
命令。
shutdown
。
Answers:
任何人都可以执行shutdown
,但是触发系统关闭需要root特权。但是shutdown
不是setuid,因此只有root才能成功执行它。该shutdown
程序足以检查您的特权,并让您知道是否存在问题,但是即使它天真的尝试关闭系统,也不会发生任何事情。
GLENDOWER:我可以从很深的地方召唤精神。
HOTSPUR:为什么,我也可以,任何人也可以。但是当您要求他们时它们会来吗?
(摘自亨利四世)
shutdown
与没什么不同/bin/rm
。每个人都可以执行它,但是普通用户不能删除/etc
或其他用户的主目录。
特别是:只有以root特权(有效UID 0)运行的进程才能引导初始化系统停止系统服务,终止所有用户进程,并发出实际上停止计算机的系统调用。(如果shutdown
是setuid,则无论谁调用它,它都将以root身份运行;但事实并非如此。)
如何shutdown
从GUI 调用,例如使用control-alt-del进行调用?重要的是要意识到,在这种情况下,它是由rootshutdown
直接启动init
并以root特权运行的。 因此,走到控制台的每个人都有可能将其关闭。如果不希望这样做,则control-alt-delete实际上会运行shutdown -a
。(请参阅@ some1在其答案中引用的文档)。这告诉shutdown
检查当前登录的用户是否有权运行它。但这仅是相关的,因为shutdown
在这种情况下以root用户身份运行。
shutdown
,但是除非当前用户具有root特权,否则该程序实际上不会触发系统关闭。对?
shutdown
。使用拥有可执行文件的用户权限运行setuid程序。例如,/etc/passwd
以root权限运行,以允许您修改密码文件。参见手册chmod
。
/usr/bin/passwd
以root权限运行”!/etc/passwd
不可执行(正在修改“密码文件”)。
二进制文件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) = ?
shutdown
检查你的UID为0
if(getuid() != 0) printf("Need to be root");
。实际上,源代码表明了这一点。
如果您用-a标记关闭,则似乎shutdown将检查访问列表:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
由于当前正在调用时不带-a标志,因此默认情况下仅允许root用户关机。
如果希望其他用户能够运行该命令,请配置该文件并使用该标志。
Why can't I execute shutdown when the permission is rwxr-xr-x?
权限位不一定排除基于用户或组的访问控制。
-a
没有什么区别:shutdown -a
仍然必须以root权限执行(init
在control-alt-del上提供)。