如果一个文件具有权限-rwx-wx-wx可以被其他和组用户读取,还是只能执行和写入? 有没有办法通过执行它来读取可执行文件?
具有-rwx-wx-wx权限的文件具有对所有者的读/写/执行权限,并为其他人编写/执行(但不是读取)权限。
如果是脚本(通常是第一行有#!的文本文件),则不能由其他人执行,因为执行脚本确实会执行解释器,必须能够读取脚本。 (解释器必须是一个二进制文件,而不是另一个文件)(实际上,对于所有的系统来说都不是这样的;具有3.2.0 Linux内核的Ubuntu允许解释器本身是一个解释脚本,似乎有一个限制大约有4个级别,这个问题不太可能与这个问题有关。)
如果是二进制可执行文件,则可以直接执行,但其内容无法读取。 这意味着,例如,除了所有者之外的其他人可以将其作为命令运行,但不能获取可执行文件的副本。
当然,执行需要读取,但是由内核读取,而不是由用户读取。 您可能可以通过检查进程运行时的内存来获取有关可执行文件内容的信息,但是我怀疑您可以重新构build二进制可执行文件。 如果可执行文件是setuid,则无法检查进程的内存(除非有权访问正在执行的帐户)。
顺便说一下, -rwx-wx-wx是一组非常奇怪的权限; 它保护文件不被所有者以外的人读取,但允许任何人修改它。 我想不出一个合理的情况。
有了这些权限,只有文件的所有者才能执行它。
其他用户可以写信给它,但不能执行它(因为在这种情况下的执行意味着能够读取它),但是他们可以把它写成一个黑盒子:
user1:~$ cd /tmp user1:/tmp$ echo "hostname" > testfile.sh user1:/tmp$ chmod +x testfile.sh user1:/tmp$ ./testfile.sh server.example.com user1:/tmp$ chmod 733 testfile.sh user1:/tmp$ ls -l testfile.sh -rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh user1:/tmp$ sudo su - user2 user2:~$ cd /tmp user2:/tmp$ ./testfile.sh ./testfile.sh: Permission denied user2:/tmp$ cat testfile.sh cat: testfile.sh: Permission denied user2:/tmp$ echo 'echo hello' >> testfile.sh user2:/tmp$ ./testfile.sh ./testfile.sh: Permission denied user2:/tmp$ logout user1:/tmp$ ./testfile.sh server.example.com hello
简单的答案是否定的 :只有exec系统调用可以读取文件而不需要读取权限(尽pipe强制执行访问权限)。 用O_RDONLY或O_RDWR open将失败。
当然,任何文件都可以被root用户读取。
此外,系统加载程序,内存pipe理,交换等….将读取一个'x'权限的文件,否则无法执行。
公开可执行内容的可能漏洞可能是进程的/ proc文件,核心文件或使用debugging器。