Перейти до вмісту
Обране

Калькулятор chmod – права доступу до файлів у Linux

Оновлено:

Перетворюйте права доступу до файлів у Linux між інтерактивною сіткою прапорців, вісімковим кодом (наприклад, 755) і символьним записом (наприклад, rwxr-xr-x). Отримайте готові до копіювання команди chmod, попередній перегляд ls -l і нотатки щодо безпеки для звичайних файлів і каталогів.

Перетворення прав доступу Linux між прапорцями, вісімковим і символьним записом

Поля введення
Власник (u)
Група (g)
Інші (o — усі решта)
Спеціальні біти
Якщо увімкнено, результат оновлюватиметься автоматично після зміни будь-якого значення.

Формула chmod

Формула
\[ d = 4 \cdot r + 2 \cdot w + 1 \cdot x \] \[ \text{режим} = (4 \cdot s_{\text{uid}} + 2 \cdot s_{\text{gid}} + 1 \cdot s_{\text{sticky}})\,(d_{\text{власник}})(d_{\text{група}})(d_{\text{інші}}) \]

Де:

  • \(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.

Як користуватися калькулятором

  1. Розкрийте список Спосіб введення й оберіть, як описати права: Прапорці (сітка прав), Вісімковий код, Символьний запис або Типові набори. Видимими залишаються лише поля, що стосуються обраного способу.
  2. У режимі Прапорці відмітьте Читання, Запис і Виконання для кожного класу — Власник (u), Група (g) та Інші (o) — а за потреби також спеціальні біти Setuid, Setgid і Sticky.
  3. У режимі Вісімковий код введіть три цифри (наприклад, 755) або чотири — зі спеціальною цифрою на початку (наприклад, 4755). У режимі Символьний запис укажіть дев'ять символів, як-от rwxr-xr-x, або вставте повний рядок виводу ls -l, як-от -rwxr-xr-x — початковий символ типу буде відкинуто автоматично. У режимі Типові набори просто оберіть готовий набір прав.
  4. Установіть Тип файла — Звичайний файл (-) або Каталог (d), щоб пояснення й попередній перегляд ls -l вживали відповідні формулювання.
  5. Ознайомтеся з результатами: числовий (вісімковий) режим, символьний режим, готові до копіювання команди 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 на скрипті допоможе.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *