0111 或 0333 等权限的用途

0111 或 0333 等权限的用途

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删除文件可能是个好主意。当然,更不用说ownerroot即使不是以其他方式,也可以简单地通过chmod文件的许可来规避此类措施。

相关内容