Назад | Перейти на главную страницу

Можно ли прочитать исполняемый файл?

Если у файла есть разрешения -rwx-wx-wx может ли он быть прочитан другими пользователями и пользователями группы, или он может быть только выполнен и написан? Есть ли способ прочитать исполняемый файл, запустив его?

Файл с -rwx-wx-wx permissions имеет права на чтение / запись / выполнение для владельца и права на запись / выполнение (но не на чтение) для всех остальных.

Если это сценарий (обычно текстовый файл с #! в первой строке), затем не могу быть выполнены другими, потому что выполнение сценария действительно запускает интерпретатор, который должен иметь возможность читать сценарий. (Интерпретатор должен быть двоичным, а не другим сценарием.) (На самом деле, это не верно для всех систем; Ubuntu с ядром Linux 3.2.0 позволяет самому интерпретатору быть интерпретируемым сценарием. Кажется, есть предел примерно 4 уровня. Это не имеет отношения к этому вопросу.)

Если это двоичный исполняемый файл, он жестяная банка выполняться напрямую, но его содержимое нельзя прочитать. Это означает, например, что кто-то другой, кроме владельца, может запустить его как команду, но не может получить копию исполняемого файла.

Конечно, для выполнения требуется чтение, но оно читается ядром, а не пользователем. Возможно, вы сможете получить некоторую информацию о содержимом исполняемого файла, исследуя память процесса во время его работы, но я сомневаюсь, что вы сможете восстановить двоичный исполняемый файл. А если исполняемый файл установлен с идентификатором 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 syscall может читать файл без необходимости читать доступ (хотя и требует выполнять доступ). An open с участием O_RDONLY или O_RDWR потерпит неудачу.

Конечно, любой файл может быть прочитан пользователем root.

Кроме того, системный загрузчик, управление памятью, модуль подкачки и т. Д. Будут читать файл с разрешением «x», в противном случае он не может быть выполнен.

Возможными дырами в раскрытии исполняемого содержимого могут быть файл / proc для процесса, файлы ядра или использование отладчика.