在某些情况下,可能值得禁止用户执行任何二进制文件(我想这可能是针对特权提升漏洞的对策之一)。但在很多情况下,普通用户能够执行自己的二进制文件,那么如果用户自己编写和编译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
抱怨它无法执行任何操作并退出。
但是,在某些情况下,您可能希望限制某些用户对某些二进制文件的可执行性。当管理员或操作系统维护人员希望普通用户能够执行某些特权操作(例如安装某个特定/etc/fstab
用户mount
被sudo
. -ID 权限:
$ 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变量中的目录中,因此普通用户fdisk
可能会或可能不会通过fdisk
在命令提示符下键入来执行,但它并不是真正的限制(可以简单地在命令行上指定可执行文件的完整路径)。