Как работает команда chmod и права доступа в Linux
В мире Linux, где системой часто пользуются сразу несколько человек (или сервисов), безопасность строится на четком разграничении: кто и что может делать с файлами. Если вы администрируете сервер или просто работаете в терминале, команда chmod — это ваш главный инструмент для настройки этих границ. Давайте разберемся, как устроена система прав и как грамотно ими управлять, не заучивая сухие таблицы.
Пару слов о логике прав доступа
Прежде чем вводить команды, нужно понять логику системы. В Linux у любого файла или папки есть три категории пользователей, для которых настраивается доступ:
- Владелец (User/Owner) — тот, кто создал файл (или тот, на кого его переписали). Обычно у него самые широкие полномочия.
- Группа (Group) — команда пользователей, объединенных общими задачами.
- Остальные (Others) — вообще все остальные пользователи системы, не попавшие в первые две категории.
Для каждой из этих категорий можно разрешить или запретить три действия:
- Чтение (Read, r) — можно открыть файл и посмотреть содержимое.
- Запись (Write, w) — можно редактировать или удалять файл.
- Выполнение (Execute, x) — превращает файл в программу или скрипт, который можно запустить.
Важный нюанс: если для файла «выполнение» означает запуск, то для директории право x означает возможность в неё зайти (сделать cd). Без этого права вы даже не сможете посмотреть список файлов внутри, даже если у вас есть право на чтение.
Как узнать текущие права?
Прежде чем что-то менять, стоит посмотреть, как дела обстоят сейчас. Проще всего использовать команду ls -l. Она покажет детальный список файлов, где нас интересует первая колонка. Сперва может показаться, что надписи вида -rwxr-xr— расшифровать невозможно, но на деле все просто. Важно разбить строку на отдельные блоки:
- Первый символ говорит о типе файла (дефис — это обычный файл, d — директория).
- Следующие три знака — права владельца.
- Затем три знака — права группы.
- Последние три — права всех остальных.
Если вы видите прочерк —, значит, право отсутствует. Например, запись drwxr-xr-x говорит нам, что это папка, владелец может с ней делать всё что угодно, а группа и остальные только просматривать содержимое и заходить внутрь, но не удалять и не создавать там новые файлы.
Для более детального аудита существует команда getfacl <имя_файла>, которая разложит всё по полочкам в удобном текстовом виде.
Основы использования chmod
Синтаксис команды очень простой: chmod (от change mode), затем правила, которые мы хотим применить, и, наконец, целевой файл.
Изменять права можно двумя способами: понятным символьным и быстрым числовым.
Способ 1: Символьный
Здесь мы оперируем буквами. Вы указываете, кому (u — владельцу, g — группе, o — остальным, a — всем сразу) вы хотите что сделать (+ добавить, — отобрать, = присвоить конкретно) и какое право (r, w, x).
Рассмотрим пару примеров из жизни:
- chmod u+x script.sh — мы говорим: «Для владельца (u) добавить (+) право на запуск (x)». Теперь скрипт заработает.
- chmod go-w report.txt — «У группы и остальных отобрать право записи». Чтобы никто случайно не удалил важный отчет.
- chmod a=r public_doc.txt — «Всем установить только чтение».
Способ 2: Числовой
Обычно этим методом пользуются администраторы или просто более опытные пользователи Linux. Каждому праву присвоено числовое значение:
- 4 — чтение (Read).
- 2 — запись (Write).
- 1 — выполнение (Execute).
- 0 — отсутствие прав.
Вы просто суммируете числа для нужной комбинации.
Хотите полный доступ (чтение + запись + выполнение)? Складываем 4+2+1 и получаем 7.
Нужно только чтение и выполнение? 4+1 = 5.
Только чтение? Просто 4.
Эти цифры пишутся подряд для владельца, группы и остальных.
- chmod 755 file — стандартная настройка для скриптов и программ. Владелец делает всё (7), остальные только читают и запускают (5 и 5).
- chmod 600 private.key — очень строгая настройка. Владелец читает и пишет (6), а у группы и остальных полный ноль (00). Доступ закрыт.
Полезные опции и массовая обработка
Иногда нужно поменять права не на один файл, а на целую папку со всем её содержимым. Здесь в игру вступает ключ -R (рекурсивно).
Команда chmod -R 755 /var/www/html пройдет по всем вложенным папкам и файлам, применив новые правила.
Будьте с этим осторожны: случайно изменив права системных папок, можно сломать работу ОС.
Если вы хотите видеть, что именно делает команда, добавьте ключ -v (verbose). Система отчитается о каждом измененном файле. А если, наоборот, нужно подавить ошибки, используйте -f (quiet).
Полезный лайфхак для работы: если у вас есть файл с идеально настроенными правами и вы хотите применить такие же к другому файлу, не обязательно высчитывать цифры. Используйте ключ —reference:
chmod --reference=file1 file2
Эта команда просто скопирует настройки доступа с первого файла на второй.
Подводя итог
Управление правами в Linux — базовый инструмент защиты данных. Используйте chmod осмысленно: давайте права на запись и выполнение только тем, кому это действительно необходимо.