-1

操作系统如何阻止普通用户执行 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 
4

1 回答 1

1

在某些情况下,可能值得禁止用户执行任何二进制文件(我想这可能是针对特权提升漏洞的对策之一)。但在很多情况下,普通用户能够执行自己的二进制文件,那么如果用户自己编写和编译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用户mountsudo. -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在命令提示符下键入来执行,但它并不是真正的限制(可以简单地在命令行上指定可执行文件的完整路径)。

于 2016-11-02T18:20:58.130 回答