Яка мета дозволів 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.)