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

9

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

Том
источник
Нет стандартного способа, которым я могу сказать.
Тим

Ответы:

18

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

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

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

Конечно, выполнение требует чтения, но оно читается ядром, а не пользователем. Возможно, вы сможете получить некоторую информацию о содержимом исполняемого файла, изучив память процесса во время его выполнения, но я сомневаюсь, что вы могли бы восстановить двоичный исполняемый файл. И если исполняемый файл имеет setuid, вы не можете проверить память процесса (если у вас нет доступа к учетной записи, под которой он выполняется).

Между прочим, -rwx-wx-wxэто очень странный набор разрешений; он защищает файл от прочтения кем-либо, кроме владельца, но позволяет любому изменять его. Я не могу вспомнить случай, когда это имело бы смысл.

Кит Томпсон
источник
Просто абстрактный случайный вопрос: будут ли инструменты профилирования / отладки работать на execs с только исполняемыми разрешениями?
Сайрам
@Sairam: Эксперимент говорит нет: chmod 111 hello ; gdb ./helloговорит ./hello: Permission denied.; rговоритNo executable file specified.
Кит Томпсон
Для неисполняемого файла что-то вроде -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
CJC
источник
4
Для запуска сценария оболочки требуется доступ как READ, так и EXECUTE. Тем не менее, скомпилированный двоичный файл не делает. Таким образом, скомпилированный двоичный файл с указанными выше правами доступа может быть выполнен кем угодно!
mdpc
1
Я предполагаю, что это поднимает вопрос о том, что пытается выполнить OP, то есть, почему скомпилированный двоичный файл будет доступен для записи? Набор разрешений (733) на самом деле занял у меня минуту, чтобы выяснить это, поскольку он настолько нестандартен.
CJC
2

Простой ответ - нет : только execсистемный вызов может читать файл, не требуя доступа для чтения (хотя он и требует выполнения ). openС O_RDONLYили O_RDWRослабеет.

yrk
источник
1

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

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

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

Якорь,
источник
это верно только если chmod| chownбыло выполнено
Уоррен