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

Права доступа в Linux простыми словами: как читать ls -l, работать с chmod, chown, umask, SUID и sticky bit. Шпаргалка с правильными правами для сервера.

Права доступа в Linux — основа безопасности системы: они решают, кто может читать, изменять и запускать каждый файл. Ошибка в правах приводит либо к «Permission denied» в самый неподходящий момент, либо к дыре в безопасности вроде chmod 777 на сервере.

В этой статье разберём права доступа в Linux простыми словами: как читать вывод ls -l, как работают chmod, chown и umask, что такое SUID и sticky bit и какие права ставить в реальных проектах.

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

Как устроены права доступа в Linux

У каждого файла есть владелец (user), группа (group) и все остальные (others). Для каждой из трёх категорий задаются три права:

ПравоБукваЧислоДля файлаДля каталога
Чтениеr4Читать содержимоеВидеть список файлов
Записьw2Изменять содержимоеСоздавать и удалять файлы
Выполнениеx1Запускать как программуЗаходить в каталог (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

БитЧислоЧто делаетПример
SUID4000Файл запускается с правами владельца/usr/bin/passwd
SGID2000Новые файлы в каталоге наследуют его группуобщие папки команды
Sticky bit1000Удалять файлы может только их владелец/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
~/.ssh700
Приватный SSH-ключ600
authorized_keys600

Частые вопросы

Как посмотреть права доступа в 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-окружения перед началом работы».

Поделиться:

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *