Какова цель разрешений 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? Или ограничение разрешений для исполняемого файла также ограничивает разрешения на чтение соответствующих разделов в памяти во время выполнения? (Последнее кажется маловероятным, ИМО.)