Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты

Рейтинг: 64.6% · 7 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты (вы здесь)
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты

Каждый файл и каталог в Linux принадлежит кому-то и решает, кого пускать. Когда сервис не может прочитать свой конфиг, пользователь жалуется на отказ в записи, а скрипт внезапно работает с чужими правами, корень почти всегда здесь, в модели доступа. В этом уроке разберем, как ядро решает можно или нельзя, как читать ls -l, менять права через chmod в обоих видах, задавать значения по умолчанию через umask, переназначать владельца через chown и chgrp, и зачем нужны три специальных бита: SUID, SGID и sticky.

Изображение

Как это работает

У каждого файла есть владелец (UID) и группа (GID). Права делятся на три категории: владелец (user), группа (group) и все остальные (other). Для каждой категории три флага: чтение (r), запись (w) и выполнение (x). Итого девять бит плюс три специальных, которые держат в отдельном четвертом разряде.

Когда процесс обращается к файлу, ядро смотрит на его эффективный UID и GID. Если UID процесса совпадает с владельцем файла, применяются права владельца и больше ничего. Не совпал владелец, но GID входит в группу файла, применяются права группы. Иначе действуют права other. Категории не складываются: подходит первая совпавшая. Из этого вытекает ловушка, владелец может иметь меньше прав, чем группа, и ядро не даст ему права группы.

Смысл r, w, x различается для файлов и каталогов. Для файла: r читать содержимое, w изменять, x запускать как программу. Для каталога: r получить список имен внутри, w создавать, удалять и переименовывать записи, x входить внутрь и обращаться к конкретным именам. Поэтому каталог без x бесполезен, даже если r стоит: имена видны, но ни в один файл не зайти. А удаление файла зависит не от прав на сам файл, а от w на каталог, в котором он лежит.

Права хранятся числом. Каждой категории соответствует восьмеричная цифра: r=4, w=2, x=1, складываем. rwx это 4+2+1=7, rw- это 6, r-x это 5. Так 755 значит rwxr-xr-x, а 644 значит rw-r--r--. Это и есть числовая запись, которую любит chmod.

umask работает наоборот: это маска битов, которые надо снять с базовых прав при создании. База для файлов 666 (без x, файлы по умолчанию не исполняемые), для каталогов 777. Из базы вычитаются биты маски. При типичной umask 022 новый файл получит 666 минус 022 равно 644, каталог 777 минус 022 равно 755. Технически это не вычитание, а побитовое AND с инверсией маски, но для round-чисел совпадает.

Команды и примеры

Читаем вывод ls -l. Первый символ это тип (- файл, d каталог, l ссылка), дальше три тройки rwx для user, group, other.

Код: Выделить всё

$ ls -l report.sh
-rwxr-xr-x 1 anna devs 482 jun 14 10:20 report.sh
  |  |  |    |    |
  |  |  |    |    +-- группа devs
  |  |  |    +------- владелец anna
  |  |  +----------- other: r-x
  |  +-------------- group: r-x
  +----------------- user:  rwx
chmod в числовом виде задает все девять бит сразу. В символьном меняет точечно: u/g/o/a (a это все), операции + - =, флаги r w x.

Код: Выделить всё

chmod 644 file.conf          # rw-r--r--
chmod 755 script.sh          # rwxr-xr-x
chmod u+x script.sh          # добавить владельцу выполнение
chmod go-w shared.txt        # снять запись у группы и остальных
chmod a=r public.txt         # ровно r--r--r-- всем
chmod -R u+rwX,go+rX www/    # рекурсивно; большая X ставит x только там,
                             # где он уже есть или это каталог (умно для дерева)
Большая X в символьной записи это частый прием: она не делает исполняемыми все файлы подряд, а лишь каталоги и то, что уже было исполняемым. Это спасает при рекурсивном chmod на смешанном дереве.

umask смотрим и задаем. Без аргумента печатает текущую маску, с -S в символьном виде.

Код: Выделить всё

$ umask
0022
$ umask -S
u=rwx,g=rx,o=rx
$ umask 027            # новые файлы 640, каталоги 750 (other без доступа)
Постоянное значение umask прописывают в /etc/profile, /etc/login.defs (UMASK) или файлах окружения пользователя; в современных системах его также может выставлять PAM через pam_umask. И в Debian/Ubuntu, и в RHEL/Fedora дефолт обычно 022 для root и 002 для обычных пользователей при схеме user private groups.

Меняем владельца и группу. chown умеет и то и другое сразу через двоеточие, chgrp только группу.

Код: Выделить всё

chown anna file.txt           # сменить владельца
chown anna:devs file.txt      # владелец и группа разом
chown :devs file.txt          # только группа (как chgrp)
chgrp devs file.txt           # то же через отдельную команду
chown -R www-data:www-data /var/www/site   # Debian/Ubuntu веб-сервер
chown -R apache:apache /var/www/html       # RHEL/Fedora веб-сервер
Менять владельца на чужого может только root. Обычный пользователь не может подарить свой файл другому (иначе обошел бы дисковые квоты). Сменить группу владелец может, но лишь на ту, в которой сам состоит.

Специальные биты. SUID (4) на исполняемом файле запускает его с правами владельца файла, а не запускающего, классика это /usr/bin/passwd (пишет в /etc/shadow от root). SGID (2) на файле запускает с группой владельца; на каталоге важнее, новые файлы внутри наследуют группу каталога, а не первичную группу создателя, это рабочая лошадка общих папок. Sticky (1) на каталоге запрещает удалять чужие файлы, даже если есть w на каталог, удалять может только владелец файла или root, как в /tmp.

Код: Выделить всё

chmod u+s installer            # SUID, в ls: rwsr-xr-x
chmod 4755 installer           # то же числом (4 в старшем разряде)
chmod g+s teamdir              # SGID на каталоге, наследование группы
chmod 2775 teamdir             # drwxrwsr-x
chmod +t /srv/upload           # sticky, в ls: drwxrwxrwt
chmod 1777 /srv/upload         # классический режим общей папки
В ls буква подсказывает бит: s вместо x владельца это SUID, s вместо x группы это SGID, t вместо x other это sticky. Заглавная S или T значит, что спецбит стоит, а соответствующего x под ним нет (обычно ошибка конфигурации).

Частые грабли
  • chmod 777 как лекарство от любого отказа. Это дыра: писать сможет кто угодно. Почти всегда правильный ответ не 777, а корректный владелец через chown.
  • Категории не складываются. Если ты владелец, но у владельца нет w, ядро не даст тебе прав группы, хотя ты в ней. Лечится сменой прав владельцу, а не добавлением себя в группу.
  • Каталог с r без x: видишь имена в ls, но не можешь зайти и прочитать файлы. И наоборот, x без r дает доступ к файлу по точному имени без листинга.
  • Удаление файла зависит от w на каталог, а не на файл. Файл с правами 000 спокойно удаляется, если у тебя есть запись в каталоге и нет sticky.
  • Рекурсивный chmod -R 755 на дереве с файлами делает все файлы исполняемыми. Используй символьную X вместо строчной x.
  • SUID на скриптах не работает: ядро Linux игнорирует SUID для интерпретируемых файлов из соображений безопасности, бит срабатывает только на бинарниках.
  • Забытый SGID на общей папке: файлы создаются с личной группой автора, и коллеги не могут их редактировать. Ставь g+s на каталог заранее.
  • chown по UID, которого нет в системе: файл станет orphaned, ls покажет голое число вместо имени.
Мини-лаба
  • Создай файл touch t1, посмотри ls -l, переведи права в число и обратно в rwx устно, потом проверь stat -c '%a %A' t1.
  • Задай umask 077, создай touch t2 и mkdir d2, сравни их права с t1 и объясни разницу для файла и каталога.
  • Сделай общую папку: sudo mkdir /srv/team, sudo chown root:devs /srv/team, sudo chmod 2775 /srv/team. Создай внутри файл и убедись, что его группа devs, а не твоя личная.
  • Добавь sticky на эту папку (chmod +t), от второго пользователя попробуй удалить чужой файл и поймай отказ.
  • Найди в системе все SUID-бинарники: find /usr/bin -perm -4000 -type f -ls, объясни, почему passwd в списке.
  • Сними у скрипта право на выполнение через chmod a-x и запусти ./script, разбери сообщение об ошибке.
Контрольные вопросы
  • Какому числовому значению соответствует rwxr-x---, и что оно разрешает каждой из трех категорий?
  • При umask 027 какие права получит новый обычный файл и какие новый каталог? Покажите расчет.
  • Чем отличается действие SGID на исполняемом файле от действия SGID на каталоге?
  • Пользователь состоит в группе файла, но первая совпавшая категория это владелец, у которого нет записи. Сможет ли он писать в файл и почему?
  • Что именно запрещает sticky bit на каталоге и кто все же может удалить файл в нем?
  • Почему chmod -R 755 на дереве с обычными файлами считается ошибкой и какой ключ chmod решает проблему?
👍3 ❤️5 🔥1 😄 🤔3
Аватара пользователя
rustwizard
Сообщения: 1
Зарегистрирован: 18 май 2026, 07:20

Re: Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты

Сообщение rustwizard »

Долго не мог понять почему у меня файл 600 а зайти в свою же папку не получается. Оказалось на саму папку x не стоял, файлы не при чем
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Монтирование файловых систем [104.3]
Следующая глава →
Жёсткие и символические ссылки

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость