- Home »

Управление правами доступа: chmod, chown и umask
Когда речь заходит о безопасности и управлении сервером, права доступа — это тот самый невидимый щит, который защищает ваши файлы и процессы от хаоса. Сегодня разберёмся, как работают chmod, chown и umask — три кита, на которых держится файловая безопасность в Linux и Unix-подобных системах. Если вы только что взяли VPS, подняли Docker-контейнер или настраиваете выделенный сервер, этот гайд поможет быстро и правильно настроить доступы.
О чём этот пост и почему это важно?
В статье — всё, что нужно знать для старта и уверенного управления правами доступа: от базовой теории до реальных примеров и подводных камней. Вы узнаете:
- Как работают права доступа в Linux (и почему это не так страшно, как кажется)
- Как быстро и правильно настроить права на сервере или в контейнере
- Чем отличаются chmod, chown и umask, и когда их лучше использовать
- Распространённые ошибки и лайфхаки
- Кейсы из реальной жизни — как ломают и как защищают
После прочтения вы сможете не только настроить права на своих ресурсах, но и избежать кучи проблем, которые часто встречаются у новичков (и даже у опытных админов, если честно).
Почему права доступа — это must-have?
Представьте: вы развернули новый сервис, сконфигурировали nginx, залили сайт — и вдруг кто-то получает доступ к вашим конфигам или базе. Или наоборот — вы не можете запустить нужный скрипт, потому что «Permission denied». Всё это — про права. Это не только про безопасность, но и про удобство: если всё настроено правильно, сервер работает как часы, а вы не тратите часы на отладку.
Права доступа — это фундамент:
- Безопасность: никто не тронет, что не должен
- Стабильность: процессы не мешают друг другу
- Автоматизация: скрипты работают без лишних sudo
Погнали разбираться!
Как это работает: структура и алгоритмы
Права доступа: что это и как устроено?
В Unix-подобных системах у каждого файла и директории есть три типа прав:
- Чтение (r) — можно посмотреть содержимое файла или список файлов в директории
- Запись (w) — можно изменить файл или добавить/удалить файлы в директории
- Выполнение (x) — можно запустить файл как программу или «зайти» в директорию
Эти права назначаются для трёх категорий пользователей:
- Владелец (user, u)
- Группа (group, g)
- Остальные (others, o)
В итоге, права выглядят как 10-символьная строка, например:
-rwxr-xr--
Где:
- Первый символ — тип (файл, директория, ссылка и т.д.)
- Далее — три блока по три символа: для владельца, группы, остальных
Таблица: Как читаются права
Права | Владелец | Группа | Остальные |
---|---|---|---|
-rwxr-xr– | rwx (чтение, запись, выполнение) | r-x (чтение, выполнение) | r– (только чтение) |
drwxrwx— | rwx | rwx | — |
Что такое chmod, chown и umask?
- chmod — меняет права доступа (например, делает файл исполняемым)
- chown — меняет владельца и/или группу файла или директории
- umask — задаёт маску прав по умолчанию для новых файлов и директорий
Всё просто: chmod — это «кому что можно», chown — «чей файл», umask — «какие права будут у новых файлов».
Как быстро настроить права доступа: практические советы и команды
1. Быстрый старт с chmod
chmod бывает двух видов: символьный и цифровой.
- Символьный:
chmod u+x script.sh
— добавить право на выполнение владельцу - Цифровой:
chmod 755 script.sh
— rwxr-xr-x (владелец — всё, остальные — только читать/выполнять)
Расшифровка цифровых прав:
- 4 — чтение (r)
- 2 — запись (w)
- 1 — выполнение (x)
Складываем: 7 = 4+2+1 (rwx), 5 = 4+1 (r-x), 0 (—)
Примеры:
chmod 644 file.txt # rw-r--r--
chmod 600 secret.key # rw-------
chmod 755 /usr/local/bin/myapp # rwxr-xr-x
chmod -R 700 /srv/private # рекурсивно для папки и файлов
Совет: Для скриптов и бинарников — 755, для конфигов — 600 или 644.
2. Быстрый старт с chown
Меняем владельца:
chown username file.txt # только владелец
chown username:group file.txt # владелец и группа
chown -R www-data:www-data /var/www # рекурсивно для веб-папки
Зачем? Часто нужно, когда файлы копируются от рута или другого пользователя, а работать будет сервис под отдельным юзером (например, nginx, www-data, postgres).
3. Быстрый старт с umask
umask — это маска, которая отнимает права у новых файлов (не добавляет!). Например, если umask 022, то новые файлы будут с правами 644 (rw-r–r–), а директории — 755 (rwxr-xr-x).
umask # показать текущую маску
umask 027 # новые файлы: rw-r-----, директории: rwxr-x---
Где задавать? В ~/.bashrc, /etc/profile, скриптах запуска сервисов.
Важно: umask работает только для новых файлов/директорий, созданных после установки маски.
Примеры, кейсы и сравнение
Таблица: кейсы настройки прав
Ситуация | Решение | Почему |
---|---|---|
Веб-сервер не видит файлы сайта | chown -R www-data:www-data /var/www/html |
Владелец и права соответствуют пользователю веб-сервера |
Секретные ключи должны быть доступны только владельцу | chmod 600 /etc/ssl/private/server.key |
Только root может читать/писать |
Общий каталог для нескольких пользователей | chown -R :sharedgroup /srv/shared |
Права на запись и setgid для группы (новые файлы — с той же группой) |
Нужно, чтобы новые файлы были доступны только владельцу | umask 077 |
rw——- для файлов, rwx—— для директорий |
Плохие примеры (и почему их избегать)
- chmod 777 /var/www/html — опасно! Все могут читать, писать и выполнять. Так можно получить взлом через веб-оболочку или случайную порчу данных.
- chown root:root /home/user/file — теперь обычный пользователь не сможет работать с файлом.
- umask 000 — все новые файлы доступны всем, привет утечкам.
Ошибки новичков, мифы и похожие решения
Топ-5 ошибок
- Давать всем 777 «чтобы работало» — это временное решение, которое часто становится постоянным (и опасным)
- Не менять владельца после копирования от root — сервисы не смогут читать/писать
- Забывать про umask в скриптах и cron’ах — файлы создаются с неправильными правами
- Путать права на директории и файлы (директории без x — не зайти внутрь, даже если есть r)
- Использовать chmod/chown без -R, когда нужно рекурсивно
Мифы
- «chmod 777 — это нормально для разработки» — только если вы один и на локалке, в продакшене — никогда.
- «umask влияет на существующие файлы» — нет, только на новые.
- «chown можно делать без sudo» — только если вы владелец файла или root.
Похожие решения и утилиты
- setfacl — расширенные ACL (Access Control Lists), если стандартных прав мало. man setfacl
- getfacl — посмотреть текущие ACL.
- lsattr/chattr — атрибуты файлов (immutable, append-only и др.)
Сравнение: стандартные права vs ACL
Параметр | chmod/chown/umask | ACL (setfacl) |
---|---|---|
Гибкость | Базовая (3 категории: владелец, группа, остальные) | Любое количество пользователей и групп |
Простота | Максимально просто и понятно | Сложнее, требует понимания ACL |
Совместимость | Работает везде | Требует поддержки файловой системы |
Частые задачи | 99% кейсов | Нетиповые случаи, когда нужно гибко делить доступ |
Интересные факты и нестандартные приёмы
- Setuid и setgid: если на бинарнике стоит setuid (chmod u+s), он всегда запускается с правами владельца файла (например, /usr/bin/passwd). С setgid — с правами группы.
- Sticky bit: на директории (например, /tmp) — только владелец файла может его удалить, даже если у директории есть права на запись для всех. Ставится так:
chmod +t /tmp
. - Можно сделать alias для быстрой смены прав:
alias fixperms="chmod -R 755 . && chown -R $USER:$USER ."
- В Docker лучше использовать COPY с опциями
--chown
(начиная с Docker 17.09):COPY --chown=appuser:appgroup . /app
- umask можно временно менять в скриптах:
umask 077; touch secret.txt; umask 022
- Список всех файлов с опасными правами:
find / -perm -2 -type f 2>/dev/null
(ищет файлы с правом на запись для всех)
Автоматизация и новые возможности
Почему это важно для автоматизации:
- В скриптах деплоя можно сразу выставлять нужные права и владельцев, чтобы не было «сюрпризов» после релиза
- umask позволяет контролировать права на лету — удобно для CI/CD и контейнеров
- В Ansible, Salt, Chef есть модули для управления chmod/chown — используйте их для инфраструктуры как кода
- В cron-джобах можно явно задать umask, чтобы файлы не были доступны всем подряд
- В Dockerfile используйте правильные права, чтобы контейнер не работал под root без необходимости
Пример скрипта деплоя:
#!/bin/bash
umask 027
cp -R ./build/* /var/www/html/
chown -R www-data:www-data /var/www/html/
chmod -R 755 /var/www/html/
Всё просто, надёжно и без лишних sudo в продакшене.
Выводы и рекомендации
- Используйте chmod, chown и umask осознанно — не копируйте команды вслепую с форумов
- Не давайте 777 без крайней необходимости — это как дать ключи от квартиры всему интернету
- Проверяйте владельцев файлов после копирования или деплоя
- Устанавливайте umask в скриптах и сервисах — особенно для автоматизации
- Для сложных кейсов изучите ACL, но для 99% задач хватит стандартных прав
- Документируйте свои решения — через месяц забудете, почему сделали именно так
- Автоматизируйте — используйте ansible, shell-скрипты, Dockerfile с правильными правами
Если вы только начали путь с сервером — VPS или выделенный сервер — настройте права с самого начала. Это инвестиция в ваше спокойствие и безопасность.
Официальные ресурсы для углубления:
Не бойтесь экспериментировать — права доступа созданы не для того, чтобы мешать, а чтобы помогать. Удачи в настройке!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.