Home » Управление правами доступа: chmod, chown и umask
Управление правами доступа: chmod, chown и umask

Управление правами доступа: chmod, chown и umask

Когда речь заходит о безопасности и управлении сервером, права доступа — это тот самый невидимый щит, который защищает ваши файлы и процессы от хаоса. Сегодня разберёмся, как работают chmod, chown и umask — три кита, на которых держится файловая безопасность в Linux и Unix-подобных системах. Если вы только что взяли VPS, подняли Docker-контейнер или настраиваете выделенный сервер, этот гайд поможет быстро и правильно настроить доступы.

О чём этот пост и почему это важно?

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

  • Как работают права доступа в Linux (и почему это не так страшно, как кажется)
  • Как быстро и правильно настроить права на сервере или в контейнере
  • Чем отличаются chmod, chown и umask, и когда их лучше использовать
  • Распространённые ошибки и лайфхаки
  • Кейсы из реальной жизни — как ломают и как защищают

После прочтения вы сможете не только настроить права на своих ресурсах, но и избежать кучи проблем, которые часто встречаются у новичков (и даже у опытных админов, если честно).

Почему права доступа — это must-have?

Представьте: вы развернули новый сервис, сконфигурировали nginx, залили сайт — и вдруг кто-то получает доступ к вашим конфигам или базе. Или наоборот — вы не можете запустить нужный скрипт, потому что «Permission denied». Всё это — про права. Это не только про безопасность, но и про удобство: если всё настроено правильно, сервер работает как часы, а вы не тратите часы на отладку.

Права доступа — это фундамент:

  • Безопасность: никто не тронет, что не должен
  • Стабильность: процессы не мешают друг другу
  • Автоматизация: скрипты работают без лишних sudo

Погнали разбираться!

Как это работает: структура и алгоритмы

Права доступа: что это и как устроено?

В Unix-подобных системах у каждого файла и директории есть три типа прав:

  • Чтение (r) — можно посмотреть содержимое файла или список файлов в директории
  • Запись (w) — можно изменить файл или добавить/удалить файлы в директории
  • Выполнение (x) — можно запустить файл как программу или «зайти» в директорию

Эти права назначаются для трёх категорий пользователей:

  1. Владелец (user, u)
  2. Группа (group, g)
  3. Остальные (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 -R 755 /var/www/html
Владелец и права соответствуют пользователю веб-сервера
Секретные ключи должны быть доступны только владельцу chmod 600 /etc/ssl/private/server.key Только root может читать/писать
Общий каталог для нескольких пользователей chown -R :sharedgroup /srv/shared
chmod -R 2770 /srv/shared
Права на запись и setgid для группы (новые файлы — с той же группой)
Нужно, чтобы новые файлы были доступны только владельцу umask 077 rw——- для файлов, rwx—— для директорий

Плохие примеры (и почему их избегать)

  • chmod 777 /var/www/htmlопасно! Все могут читать, писать и выполнять. Так можно получить взлом через веб-оболочку или случайную порчу данных.
  • chown root:root /home/user/file — теперь обычный пользователь не сможет работать с файлом.
  • umask 000 — все новые файлы доступны всем, привет утечкам.

Ошибки новичков, мифы и похожие решения

Топ-5 ошибок

  1. Давать всем 777 «чтобы работало» — это временное решение, которое часто становится постоянным (и опасным)
  2. Не менять владельца после копирования от root — сервисы не смогут читать/писать
  3. Забывать про umask в скриптах и cron’ах — файлы создаются с неправильными правами
  4. Путать права на директории и файлы (директории без x — не зайти внутрь, даже если есть r)
  5. Использовать 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 или выделенный сервер — настройте права с самого начала. Это инвестиция в ваше спокойствие и безопасность.

Официальные ресурсы для углубления:

Не бойтесь экспериментировать — права доступа созданы не для того, чтобы мешать, а чтобы помогать. Удачи в настройке!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked