可以读取可执行文件吗?


9

如果文件具有权限-rwx-wx-wx,其他用户和组用户可以读取该文件,还是只能执行和写入该文件?有什么方法可以通过执行来读取可执行文件吗?


我无法说出标准的方式。
蒂姆(Tim)

Answers:


18

一个文件 -rwx-wx-wx权限对所有者具有读/写/执行权限,对其他所有人具有写/执行(但不读)权限。

如果是脚本(通常是#!第一行的文本文件),则其他人将无法执行它,因为执行脚本实际上会执行解释器,该解释器必须能够读取脚本。(解释器必须是二进制文件,而不是其他脚本。)(实际上,并非所有系统都如此;具有3.2.0 Linux内核的Ubuntu允许解释器本身成为解释器脚本。似乎存在限制。大约4个级别。与这个问题不太可能相关。)

如果它是二进制可执行文件,则可以直接执行,但无法读取其内容。例如,这意味着所有者以外的其他人可以将其作为命令运行,但是无法获取可执行文件的副本。

当然,执行需要读取,但是它是由内核而不是用户读取的。通过检查进程运行时的内存,您也许能够获得有关可执行文件内容的一些信息,但是我怀疑您能否重构二进制可执行文件。而且,如果可执行文件是setuid,则您将无法检查进程的内存(除非您有权访问执行该进程的帐户)。

顺便说一句,-rwx-wx-wx是一组非常奇怪的权限。它保护文件,防止所有者以外的任何人读取该文件,但允许任何人对其进行修改。我想不出一个合理的案例。


只是一个抽象的随机问题:分析/调试工具仅对具有可执行权限的exec起作用吗?
Sairam

@Sairam:实验说不:chmod 111 hello ; gdb ./hello./hello: Permission denied.rNo executable file specified.
Keith Thompson

对于非可执行文件,类似-rw--w--w-的东西对于诸如日志文件之类的东西可能很有用,在该文件中,您希望人们能够将信息写入日志而不能够读取它。当然,他们可以清空文件,但这是一个单独的问题。
戴夫

6

具有这些权限,只有文件的所有者才能执行它。

其他用户可以写入它,但不能执行它(因为在这种情况下,执行意味着可以读取它),但是他们可以将其写为黑匣子:

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

4
Shell脚本需要READ和EXECUTE访问才能运行。但是,编译的二进制文件不是。因此,具有上述权限的已编译二进制文件可以由任何人执行!
mdpc

1
我想这提出了关于OP试图完成什么的问题,即,为什么编译后的二进制文件是可写的?权限集(733)实际上花了我一些时间,因为它是非标准的。
cjc 2012年

2

简单的答案是“ 否”:只有execsyscall可以读取文件而无需读取访问权限(尽管强制执行访问权限)。一个openO_RDONLYO_RDWR将失败。


1

当然,root用户可以读取任何文件。

另外,系统加载器,内存管理,交换器等...将读取具有“ x”许可的文件,否则无法执行。

公开可执行内容的可能漏洞可能是进程的/ proc文件,核心文件或使用调试器。


仅当chmod| chown已执行
沃伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.