如何控制特权命令?

How the privileged commands are controlled?

操作系统如何阻止普通用户执行像 fdisk 和 umount 这样的命令,即使这些命令对每个人都有执行权限?

[root@r7prd1 ~]# ls -la $(which umount) 
-rwsr-xr-x. 1 root root 31960 Aug 21  2015 /usr/bin/umount 
[root@r7prd1 ~]# ls -la $(which fdisk) 
-rwxr-xr-x. 1 root root 182472 Aug 21  2015 /usr/sbin/fdisk 

在某些情况下,可能值得禁止用户执行任何二进制文件(我想这可能是针对特权升级攻击的一种反制措施)。但是在很多情况下,普通用户能够执行他们自己的二进制文件,那么如果用户自己编写和编译 fdisk 或类似的东西呢?真的,您不想禁止用户 运行 fdisk。您只想禁止 fdisk 或任何其他程序以某种方式修改系统状态。所以普通用户真的 可以执行 fdisk:

$ fdisk --help
Usage:
 fdisk [options] <disk>      change partition table
 fdisk [options] -l [<disk>] list partition table(s)
...

普通用户实际上不能做的是执行受限操作:

$ fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
fdisk: cannot open /dev/sda: Permission denied

所以fdisk启动成功,打印了一些消息。然后它试图打开原始磁盘设备 /dev/sda 并且是那个操作真的被权限限制,所以 fdisk 只是抱怨它不能做任何事情并退出。

不过,在某些情况下,您可能希望限制某些用户对某些二进制文件的可执行性。当管理员或 OS 维护者希望普通用户能够执行某些特权操作(例如挂载某些特定用户被 /etc/fstab 中的某些记录允许的分区)时,他们会设置一些特殊的具有设置用户 ID 权限的加固二进制文件,例如 mountsudo

$ ls -l /bin/mount /usr/bin/sudo
-rwsr-xr-x 1 root root  40152 May 27 02:31 /bin/mount
-rwsr-xr-x 1 root root 136808 Aug 17 16:20 /usr/bin/sudo

执行此类二进制文件时,内核不会为其提供调用用户的用户 ID,但在本例中为 UID 0 (root)。因为普通用户不能以这种方式设置二进制文件(root 所有者和 set-UID 位设置),所以理论上可能值得将这些二进制文件的可执行性限制到某个特定组(但在上述情况下,它们是世界可执行的并检查权限自己调用用户。我真的不知道,如果不能以某种方式规避 set-UID 可执行文件的可执行性限制,以及这种方法是否真的被某人广泛使用)。

还有一个额外的注意事项:如果您的系统上有 fdisk,它会安装到 /usr/sbin 目录中,该目录可能在也可能不在 PATH[=42= 中] 普通用户的变量,因此 fdisk 可能会或可能不会被普通用户通过在命令提示符下键入 fdisk 来执行,但这并不是真正的限制(可以简单地指定可执行文件的完整路径命令行)。