Если у файла есть разрешения -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 для процесса, файлы ядра или использование отладчика.