可以读取可执行文件吗?

可以读取可执行文件吗?

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

答案1

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

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

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

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

顺便说一句,-rwx-wx-wx这是一组非常奇怪的权限;它保护文件不被所有者以外的任何人读取,但允许任何人修改它。我想不出有哪一种情况是合理的。

答案2

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

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

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

答案3

简单的答案是:只有exec系统调用可以读取文件而不需要访问(尽管强制执行访问)。open否则O_RDONLY将会O_RDWR失败。

答案4

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

此外,系统加载器、内存管理器、交换器等……将读取具有“x”权限的文件,否则无法执行。

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

相关内容