Як використовувати команду chmod в Linux

Керуйте доступом до файлів, пошукових каталогів та запуском скриптів у Linux за допомогою команди `chmod`. Ця команда змінює права доступу до файлів Linux. На перший погляд це може здаватися складним, але насправді все досить просто, якщо розуміти її принцип дії.

`chmod`: Коригування прав доступу до файлів

В Linux, права доступу до файлу чи каталогу визначаються наборами дозволів. Існує три таких набори: один для власника файлу, другий – для членів групи файлу, а третій – для всіх інших користувачів системи.

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

Команда `chmod` використовується для встановлення цих дозволів. Для того, щоб побачити, які дозволи встановлені для файлу або каталогу, використовується команда `ls`.

Аналіз та інтерпретація дозволів файлів

Для відображення прав доступу до файлів та каталогів командою `ls` використовується параметр `-l` (довгий формат).

ls -l

У кожному рядку перший символ вказує на тип запису. Тире (-) означає файл, а літера `d` – каталог.

Наступні дев’ять символів описують налаштування для трьох наборів дозволів.

Перші три символи показують дозволи для користувача, який є власником файлу (дозволи користувача). Середні три символи вказують на дозволи для членів групи файлу (групові дозволи). Останні три символи – це дозволи для всіх інших, хто не належить до перших двох категорій (інші дозволи).

У кожному наборі є три символи, що є індикаторами наявності або відсутності відповідного дозволу. Це може бути або тире (-), або літера. Тире (-) вказує на те, що дозвіл не надано, а літери `r`, `w` або `x` означають надання дозволу.

Значення літер:

  • `r`: Дозвіл на читання. Файл можна відкрити та переглянути його вміст.
  • `w`: Дозвіл на запис. Файл можна редагувати, змінювати та видаляти.
  • `x`: Дозвіл на виконання. Якщо файл є скриптом або програмою, його можна запустити.

Приклад:

  • `—` означає відсутність будь-яких дозволів.
  • `rwx` означає повні дозволи. Присутні всі індикатори: читання, запису та виконання.

На зображенні, перший рядок починається з `d`, що означає каталог з назвою “архів”. Власником каталогу є “dave”, і група, до якої він належить, також має назву “dave”.

Наступні три символи – права користувача для каталогу. Вони показують, що власник має повні дозволи (`rwx`). Це означає, що користувач “dave” має права читання, запису та виконання для цього каталогу.

Другий набір із трьох символів – дозволи групи, що є `rx`. Це означає, що члени групи “dave” мають права читання та виконання для каталогу. Вони можуть переглядати файли та їх вміст в каталозі, а також переходити (виконувати `cd`) в цей каталог. Але вони не мають дозволу на запис, тому не можуть створювати, змінювати або видаляти файли.

Останній набір символів також є `rx`. Ці дозволи застосовуються до користувачів, що не підпадають під перші два набори дозволів (так звані “інші”). Вони мають права на читання та виконання каталогу.

Отже, учасники групи та інші мають права на читання та виконання, а власник, користувач “dave”, має також права на запис.

Для всіх інших файлів (крім скрипту `mh.sh`), “dave” та члени групи “dave” мають права читання та запису, а інші – лише права читання.

У випадку скрипту `mh.sh`, власник та учасники групи мають дозволи на читання, запис і виконання, а інші – лише на читання та виконання.

Синтаксис дозволів: Пояснення

Щоб використовувати `chmod` для встановлення дозволів, потрібно вказати:

  • Хто: Для кого встановлюються дозволи.
  • Що: Які зміни вносяться? Чи додається дозвіл, чи видаляється?
  • Який: Який саме дозвіл встановлюється?

Для представлення цих значень використовуються індикатори, що формують короткі “оператори дозволів”, наприклад, `u+x`, де `u` означає “користувач” (хто), `+` означає “додати” (що), а `x` – дозвіл на виконання (який).

Значення “хто”, що можуть використовуватись:

  • `u`: Користувач, тобто власник файлу.
  • `g`: Група, тобто члени групи, до якої належить файл.
  • `o`: Інші, тобто користувачі, що не підпадають під дозволи `u` та `g`.
  • `a`: Всі, тобто усі вищезазначені.

Якщо жоден з них не використовується, `chmod` працює так, ніби було вказано `a`.

Значення “що”:

  • `-`: Мінус. Знімає дозвіл.
  • `+`: Плюс. Надає дозвіл. Дозвіл додається до існуючих. Якщо потрібно встановити лише цей дозвіл, слід використовувати параметр `=`, описаний нижче.
  • `=`: Знак рівності. Встановлює дозвіл, видаляючи всі інші.

Значення “який”:

  • `r`: Дозвіл на читання.
  • `w`: Дозвіл на запис.
  • `x`: Дозвіл на виконання.

Налаштування та зміна дозволів: Приклади

Припустимо, що є файл, до якого всі мають повний доступ:

ls -l new_file.txt

Потрібно, щоб користувач “dave” мав дозволи на читання та запис, а група та інші – лише на читання. Це можна зробити за допомогою команди:

chmod u=rw,og=r new_file.txt

Використання оператора `=` означає, що спочатку видаляються усі існуючі дозволи, а потім встановлюються зазначені.

Перевірка нових дозволів на файл:

ls -l new_file.txt

Існуючі дозволи видалено, а нові встановлено відповідно до очікувань.

А як щодо додавання дозволу без видалення існуючих налаштувань? Це також просто зробити.

Припустимо, є файл-скрипт, редагування якого завершено. Необхідно зробити його виконуваним для всіх користувачів. Поточні дозволи виглядають так:

ls -l new_script.sh

Можна додати дозвіл на виконання для всіх за допомогою команди:

chmod a+x new_script.sh

Перевіривши дозволи, можна побачити, що дозвіл на виконання надано всім, а існуючі дозволи залишилися незмінними.

ls -l new_script.sh

Цього ж результату можна досягти без `a` в операторі `a+x`. Наступна команда працюватиме так само:

chmod +x new_script.sh

Налаштування дозволів для декількох файлів

Можливо застосувати дозволи до кількох файлів одночасно.

Ось файли в поточному каталозі:

ls -l

Нехай потрібно видалити дозволи на запис для “інших” користувачів для файлів з розширенням `.page`. Це можна зробити за допомогою команди:

chmod o-r *.page

Перевірка результату:

ls -l

Як видно, дозвіл на читання видалено для файлів `.page` з категорії “інші”. Інші файли не зазнали змін.

Для застосування до файлів у підкаталогах, використовуйте параметр `-R` (рекурсивний):

chmod -R o-r *.page

Числове скорочення для дозволів

Інший спосіб використання `chmod` полягає у представленні дозволів для власника, групи та інших у вигляді тризначного числа. Ліва цифра відповідає дозволам власника, середня – дозволам для членів групи, а права – дозволам для інших.

Цифри та їх значення:

0: (000) Немає дозволу.
1: (001) Дозвіл на виконання.
2: (010) Дозвіл на запис.
3: (011) Дозволи на запис та виконання.
4: (100) Дозвіл на читання.
5: (101) Дозволи на читання та виконання.
6: (110) Дозволи на читання та запис.
7: (111) Дозволи на читання, запис та виконання.

Кожен дозвіл представлений бітом у двійковому еквіваленті десяткового числа. Наприклад, 5 (101) означає читання та виконання, а 2 (010) – дозвіл на запис.

За допомогою цього методу встановлюються бажані дозволи. Наприклад, якщо вже є дозволи на читання та запис, для додавання дозволу на виконання слід використовувати 7 (111). Використання 1 (001) призведе до видалення дозволів на читання та запис, додавши лише дозвіл на виконання.

Нехай потрібно знову додати дозвіл на читання до файлів `.page` для “інших” користувачів. Необхідно також встановити дозволи користувача та групи, зберігаючи їхні попередні значення. Вони вже мають права читання та запису (6 = 110). Для “інших” потрібно встановити значення 4 (100), щоб надати їм право на читання.

Це досягається командою:

chmod 664 *.page

Це встановлює необхідні дозволи для користувача, членів групи та інших. Дозволи для користувачів та груп повертаються до попередніх значень, а для інших відновлюється дозвіл на читання.

ls -l

Розширені опції

Звернувшись до man-сторінки для `chmod`, можна знайти розширені параметри, пов’язані з бітами SETUID і SETGID, а також з обмеженим видаленням або “липким” бітом.

У 99% випадків достатньо наведених варіантів використання `chmod`.