可以读取可执行文件吗?

Tom*_*Tom 9 linux permissions chmod

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

Kei*_*son 18

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

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

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

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

顺便说一句,-rwx-wx-wx是一组非常奇怪的权限;它保护文件不被所有者以外的任何人读取,但允许任何人修改它。我想不出一个有意义的案例。


cjc*_*cjc 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
Run Code Online (Sandbox Code Playgroud)

  • shell 脚本需要 READ 和 EXECUTE 访问权限才能运行。但是,编译后的二进制文件不会。因此,任何人都可以执行具有上述权限的已编译二进制文件! (4认同)