Какова цель разрешений Linux, таких как 111 или 333 (т. Е. Пользователь может выполнить , но не может прочитать файл), если возможность выполнения не подразумевает автоматическое чтение?
Какова цель разрешений Linux, таких как 111 или 333 (т. Е. Пользователь может выполнить , но не может прочитать файл), если возможность выполнения не подразумевает автоматическое чтение?
Ответы:
Я играл с ним и, видимо, разрешения exec не подразумевают разрешения на чтение. Двоичные файлы могут быть исполняемыми без возможности чтения:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
Я не могу выполнить сценарии, если только они не имеют биты разрешения на чтение и разрешение на выполнение:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
, а затем bash пытается открыть hw.sh
для чтения (и не удается).
это имеет смысл для каталогов, например, если вы храните (секретные) исполняемые файлы в определенном каталоге, а затем разрешаете пользователям вызывать эти файлы, не имея возможности видеть содержимое каталога (но зная, что после того, как вы проинформировали их, существует определенный файл!). 333 по сравнению со 111 позволяет записывать / удалять файлы в / из этих каталогов, не имея возможности видеть содержимое каталога.
Очевидно, что не все комбинации являются такими полезными, но если взять ту, которую вы упомянули специально ... На самом деле вам не нужно read
разрешение на выполнение файла - только execute
разрешение - если рассматриваемый файл не является скриптом (например, shell-скрипт ( .sh
), perl-script ( .pl
) и т. д.). Обычные двоичные файлы могут быть выполнены только с execute
разрешения. На * BSD-systmes несколько исполняемых файлов дают execute
разрешение без разрешения read
, особенно на «важные для безопасности» команды - например su
.
Так почему бы не дать пользователям read
разрешение (и просто execute
разрешение)? Потому что файл, который не может быть прочитан пользователем, также не может быть скопирован этим пользователем! Удаление read
разрешения запрещает пользователям создавать свои собственные «личные» копии исполняемых файлов, которые они впоследствии могут использовать (например, получить SUID=root on
).
И, не имея write
-permission, предотвращает случайное удаление файла.
Имейте в виду, что не давать ни read
-нор- write
разрешения владельцу немного необычно, но иногда может быть хорошей идеей, чтобы даже owner
не удалить файл. Конечно, owner
не говоря уже о том, что root
такие меры всегда можно обойти, если не другими способами, то просто с chmod
разрешения файла.
owner
удаление файла». - за исключением того, что вам не нужно никакого разрешения на файл (чтение, запись или выполнение) для его удаления.
/proc/${PID}/maps
и затем считывая соответствующие разделы памяти /proc/${PID}/mem
? Или ограничение разрешений для исполняемого файла также ограничивает разрешения на чтение соответствующих разделов в памяти во время выполнения? (Последнее кажется маловероятным, ИМО.)