还有一种更简单的方法可以绕过“执行”权限:将程序复制到您拥有的目录中并设置“执行”位。
“执行”权限不是安全措施。安全性在较低级别提供,操作系统限制特定操作。这样做是因为在许多类 Unix 系统上(尤其是在 Ritchie 和 Thompson 时代),假设用户能够创建自己的程序。在这种情况下,使用“执行”权限作为安全措施是没有意义的,因为用户可以简单地创建自己的敏感程序副本。
举个具体的例子,fdisk
以非特权用户身份运行,尝试打乱硬盘的分区表:
$ /sbin/fdisk /dev/sda
Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
...
Changed type of partition 'Linux' to 'Hidden NTFS WinRE'.
Command (m for help): w
fdisk: failed to write disklabel: Bad file descriptor
最后一行fdisk
试图获取硬盘驱动器的“写入”文件描述符并失败,因为我正在运行它的用户没有这样做的权限。
“执行”权限的目的有两个:1) 告诉操作系统哪些文件是程序,以及 2) 告诉用户他们可以运行哪些程序。这两者都是建议性的,而不是强制性的:您可以在未经许可的情况下创建功能完善的操作系统,但它可以改善用户体验。
正如 R.. 指出的那样,有一种特殊情况是“执行”权限用于安全性:当程序还设置了“setuid”位时。在这种情况下,“执行”权限可用于限制允许谁运行程序。任何绕过“执行”权限的方法也会去除“setuid”状态,所以这里没有安全风险。