Linux权限如111或333(即用户可以执行, 但无法阅读文件),如果执行能力并不自动意味着读取能力?
答案1
我玩过它,显然,执行权限并不意味着读取权限。二进制文件可以执行但不可读:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
但我无法执行脚本,除非它们同时具有读取和执行权限位:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
答案2
这对于目录来说是有意义的,例如,如果您将(秘密)可执行文件保存在特定目录中,然后允许用户调用这些文件而无法看到目录内容(但在您通知他们后知道特定文件在那里!)。与 111 相比,333 允许在这些目录中写入/删除文件,而无法看到目录的内容。
答案3
显然,并非所有组合都那么有用,但就您具体提到的组合而言...您实际上不需要read
执行文件的权限——只需要execute
权限——除非有问题的文件是一个脚本(例如 shell 脚本) ( .sh
)、perl 脚本 ( .pl
) 等)。只要有execute
权限就可以执行普通的二进制文件。在*BSD系统上,一些可执行文件execute
未经许可就授予许可read
,特别是在“安全重要”命令上——例如su
。
那么为什么不给用户read
-permission(并且只是execute
-permisson)呢?因为用户无法读取的文件无法被读取。复制的要么由该用户!删除read
权限可以防止用户制作自己的可执行文件的“个人”副本——他们以后可能会滥用这些副本(例如 get SUID=root on
)。
并且没有write
权限,可以防止文件被意外删除。
请注意,既不给所有者也不给所有者read
权限write
的情况有点不常见,但有时甚至阻止所有者owner
删除文件可能是个好主意。当然,更不用说owner
,root
即使不是以其他方式,也可以简单地通过chmod
文件的许可来规避此类措施。