如何控制特权命令?
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 权限的加固二进制文件,例如 mount
或 sudo
:
$ 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
来执行,但这并不是真正的限制(可以简单地指定可执行文件的完整路径命令行)。
操作系统如何阻止普通用户执行像 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 权限的加固二进制文件,例如 mount
或 sudo
:
$ 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
来执行,但这并不是真正的限制(可以简单地指定可执行文件的完整路径命令行)。