Калькулятор chmod – права доступу до файлів у Linux
Перетворюйте права доступу до файлів у Linux між інтерактивною сіткою прапорців, вісімковим кодом (наприклад, 755) і символьним записом (наприклад, rwxr-xr-x). Отримайте готові до копіювання команди chmod, попередній перегляд ls -l і нотатки щодо безпеки для звичайних файлів і каталогів.
Перетворення прав доступу Linux між прапорцями, вісімковим і символьним записом
Формула chmod
Де:
- \(r\), \(w\), \(x\) — біти читання, запису й виконання; кожен дорівнює 1, якщо право надано, і 0, якщо ні;
- \(d\) — вісімкова цифра одного класу (власник, група або інші), складена за вагами 4–2–1;
- \(s_{\text{uid}}\), \(s_{\text{gid}}\), \(s_{\text{sticky}}\) — спеціальні біти setuid, setgid і sticky (також 0 або 1).
Кожен клас прав отримує одну вісімкову цифру, бо читання рахується як 4, запис — як 2, виконання — як 1; додавання наданих значень дає число від 0 до 7. Необов'язкова перша цифра кодує спеціальні біти тими самими вагами 4–2–1, тому 4755 означає setuid плюс уже звичні 755.
Chmod — приклад обчислення
Приклад: скрипт, який власник може вільно редагувати й запускати, а група та всі інші — лише читати й запускати, — класичні права 755 (це також стандартна сітка в калькуляторі: власник r+w+x, група r+x, інші r+x).
\[ d_{\text{власник}} = 4 + 2 + 1 = 7 \]
\[ d_{\text{група}} = 4 + 0 + 1 = 5 \]
\[ d_{\text{інші}} = 4 + 0 + 1 = 5 \]
\[ \text{режим} = 755 \]
Результат: вісімковий режим 755, символьний режим rwxr-xr-x, команда chmod 755 file. У списку ls -l файл виглядатиме як -rwxr-xr-x.
Як користуватися калькулятором
- Розкрийте список Спосіб введення й оберіть, як описати права: Прапорці (сітка прав), Вісімковий код, Символьний запис або Типові набори. Видимими залишаються лише поля, що стосуються обраного способу.
- У режимі Прапорці відмітьте Читання, Запис і Виконання для кожного класу — Власник (u), Група (g) та Інші (o) — а за потреби також спеціальні біти Setuid, Setgid і Sticky.
- У режимі Вісімковий код введіть три цифри (наприклад, 755) або чотири — зі спеціальною цифрою на початку (наприклад, 4755). У режимі Символьний запис укажіть дев'ять символів, як-от rwxr-xr-x, або вставте повний рядок виводу
ls -l, як-от-rwxr-xr-x— початковий символ типу буде відкинуто автоматично. У режимі Типові набори просто оберіть готовий набір прав. - Установіть Тип файла — Звичайний файл (-) або Каталог (d), щоб пояснення й попередній перегляд
ls -lвживали відповідні формулювання. - Ознайомтеся з результатами: числовий (вісімковий) режим, символьний режим, готові до копіювання команди chmod, попередній перегляд у стилі ls -l, пояснення простою мовою та нотатки щодо безпеки.
Що таке права доступу до файлів у Linux і як їх читати
Кожен файл і каталог у системі Linux має дев'ять бітів прав, розподілених на три класи: власник (u), який створив файл; група (g), до якої належить файл; та інші (o) — усі решта на машині. У межах кожного класу три біти визначають, чи може цей клас читати (r), змінювати (w) і виконувати (x) файл. Саме ці біти змінює команда chmod, а калькулятор переводить будь-яке їх подання в усі інші.
Вісімковий запис пакує кожен клас в одну цифру за вагами 4–2–1 — саме тому ви бачите режими на кшталт 644 або 755. Символьний запис описує ті самі біти дев'ятьма символами, які читаються зліва направо: тріада власника, тріада групи, тріада інших. Риска означає відсутність права, тож rw-r--r-- — це той самий 644 без права виконання. Обидві форми описують одні й ті самі біти — обирайте ту, яку приймає інструмент перед вами.
Значення бітів залежить від типу файла. Для звичайного файла r означає перегляд вмісту, w — його зміну, x — запуск як програми. Для каталогу r — перегляд назв усередині, w — створення, перейменування й видалення записів усередині, а x — вхід до нього командою cd і відкривання файлів у ньому. Саме тому каталог потребує біта x, щоб його вмістом можна було користуватися, і тому 700 — стандартний режим для приватних каталогів на кшталт ~/.ssh.
Картину доповнюють три спеціальні біти. Setuid (4) змушує виконуваний файл запускатися з правами його власника — саме цей механізм стоїть за /usr/bin/passwd. Setgid (2) робить те саме для групи, а на каталогах змушує нові файли успадковувати групу каталогу. Sticky (1) обмежує видалення у спільному catalogu з правом запису: користувачі можуть видаляти лише власні файли — саме це правило робить /tmp (1777) безпечним. У символьному виводі вони позначаються як s/S на місці біта виконання або t/T в останній позиції; велика літера означає, що біт виконання під нею вимкнено.
Типові режими доступу
| Режим | Символьний запис | Типове застосування |
|---|---|---|
| 600 | rw------- | Приватні файли, як-от SSH-ключі |
| 644 | rw-r--r-- | Звичайні файли, веб-контент |
| 700 | rwx------ | Приватні каталоги, як-от ~/.ssh |
| 755 | rwxr-xr-x | Програми, скрипти, файли, що їх роздає веб-сервер |
| 775 | rwxrwxr-x | Спільні каталоги для довіреної групи |
| 1777 | rwxrwxrwt | Спільний тимчасовий простір, як-от /tmp |
| 4755 | rwsr-xr-x | Виконувані файли setuid root (використовувати обережно) |
Припущення, обмеження й практичні поради
- 777 — майже ніколи не відповідь. Надання файлу права запису для всіх відкриває його кожному обліковому запису в системі. Надавайте перевагу 775 зі правильно підібраною групою або ACL (
setfacl), перш ніж сягати по 777. - Ніколи не поєднуйте запис для всіх із setuid або setgid. Режими на кшталт 4777 чи 7777 дозволяють будь-кому замінити файл, який водночас виконується з підвищеними правами, — класична лазівка для підвищення привілеїв.
- «Інші» не можуть мати більше прав, ніж власник. Якщо третя цифра перевищує першу, ви майже напевно помилилися, вводячи режим; нотатки безпеки попередять про це.
- 000 блокує всіх, включно з власником. Доступ зможе відновити лише root, тож для приватності використовуйте натомість 600 або 700.
- Будьте обережні з
chmod -R. Рекурсивний числовий режим одним махом перезаписує всі біти кожного файла і підкаталогу; каталогам зазвичай потрібен x, а файлам даних — ні. Застосовуйте режини окремо для кожного типу файлів, а не до цілого дерева одразу. - root ігнорує біти прав. Права обмежують звичайних користувачів, але від доступу рівня root вони не захищають.
- Калькулятор зіставляє між собою відомі подання прав, включно зі спеціальними бітами, проте не враховує ACL, SELinux та інші системи обов'язкового контролю доступу, які також можуть впливати на доступ у реальності.
Якщо ви працюєте з іншими кодуваннями з боку Linux, для розуміння базових систем числення можуть стати в пригоді конвертер міток часу Unix, шістнадцятковий конвертер і двійковий калькулятор.
Часті запитання
Як рекурсивно задати різні права для файлів і каталогів?
Скористайтеся find, щоб застосувати окремий режим до кожного типу: find /path -type d -exec chmod 755 {} + для каталогів і find /path -type f -exec chmod 644 {} + для файлів. Звичайний chmod -R 755 дає файлам даних непотрібний біт виконання, а -R 644 забирає x у каталогів, роблячи їх недоступними для входу. Розділення за типом уникає обох помилок.
Як побачити поточні права файла у вісімковому вигляді?
Виконайте stat -c '%a' filename (або stat -f '%Lp' filename на macOS) — і ви одразу отримаєте режим цифрами, як-от 644. Детальний список ls -l показує лише символьну форму, яку доводиться розшифровувати самостійно. Такий вісімковий вивід — саме те, чого очікує поле «Вісімковий код» калькулятора: вставте його та перегляньте, що робить кожен біт.
Чому після chmod досі з'являється «Permission denied»?
Перевірте три речі: щоб дістанутися файла, усі каталоги на шляху мають надавати вам право x (виконання) — каталог 644 блокує все, що всередині, навіть якщо файл має 777. Крім того, виконати chmod для чужого файла не можна, і нарешті правила рівня файлової системи можуть мати перевагу над бітами: параметри монтування на кшталт noexec, ACL, SELinux або AppArmor здатні заборонити доступ незалежно від режиму.
Що означає chmod a+r і чим воно відрізняється від o+r?
a означає «all» («усі») — зміна одночасно застосовується до власника (u), групи (g) та інших (o), тож a+r надає право читання всім. o+r стосується лише класу «інші». У вісімковій формі такого скорочення немає: числовий режим завжди перезаписує всі дев'ять бітів, тому класи, які мають зберегти наявні біти, зручніше коригувати символьними + і −, а не повною числовою заміною.
Чому мої нові файли отримують 664 замість 755? Що таке umask?
umask — це параметр shell'а, який «зрізає» бити з режиму, запитаного програмою під час створення файла. За поширеного umask 002 програма, що просить 666 (rw-rw-rw-), отримує 664, а запит 777 для каталогу дає 775. Перевірте своє значення командою umask і змініть його, наприклад, umask 022. chmod у момент створення файла участі не бере — ця команда лише переписує біти після.
Чому setuid не працює для мого shell-скрипта?
Більшість систем Linux навмисно ігнорують біт setuid на скриптах інтерпретованих мов (shell, Python тощо): фактично виконується інтерпретер, а не скрипт, а інтерпретер працює від імені того, хто його запустив. Біт setuid діє майже лише на скомпільованих бінарних файлах, як-от /usr/bin/passwd. Якщо зі скрипта потрібні дії з підвищеними правами, налаштуйте правила sudo, а не сподівайтеся, що chmod 4755 на скрипті допоможе.