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


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.