В мире Linux и Unix-подобных систем каждый файл и папка охраняются невидимым стражем — системой прав доступа. Команда chmod (change mode) — это ваш личный ключ, позволяющий решать, кто может читать, изменять или запускать ваши данные. Понимание chmod — это не просто технический навык, это фундамент безопасности и контроля над своей системой.
Что такое права доступа?
Представьте, что каждый файл — это комната с тремя дверьми: для владельца (user), для членов его группы (group) и для всех остальных (others). У каждой двери может быть три замка: чтение (read, r), запись (write, w) и выполнение (execute, x). Команда chmod позволяет вам менять эти замки.
Проверить текущие права можно командой ls -l. Вы увидите строку вида -rwxr-xr--, где первый символ указывает на тип (файл/папка), а следующие девять — права для владельца, группы и остальных.
Два языка chmod: символьный и числовой
Chmod понимает два основных «диалекта», и мастерство заключается в свободном владении обоими.
Символьный (буквенный) метод
Самый наглядный способ. Вы указываете, для кого меняете права (u,g,o,a), какую операцию выполняете (+, -, =) и какие права (r,w,x).
chmod u+x script.sh— добавляет право на выполнение (x) владельцу (u) файла script.sh.chmod go-w secret.txt— отнимает право на запись (w) у группы (g) и всех остальных (o).chmod a=rw config.cfg— устанавливает для всех (a) только права на чтение и запись (rw).
Числовой (восьмеричный) метод
Более компактный и мощный. Каждой тройке прав (rwx) соответствует число от 0 до 7.
- Читаем (r) = 4
- Пишем (w) = 2
- Выполняем (x) = 1
Права суммируются. Например, rwx = 4+2+1 = 7. Три числа подряд задают права для владельца, группы и остальных.
chmod 755 script.sh— владелец: rwx (7), группа: r-x (5), остальные: r-x (5). Классика для исполняемых файлов.chmod 644 document.txt— владелец: rw- (6), группа: r-- (4), остальные: r-- (4). Стандарт для обычных файлов.chmod 700 ~/.ssh/id_rsa— ТОЛЬКО владелец может читать и писать (7). Никто больше — 0. Критически важно для приватных ключей!
Право на выполнение (x) для каталога имеет особый смысл — оно разрешает «войти» в эту папку и получить доступ к её содержимому. Без «x» на папке вы не сможете просмотреть файлы внутри, даже если у вас есть все права на сами файлы.
Практические сценарии и важные предупреждения
Безопасность веб-сервера
Для файлов веб-сайта (например, в /var/www/html) часто используют chmod 644 для файлов и chmod 755 для папок. Это позволяет серверу читать контент, но не дает случайно изменить его от имени веб-пользователя.
Общие папки в команде
Чтобы создать папку, куда все члены группы могут складывать файлы, но не удалять чужие, используйте комбинацию: chmod 775 shared_folder и установите sticky-bit: chmod +t shared_folder.
Главная опасность
Никогда не используйте chmod 777 (полный доступ всем) как «волшебную таблетку» от проблем с доступом. Это грубейшая ошибка безопасности, открывающая вашу систему для любых угроз. Всегда задавайте минимально необходимые права.
FAQ: Часто задаваемые вопросы
Как рекурсивно изменить права для всей папки и её содержимого?
Используйте ключ -R (recursive). Пример: chmod -R 755 /путь/к/папке. Будьте крайне осторожны — эта команда изменит всё внутри.
В чём разница между chmod и chown?
chmod меняет права доступа (читать/писать/выполнять). chown меняет владельца и группу файла. Часто их используют вместе: сначала chown, чтобы назначить владельца, потом chmod, чтобы задать права.
Как отменить все права для «остальных»?
Используйте числовую запись, где последняя цифра — 0. Например, chmod 750 файл даст полные права владельцу (7), чтение и выполнение группе (5), и ничего — остальным (0).
Что такое специальные биты setuid, setgid и sticky bit?
Это расширенные флаги. Setuid (например, chmod u+s) позволяет запускать файл от имени владельца. Setgid (chmod g+s) для папок заставляет новые файлы наследовать группу папки. Sticky-bit (chmod +t) на папках (как /tmp) запрещает удалять чужие файлы. Их числовые значения: setuid=4000, setgid=2000, sticky-bit=1000 (добавляются к основной тройке, например, 4755).