CHMOD: Магия цифр и букв. Полный гид по управлению правами доступа к файлам в Linux

CHMOD: Магия цифр и букв. Полный гид по управлению правами доступа к файлам в Linux

В мире Linux и Unix-подобных систем каждый файл и папка обладают невидимым, но мощным щитом — правами доступа. Команда chmod (change mode) — это ваш волшебный ключ к этому щиту. Понимание и грамотное использование chmod — фундаментальный навык, отделяющий новичка от уверенного пользователя, системного администратора или разработчика. Это не просто техническая команда, а философия безопасности и организации.

Что такое права доступа и зачем они нужны?

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

Права назначаются трём категориям пользователей: u (user/владелец), g (group/группа), o (others/все остальные). А также a (all/все категории).

Три кита прав: read, write, execute

Каждой категории (u, g, o) назначаются три базовых права:

  • r (read — чтение, 4): Для файла — возможность просмотреть содержимое. Для директории — возможность прочитать список файлов в ней (например, командой ls).
  • w (write — запись, 2): Для файла — возможность изменить или удалить его. Для директории — возможность создавать, переименовывать или удалять файлы внутри неё.
  • x (execute — выполнение, 1): Для файла — возможность запустить его как программу или скрипт. Для директории — возможность «войти» в неё (сделать её текущей рабочей, cd).

Два основных синтаксиса chmod: Символьный и Цифровой

1. Символьный (буквенный) метод

Более наглядный для человека. Формат: chmod [категория][оператор][права] файл.

  • Операторы: + (добавить право), - (убрать право), = (установить право точно).
  • Примеры:
    • chmod u+x script.sh — Добавить владельцу право на выполнение файла script.sh.
    • chmod go-w secret.txt — Забрать право на запись у группы и всех остальных.
    • chmod a=rw config.cfg — Установить для ВСЕХ (владельца, группы, остальных) только права на чтение и запись (но не выполнение).

2. Цифровой (восьмеричный) метод

Более компактный и часто используемый в скриптах. Каждая категория описывается цифрой от 0 до 7, которая является суммой её прав.

  1. Считаем: r=4, w=2, x=1.
  2. Суммируем нужные права для категории. Например, rwx = 4+2+1 = 7. r-x = 4+0+1 = 5.
  3. Три цифры подряд: первая — владелец (u), вторая — группа (g), третья — остальные (o).

Классические и самые важные маски:

  • 755 (rwxr-xr-x): Стандарт для исполняемых программ и скриптов. Владелец делает всё, остальные — читают и запускают.
  • 644 (rw-r--r--): Стандарт для обычных файлов (тексты, картинки, конфиги). Владелец читает и пишет, остальные — только читают.
  • 777 (rwxrwxrwx): ПОЛНЫЙ доступ для всех. Крайне опасная настройка для веб-сервера!
  • 700 (rwx------): Только владелец имеет полный доступ. Идеально для приватных ключей SSH.

Практические примеры из жизни

Пример 1: Сделать скрипт исполняемым и приватным.
chmod 750 my_backup.sh → Владелец (u): rwx (7), группа (g): r-x (5), остальные (o): --- (0).

Пример 2: Открыть доступ к лог-файлу для чтения всем пользователям системы.
chmod o+r /var/log/myapp.log или chmod 644 /var/log/myapp.log.

Пример 3: Создать общую папку для группы разработчиков.
chmod 775 /projects/team_alpha → Все участники группы смогут создавать и удалять файлы в этой директории.

Просмотр прав: команда ls -l

Чтобы увидеть текущие права, используйте ls -l. Первые 10 символов в выводе — это и есть права.
-rwxr-xr--
Первый символ (-) — тип файла («-» обычный файл, «d» директория). Далее три группы по три символа: u (rwx), g (r-x), o (r--).

Особые права: SUID, SGID, Sticky Bit

Помимо основных трёх, существуют специальные биты, добавляемые четвёртой цифрой в начале (например, 4755):

  • SUID (4): Файл с этим битом выполняется с правами своего владельца, а не запустившего пользователя. Пример: passwd.
  • SGID (2): Для директории — новые файлы наследуют группу директории, а не создателя.
  • Sticky Bit (1): Для директории (например, /tmp) — файлы может удалить только их владелец, даже если у других есть право на запись (w).

FAQ: Часто задаваемые вопросы

Как рекурсивно изменить права для всей папки и её содержимого?

Используйте ключ -R (recursive). Пример: chmod -R 755 /var/www/my_site/.

Я изменил права системного файла и всё сломалось. Что делать?

Попробуйте восстановить стандартные права из документации пакета или с аналогичной рабочей системы. Для критических системных файлов (например, в /etc) часто подходят права 644 или 600 для файлов и 755 для директорий. Будьте осторожны!

Чем chmod отличается от chown и chgrp?

chmod меняет ПРАВА доступа (что можно делать). chown меняет ВЛАДЕЛЬЦА файла. chgrp меняет ГРУППУ файла. Это разные, но взаимосвязанные команды управления доступом.

Почему я не могу изменить права файла, даже будучи его владельцем?

Возможно, файл имеет атрибут «неизменяемости» (immutable), установленный командой chattr +i. Проверьте это и, если нужно, снимите атрибут от root: chattr -i файл.

Какие права самые безопасные для веб-сервера (например, файлов WordPress)?

Общее правило: файлам — 644, папкам и исполняемым скриптам (например, PHP) — 755. Конфигурационные файлы с паролями (wp-config.php) лучше установить в 600 или 640. Никогда не используйте 777!