Top.Mail.Ru

Как работает команда chmod и права доступа в Linux

Как работает команда chmod и права доступа в Linux

В мире Linux, где системой часто пользуются сразу несколько человек (или сервисов), безопасность строится на четком разграничении: кто и что может делать с файлами. Если вы администрируете сервер или просто работаете в терминале, команда chmod — это ваш главный инструмент для настройки этих границ. Давайте разберемся, как устроена система прав и как грамотно ими управлять, не заучивая сухие таблицы.

Пару слов о логике прав доступа

Прежде чем вводить команды, нужно понять логику системы. В Linux у любого файла или папки есть три категории пользователей, для которых настраивается доступ:

  1. Владелец (User/Owner) — тот, кто создал файл (или тот, на кого его переписали). Обычно у него самые широкие полномочия.
  2. Группа (Group) — команда пользователей, объединенных общими задачами.
  3. Остальные (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 осмысленно: давайте права на запись и выполнение только тем, кому это действительно необходимо.