В мире 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, которая является суммой её прав.
- Считаем: r=4, w=2, x=1.
- Суммируем нужные права для категории. Например, rwx = 4+2+1 = 7. r-x = 4+0+1 = 5.
- Три цифры подряд: первая — владелец (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!