Яка мета дозволів Linux, таких як 111 або 333 (тобто користувач може виконувати , але не може прочитати файл), якщо можливість виконання автоматично не передбачає можливість читання?
Яка мета дозволів Linux, таких як 111 або 333 (тобто користувач може виконувати , але не може прочитати файл), якщо можливість виконання автоматично не передбачає можливість читання?
Відповіді:
Я грав із цим і, мабуть, дозволи на виконання файлів не передбачають дозволу на читання. Бінарні файли можна виконувати, не читаючи:
$ 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
дозвіл - якщо тільки розглянутий файл не є сценарієм (наприклад, скрипт оболонки ( .sh
), perl-script ( .pl
) тощо). Звичайні бінарні файли можуть виконуватися лише з execute
дозволу. У * BSD-systmes кілька виконуваних файлів дає execute
дозвіл без read
дозволу, особливо на команди, важливі для безпеки - наприклад su
.
То чому б не дати користувачам read
-дозволу (і просто execute
-пермізону)? Тому що файл, який не може прочитати користувач, не може бути скопійований і цим користувачем! Видаляючи read
дозвіл, перешкоджає користувачам робити власні "особисті" копії виконуваних файлів - які вони згодом можуть зловживати (наприклад, отримати SUID=root on
).
І не має write
дозволу, запобігає прискореному видаленню файлу.
Зауважте, що не надавати власника ні read
-nor- write
дозволу є дещо рідкісним, але іноді це може бути хорошою ідеєю, щоб навіть owner
не просто видалити файл. Звичайно, що owner
- не кажучи вже root
- завжди можна обійти такі заходи, якщо не іншими способами, то просто за chmod
дозволом на файл.
owner
видаленню файлу." - за винятком того, що вам не потрібен якийсь дозвіл на файл (читання, запис або виконання) для його видалення.
/proc/${PID}/maps
і потім читаючи відповідні розділи пам’яті /proc/${PID}/mem
? Або обмеження дозволів на файл виконуваного файлу також обмежує дозволи на читання відповідних розділів у пам'яті під час виконання? (Останнє здається малоймовірним, IMO.)