执行脚本的访问权限

问题描述:

我明白,可以独立设置文件的三种类型的权限(读,写,执行),因此每个用户(超级用户,组,普通用户)每个文件有八种可能性。基于这个事实,我曾经相信一个超级用户可以设置一个特定的脚本文件(在我的情况下是一个Ruby文件)是可执行的,但不能读写普通用户。但在this question的情况下,Wayne Conrad和Linuxios指出,脚本不能由没有对该文件的读取权限的用户运行。执行脚本的访问权限

  1. 为什么会出现这种情况?如果用户需要读取权限才能执行它,那么为什么可以独立设置三种权限类型?特别是,将脚本文件权限设置为可执行但不可读的意味着什么?

  2. 是否有某种方式(可能会使某个脚本文件可运行但不可读取)?

在脚本文件(python,perl,ruby,shell等)的情况下,文件本身并不是通常意义上的“执行”。相反,用户的shell会打开文件,就像fork/exec它一样,找到shebang,然后安排让请求的解释器启动,并将文件的其余部分传递给它。如果用户对文件没有读取权限,那么显然用户的shell无法读取它,并且此设置失败。

这不是二进制命令的情况,它确实可以在没有读取权限的情况下设置,并且仍然可以工作。