Права доступа в Linux: chmod, chown и umask простыми словами

Права доступа в Linux — основа безопасности системы: они решают, кто может читать, изменять и запускать каждый файл. Ошибка в правах приводит либо к «Permission denied» в самый неподходящий момент, либо к дыре в безопасности вроде chmod 777 на сервере.
В этой статье разберём права доступа в Linux простыми словами: как читать вывод ls -l, как работают chmod, chown и umask, что такое SUID и sticky bit и какие права ставить в реальных проектах.

Как устроены права доступа в Linux
У каждого файла есть владелец (user), группа (group) и все остальные (others). Для каждой из трёх категорий задаются три права:
| Право | Буква | Число | Для файла | Для каталога |
|---|---|---|---|---|
| Чтение | r | 4 | Читать содержимое | Видеть список файлов |
| Запись | w | 2 | Изменять содержимое | Создавать и удалять файлы |
| Выполнение | x | 1 | Запускать как программу | Заходить в каталог (cd) |
Важная деталь: чтобы удалить файл, нужны права на запись в каталог, а не в сам файл.
Как прочитать права: вывод ls -l
$ ls -l deploy.sh
-rwxr-x--- 1 dev devops 1240 Oct 27 10:15 deploy.shРазберём строку -rwxr-x--- по частям:
-— тип: обычный файл (d— каталог,l— ссылка);rwx— владелец dev может читать, писать и запускать;r-x— группа devops может читать и запускать;---— остальные не имеют доступа.
chmod: изменение прав доступа в Linux
Команда chmod меняет права двумя способами — числовым и символьным.
Числовой (восьмеричный) режим
Права каждой категории — сумма чисел: r=4, w=2, x=1. Например, rwx = 7, r-x = 5, r– = 4.
chmod 755 script.sh # rwxr-xr-x — скрипты и каталоги
chmod 644 index.html # rw-r--r-- — обычные файлы
chmod 600 ~/.ssh/id_ed25519 # rw------- — приватные ключи
chmod 700 ~/.ssh # rwx------ — личные каталогиСимвольный режим
Удобен, когда нужно изменить одно право, не трогая остальные: u — владелец, g — группа, o — остальные, a — все.
chmod u+x run.sh # добавить владельцу выполнение
chmod g-w config.yml # убрать у группы запись
chmod o= secret.txt # снять все права у остальных
chmod -R g+rX project/ # рекурсивно; X — выполнение только для каталоговchown и chgrp: смена владельца
Права доступа в Linux работают в паре с владельцем файла. Сменить владельца и группу можно одной командой:
sudo chown www-data:www-data /var/www/site -R
sudo chown dev: file.txt # группа — основная группа пользователя dev
sudo chgrp devops deploy.shСовет профи: вместо того чтобы открывать каталог всем, создайте общую группу и добавьте в неё нужных пользователей: sudo usermod -aG devops anna.
umask: права по умолчанию
umask задаёт, какие права отнимаются у новых файлов. Базовые права — 666 для файлов и 777 для каталогов.
umask # 0022 — типичное значение
# файлы: 666 - 022 = 644, каталоги: 777 - 022 = 755
umask 027 # новые файлы 640, каталоги 750 — закрыто для остальныхЧтобы значение сохранялось, добавьте umask 027 в ~/.bashrc или ~/.zshrc.
Специальные права: SUID, SGID и sticky bit
| Бит | Число | Что делает | Пример |
|---|---|---|---|
| SUID | 4000 | Файл запускается с правами владельца | /usr/bin/passwd |
| SGID | 2000 | Новые файлы в каталоге наследуют его группу | общие папки команды |
| Sticky bit | 1000 | Удалять файлы может только их владелец | /tmp |
chmod 2775 /srv/shared # SGID для общей папки команды
chmod +t /srv/upload # sticky bit
find / -perm -4000 -type f 2>/dev/null # найти все SUID-файлы (аудит)Почему chmod 777 — плохая идея
777 даёт любому пользователю и любому процессу право изменить или подменить файл. На веб-сервере это прямой путь к взлому через загрузку вредоносного скрипта. Если что-то «не работает без 777», проблема почти всегда в владельце: исправьте её через chown, а права оставьте 755/644.
Рекомендуемые права доступа в Linux: шпаргалка
| Объект | Права |
|---|---|
| Обычные файлы сайта | 644 |
| Каталоги сайта | 755 |
| Скрипты | 750 или 755 |
| Конфиги с паролями (.env, wp-config.php) | 600 или 640 |
| ~/.ssh | 700 |
| Приватный SSH-ключ | 600 |
| authorized_keys | 600 |
Частые вопросы
Как посмотреть права доступа в Linux в числовом виде?
Используйте stat -c '%a %n' * — команда выведет права в формате 644, 755 и т. д.
Почему SSH не принимает ключ?
Чаще всего из-за слишком открытых прав: SSH игнорирует ключи, если ~/.ssh доступен группе или остальным. Выполните chmod 700 ~/.ssh && chmod 600 ~/.ssh/*.
Что такое ACL и когда они нужны?
ACL расширяют стандартные права доступа в Linux, позволяя дать доступ конкретному пользователю без смены группы: setfacl -m u:anna:rw file.txt. Подробности — в документации man chmod и man setfacl.
Заключение
Права доступа в Linux сводятся к трём вопросам: кто владелец, какая группа и что разрешено остальным. Придерживайтесь принципа минимальных прав, не используйте 777 и проверяйте SUID-файлы на серверах. А если вы только настраиваете машину, начните с нашего руководства «Настройка Linux-окружения перед началом работы».




