我从来不明白这一点,因为如果你有权读取一个文件,这是否意味着你可以将其复制到其他地方,从而允许你执行它?
我错过了什么?
答案1
可执行标志用于指示内核应该读取然后运行数据。这是通过不同的调用来实现的执行某事和阅读某物。对于已编译的程序,完全可以只对其具有执行权限而没有读取权限;您甚至无法在其他地方“cp”它们。对于解释的项目(如 shell 脚本),需要读取才能执行。
我知道有一个 Linux 发行版使用执行标志来控制启动时触发的脚本。
简而言之,Execute 标志用于指示编译代码跑步。解释代码通过父处理器运行,可能只需要“读取”。
答案2
一些可能的原因:
- 它可以保护文件免于被意外执行。
- 这样,哪些文件是可执行文件就一目了然了(在 Windows 上,你需要检查注册表中的可执行文件扩展名列表才能知道)
- 它可以保护您免受一些安全漏洞的侵害(攻击者不仅需要一种方法将文件放到您的系统上并以某种方式执行它,他们还需要一种方法来更改其权限)。
- 如果用户可以写入的唯一磁盘具有“删除”执行位的 umask/mount 选项,他们就无法将其复制到其他地方并使其可执行(至少在那台机器上不行,而且你可能还必须采取其他预防措施)
可能还有其他原因...
答案3
这是否意味着您可以将其复制到其他地方,从而允许您执行它?
不,这不正确。
在某些情况下,即使文件已设置可执行位,也无法执行它。以下至少有两种情况:
- 明确禁止执行的受限 shell
- 挂载了禁止执行选项