Що є дійсним випадком використання дозволу на файл "виконувати тільки"?


20

Я читав про chmod та його восьмеричні режими . Я бачив, що 1виконується тільки. Що є дійсним випадком використання лише дозволу на виконання? Для виконання файлу, як правило, хочеться прочитати та виконати дозвіл.

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo

Відповіді:


41

Сценарії оболонки вимагають виконання дозволу на читання, але двійкові файли не:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

Відображення вмісту файлу та їх виконання - це дві різні речі. З скриптами оболонки ці речі пов'язані, тому що вони "виконуються" шляхом "читання" їх у новій оболонці (чи поточній), якщо ви простите спрощення. Ось чому вам потрібно вміти їх читати. Бінарні файли не використовують цей механізм.

Для каталогів дозвіл на виконання трохи відрізняється; це означає, що ви можете робити файли у цьому каталозі (наприклад, читати або виконувати їх). Тож скажімо, у вас є набір інструментів, /toolsякими ви хочете, щоб люди мали змогу користуватися, але тільки якщо вони про них знають. chmod 711 /tools. Тоді виконувані речі в програмі /toolsможуть бути запущені явно (наприклад /tools/mytool), але ls /tools/буде відмовлено. Так само можуть зберігатися документи, в /private-docsяких можна було прочитати, якщо і лише тоді, коли відомі назви файлів.


1
Між іншим, немає сенсу встановлювати лише для виконання на системних бінарних файлах, якщо ви не запустите анонімний ftp.
Джошуа

1
Крім того, встановлення виконуваного біта в каталозі дозволяє вам cdце зробити.
садок

1
Сценарій також може бути виконаний без дозволу читання
phuclv

1
До речі, Там немає необхідності включати заголовок C stdio.hтут. Я пропоную її зняти.
Spikatrix

1
@Kevin: Можливо, через те, що відсутність роботи lsта завершення роботи вкладок робить роботи з технічного обслуговування дратівливими, і це забезпечує мало, якщо якась реальна користь для безпеки. Більшість файлів, які можуть зацікавити зловмисника, так чи інакше знаходяться у відомих стандартних місцях, або їх місцезнаходження можна виявити опосередковано з даних інших файлів (інакше як програми, які легально використовують ці файли, знають, де їх знайти?).
Ільмарі Каронен

4

У Gentoo виконуваним програмам, які налаштовані (встановлені для запуску з дозволами власника замість їх власника), заборонено в доступі до читання (режим 4711). Це полягає в тому, щоб додати шар захисту від експлуатації помилок, щоб сприяти ескалації привілеїв.

Якщо непривілейований зловмисник може прочитати встановлений файл і знає про помилку, яка дозволяє атаку в стилі libc , вони можуть використовувати вміст файлу, щоб передбачити, де певні корисні функції або бібліотеки можуть бути поміщається в пам'яті, коли програма викликається.

Сучасні системи часто включають додаткові засоби захисту, які є більш ефективними, такі як ASLR , але обмеження, наявні в 32-бітних платформах, можуть зробити їх легшими в експлуатації.


Зауважте, що захист застосовується лише до джерел на основі джерел. З дистрибутивами на основі двійкових даних зловмисник може просто переглянути власну копію програми, щоб зрозуміти, де цікаві речі.
Марк

Бінарний файл, який виконується лише для виконання, також може мати вбудовані паролі. Користувач може запустити програму, і він може надіслати пароль на сервер, але користувач не зможе отримати пароль від нього (система також не повинна дозволяти їм робити базові дампи).
Бармар

1

Схоже, що значення "виконувати тільки" не має великого користі для файлу, але воно може бути використане для запобігання прочитанню вмісту каталогу.

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied

1
Варто зазначити, що причина цього корисна в тому, що ви все ще можете читати foo / bar, якщо знаєте ім'я файлу. Я використовував це на веб-серверах.
Випадково832

0

Для виконання сценарію потрібно прочитати та виконати дозволи. Читання вмісту скрипту - це те, що дозволяє йому виконувати, тому вам потрібно вміти read and execute. В іншому випадку ви не можете запустити сценарій без нього.

Що є дійсним випадком використання лише дозволу на виконання?

Безпека. Деякі можуть захотіти захистити свої файли та зупинити інші від їх виконання чи використання.


2
chmod 000Дозволу не буде розглядати ніхто, крім root. Іноді не потрібно йти настільки просто для захисту - це залежить від намірів користувача. Для того, щоб, скажімо, "re-chmod" повернути файл до читабельних та записаних дозволів, через які вам доведеться це зробити root. Якщо ви не можете отримати доступ root, це виявиться важким.
Джордан Савелл

2
Скажімо, у вас є набір інструментів, /toolsякими ви хочете, щоб люди могли ними користуватися, але тільки якщо вони про них знають. chmod 711 /tools. Тоді виконувані речі в програмі /tools можуть бути запущені явно, але ls /tools/буде відмовлено.
DopeGhoti

1
Гарна відповідь! Навчила мене і чогось там. Чому бінарні файли не потребують дозволу на читання?
Джордан Савелл

2
Оскільки показ вмісту файлу та їх виконання - це дві різні речі. Сценарії оболонки "виконуються", "читаючи" їх у новій оболонці (якщо ви простите спрощення), тому вам потрібно мати можливість їх читати. Бінарні файли не використовують цей механізм.
DopeGhoti

1
Ах здоровий глузд. Я думав, що це щось інше - дякую!
Джордан Савелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.