Помню когда тема о правах доступа в linux (chmod) была для меня незнакомой, я находил разные статьи, которые очень сильно раздражали пробелами в объяснениях, давали рваные фрагменты понимания ситуации и оставляли больше вопросов чем ответов.
Целью этой статьи является создание памятки по правам доступа в linux, которые дадут максимально доступную, понятную информацию, с визуализацией и короткими подсказками. Материал описан таким образом, что бы после прочтения можно было быстро вернуться и освежить знания. Надеюсь, опытные админы найдут что-то интересное и полезное, но в основном материал ориентирован на тех, кто только начинает свое погружение в системное администрирование, безопасность, DevOps и разработку ПО.
Содержание
Вступление
Какие есть системы контроля доступами
-
Какие системы контроля доступа используют разные дистрибутивы
Таблица по популярным дистрибутивам Linux
Краткая справка по реализациям MAC
Что общее у всех
-
Расшифровка таблицы прав (символьная нотация, восьмеричная, SELinux контекст)
Шпаргалка: Символьная нотация (
rwx)Шпаргалка: Символьная нотация (symbolic notation) для директорий
Шпаргалка: Символьная нотация (symbolic notation) для файлов
Восьмеричная нотация
Шпаргалка: Восьмеричная, Бинарная, Символьная
Шпаргалка: Восьмеричная (Популярные комбинации)
Специальные биты
Шпаргалка: Специальные биты
SELinux контекст
-
Команды и утилиты
ls
stat
chown
chgrp
chmod
ps
id
find
Немного о безопасности (чем опасен 777)**
В статье затронуты, но не полностью раскрыты темы: ACL setfacl/getacl, AppArmor и некоторые другие. Если есть запрос на такой же формат, но с упором на конкретные темы — пишите в комментарии.
Вступление
Современному пользователю интуитивно кажется что в системе назначения прав, должна быть возможность указывать права отдельным пользователям, например:
user1может читать/писать/выполнятьuser2может читатьuser3может выполнятьuser4вообще не имеет прави так далее для остальных пользователей.
Но базовая система UNIX-прав использует не такой подход, у нее есть понятие “владелец” и только 3 слота для указания прав:
слот пользователя (подразумеваются права пользователя-владельца)
слот группы (подразумевается группа-владелец)
слот для всех остальных (все кто не является владельцем)
Таким образом базовая система прав linux позволяет задавать права только относительно пользователя-владельца, группы-владельца и общего множества остальных пользователей. Итого 3 слота для указания прав: user, group, other. Сокращенно — ugo.
Для просмотра прав используется команда ls -l, которая отображает список файлов/директорий и таблицу прав.
Пример вывода `ls -l`
gtosss@laptop-dc:~/example$ ls -l total 4 drwxr-xr-x. 1 gtosss gtosss 0 Apr 21 13:52 first-dir -rw-r--r--. 1 gtosss gtosss 13 Apr 21 13:57 first.txt drwxr-xr-x. 1 gtosss gtosss 0 Apr 21 13:53 second-dir -rw-r--r--. 1 gtosss gtosss 0 Apr 21 13:52 second.text
Что значат строки такого вида drwxr-xr-x. — объясняется далее в соответствующих разделах о символьной нотации. На данном этапе достаточно знать — эта строка хранит информацию о правах доступа для пользователя-владельца, группы-владельца и всех остальных.


Назначения прав индивидуально каждому пользователю, как было мной описано в самом начале, тоже поддерживается, но это расширенная система доступов, она реализован по стандарту POSIX, называется POSIX ACL (Access Control Lists) и управляется командами: setfacl, getfacl о ней позже.
Что бы лучше понять как работают системы контроля доступами, классифицируем их, это поможет упорядочить знания.
Какие есть системы контроля доступами
В этом разделе речь идет не о конкретных реализациях или технологиях, а именно об абстрактных паттернах, по которым реализуются конкретные системы. Например, если вы FE/BE разработчик, вы наверняка реализовывали что-то из списка нижне в своих проектах.
Всего можно выделить следующие абстракции для классификации систем доступов:
DAC (Discretionary Access Control, Избирательная система доступа) — Технически реализуется так: есть владелец и/или суперпользователь — он назначает права для всех остальных или передает “владение” другому. Как раз это используется в основе базовых UNIX-прав — эта модель лежит практических во всех linux дистрибутивах, но некоторые дополняют ее более расширенными реализациями.
MAC (Mandatory Access Control, Мандатная система доступа) — Это аналог иерархии доступов из реальной жизни, который практикуется в спецслужбах имеющих доступ к государственной тайне или иным доступам секретности. Технически реализуется меткой к файлу которая назначает уровень “секретности”. Пользователи в свою очередь имеют разные уровни доступа секретности. Этот подход поддерживает: Astra Linux, SELinux (Security-Enhanced).
RBAC (Role Based Access Control, Ролевая система доступа) — Многим знакомая простая модель основанная на ролях. Суть в том что бы создать роли: администратор, пользователь, читатель и другие, затем выдавать доступ к файлам основываясь на ролевой модели и соотвественно раздавать роли пользователям.
-
ABAC (Attribute-Based Access Control, Атрибутная система доступа) — Наиболее гибкая и современная модель, в которой решение о предоставлении доступа принимается на основе атрибутов — произвольных свойств, привязанных к четырём категориям:
Субъект (кто запрашивает): должность, отдел, уровень допуска, стаж и т.д.
Объект (к чему запрашивается): тип документа, метка конфиденциальности, владелец.
Действие: чтение, запись, удаление, пересылка.
Контекст (окружение): время суток, IP-адрес, геолокация, тип устройства.
На основе комбинации этих атрибутов формируются политики (policies), например:
Сотрудник отдела финансов может читать бухгалтерские отчёты только в рабочее время и только из корпоративной сети
PBAC (Policy-Based Access Control) — Иногда выделяют отдельно, но по сути является ABAC.
Все эти абстракции не являются взаимоисключающими, они часто комбинируются. Например, SELinux (Security-Enhanced) сочетают в себе DAC и MAC (базовые UNIX-права и мандатные политики).
Какие системы контроля доступа используют разные дистрибутивы
В этом разделе собраны популярные дистрибутивы и реализованные в них механизмы доступов. Я недостаточно хорошо погружен во все особенности всех дистрибутивов, по этому таблицу мне помогал составить Cloud 4.6
Могут быть ошибки, стоит перепроверять информацию.
Таблица систем контроля доступа по популярным дистрибутивам Linux
Дистрибутив |
DAC |
MAC |
RBAC |
Примечания |
|---|---|---|---|---|
RHEL |
UNIX-права, POSIX ACL |
SELinux (enforcing по умолчанию) |
SELinux Roles |
Эталонная реализация SELinux; политика |
CentOS / CentOS Stream |
UNIX-права, POSIX ACL |
SELinux (enforcing по умолчанию) |
SELinux Roles |
Наследует от RHEL |
Fedora |
UNIX-права, POSIX ACL |
SELinux (enforcing по умолчанию) |
SELinux Roles |
Площадка для обкатки новых политик SELinux до попадания в RHEL |
Oracle Linux |
UNIX-права, POSIX ACL |
SELinux (enforcing по умолчанию) |
SELinux Roles |
Бинарно совместим с RHEL |
Amazon Linux |
UNIX-права, POSIX ACL |
SELinux (enforcing, AL2023+) |
SELinux Roles |
В AL2 использовался permissive; AL2023 — enforcing |
Ubuntu |
UNIX-права, POSIX ACL |
AppArmor (enforcing по умолчанию) |
— |
SELinux доступен из репозиториев, но не рекомендован |
Debian |
UNIX-права, POSIX ACL |
AppArmor (по умолчанию с Debian 10 Buster) |
— |
SELinux и TOMOYO доступны опционально |
Linux Mint |
UNIX-права, POSIX ACL |
AppArmor (наследует от Ubuntu) |
— |
|
openSUSE / SLES |
UNIX-права, POSIX ACL |
AppArmor (enforcing по умолчанию) |
— |
SUSE — исторический разработчик AppArmor; SELinux опционален |
Arch Linux |
UNIX-права, POSIX ACL |
Нет по умолчанию |
— |
AppArmor и SELinux ставятся вручную из AUR/репозиториев |
Manjaro |
UNIX-права, POSIX ACL |
AppArmor (предустановлен, но часто не enforcing) |
— |
|
Gentoo |
UNIX-права, POSIX ACL |
Опционально: SELinux, AppArmor, TOMOYO, Smack |
SELinux Roles (при выборе SELinux) |
Специальные SELinux-профили ( |
Alpine Linux |
UNIX-права, POSIX ACL |
Нет по умолчанию |
— |
Минималистичный; ядро собрано без LSM-модулей из коробки |
Slackware |
UNIX-права, POSIX ACL |
Нет по умолчанию |
— |
Философия минимализма; всё ставится руками |
Astra Linux (Special Edition) |
UNIX-права, POSIX ACL |
Parsec (собственная мандатная система) |
Parsec Roles |
Сертифицирован ФСТЭК/ФСБ; иерархические метки конфиденциальности (до 256 уровней) |
ALT Linux (СПО) |
UNIX-права, POSIX ACL |
Опционально: SELinux |
— |
Некоторые сертифицированные сборки включают MAC |
РЕД ОС |
UNIX-права, POSIX ACL |
SELinux |
SELinux Roles |
Российский, на базе RPM-экосистемы |
Tizen (Samsung) |
UNIX-права, POSIX ACL |
Smack (Simplified MAC Kernel) |
— |
Используется в IoT / Smart TV |
Android (AOSP) |
UNIX-права (UID per app), POSIX ACL |
SELinux (enforcing с Android 5.0+) |
— |
Каждому приложению — свой UID (песочница на уровне DAC + SELinux) |
ChromeOS |
UNIX-права, POSIX ACL |
SELinux + minijail (песочница) |
— |
Сильно заблокированная система; верифицированная загрузка |
Краткая справка по реализациям MAC
Реализация |
Тип модели |
Принцип |
Где используется |
|---|---|---|---|
SELinux |
MAC + RBAC + MLS/MCS |
Каждому процессу и файлу — метка вида |
RHEL, Fedora, CentOS, Android, ChromeOS |
AppArmor |
MAC (path-based) |
Профиль привязан к пути исполняемого файла; проще в настройке, чем SELinux |
Ubuntu, Debian, openSUSE/SLES |
Smack |
MAC (label-based) |
Упрощённые метки без ролей и type enforcement; лёгкий для встраиваемых систем |
Tizen, IoT-устройства |
TOMOYO |
MAC (path-based) |
Похож на AppArmor; акцент на «обучение» — система сама собирает профиль при первом запуске |
Доступен в ядре mainline; нет крупных дистрибутивов по умолчанию |
Parsec |
MAC (мандатная, MLS) |
Иерархические уровни секретности + категории; ориентирован на российские стандарты ИБ |
Astra Linux Special Edition |
Что общее у всех
DAC (UNIX-права
rwx+POSIX ACL) присутствует во всех дистрибутивах — это часть ядра Linux и стандарта POSIX.ABAC как отдельная встроенная подсистема не реализована ни в одном дистрибутиве «из коробки». Однако SELinux с MLS/MCS-политиками и контекстными модулями (время, сеть) может приближаться к ABAC. Полноценный ABAC обычно реализуют на уровне приложений (XACML, Open Policy Agent и т.д.).
RBAC в чистом виде на уровне ОС представлен только через SELinux Roles и Parsec. Привычные
sudo/polkit— это скорее механизмы делегирования привилегий, хотя их часто относят к элементам RBAC.
Расшифровка таблицы прав (символьная нотация, восьмеричная)
Перед тем как знакомиться с командами изменения/просмотра прав, для начала научимся их читать.
Шпаргалка: Символьная нотация (rwx)
Что значит rwx:
буква |
значение |
цифрой |
|---|---|---|
r |
read — чтение |
4 |
w |
write — запись |
2 |
x |
execute — выполнение / вход в директорию |
1 |
- |
отсутствие прав |
По поводу разделение прав на запись и чтение, при погружении в тему может возникнуть когнитивный диссонанс: “Как так? Мы можем писать, но не можем читать?” Интуитивно кажется, что запись — более привилегированная операция, чем чтение. Но это нормально — мы можем разрешать запись, не разрешая чтение. Это позволяет сказать процессу: “ты можешь сюда писать логи, но читать их — нельзя”. Таким образом мы можем создать директорию, в которую разные процессы отправляют данные “в один конец”. Похоже на то, как мы можем отправить сообщение на адрес техподдержки, но подсмотреть, какие письма туда пришли помимо нашего, не можем.
Важное замечание: r, w, x для файлов и директорий может иметь разное значение, опишу разницу в таблице:
буква |
файл |
директория |
|---|---|---|
- |
отсутствие прав |
отсутствие прав |
r |
чтение файла |
только чтение имен файлов |
w |
запись в файл |
изменение содержимого директории (создание, удаление, переименование) |
x |
права на выполнение |
доступ к содержимому (подробнее ниже) |
Подробнее про `x` для директории
x для директории разрешает:
Входить в директорию (
cd dir-name) или проходить сквозь нее к внутренним путям.Обращаться к файлам и поддиректориям по имени (только если оно известно). Например
cat dir-name/file-name.txt(если у самого файла это не запрещено).
Что бы к директории был полноценный доступ на чтение — нужно одновременно иметь x и r. Если r есть, а x отсутствует, то останется только возможность узнать имена внутренних файлов, но не их содержимое.
Для создания/удаления/переименования файлов внутри директории нужны одновременно w + x:
wбезx— бесполезен (вы не можете обратиться к директории, чтобы что-то в ней изменить)
xбезw— можно входить и читать файлы, но нельзя создавать/удалять
Шпаргалка: Символьная нотация (symbolic notation) для директорий
Права |
Что можно |
|---|---|
|
ничего |
|
только увидеть имена файлов (без деталей) |
|
войти ( |
|
полноценное чтение: |
|
создавать/удалять файлы (по известному имени), но не видеть список |
|
полный доступ: просмотр, чтение, создание, удаление |
Шпаргалка: Символьная нотация (symbolic notation) для файлов
Права |
Что можно |
|---|---|
|
ничего |
|
только чтение |
|
только запись (перезаписать/дополнить), но не прочитать содержимое |
|
только выполнение |
|
чтение и запись (типичный набор для обычных файлов) |
|
чтение и выполнение (типичный набор для программ/скриптов) |
|
запись и выполнение, но нельзя прочитать |
|
полный доступ |
Восьмеричная нотация
Права могут отображаться в числовом формате (восьмеричном).
Для тех, кому нужно полное понимание
Восьмеричная система счисления выбрана не случайно. У нас есть 3 флага rwx: чтение, запись, выполнения. Каждый из них может быть “вкл” или “выкл”, что на языке информатики можно представить как 0 или 1. Итого потребуется 3 бита, что бы покрыть все комбинации.
В двоичной системе получается так:
r |
w |
x |
комментарий |
восьме-ричное |
|---|---|---|---|---|
0 |
0 |
0 |
все “выкл” |
0 |
0 |
0 |
1 |
“вкл”: выполнение |
1 |
0 |
1 |
0 |
“вкл”: запись |
2 |
0 |
1 |
1 |
“вкл”: запись, чтение |
3 |
1 |
0 |
0 |
“вкл”: чтение |
4 |
1 |
0 |
1 |
“вкл”: чтение, выполнение |
5 |
1 |
1 |
0 |
“вкл”: чтение, запись |
6 |
1 |
1 |
1 |
“вкл”: чтение, запись, выполнение |
7 |
Таким образом, в восьмеричном представлении достаточно запомнить только:
4 |
r — чтение |
2 |
w — запись |
1 |
x — выполнение |
А остальные числа, это результат логического ИЛИ (сумма в восьмеричной системе счисления):
Число |
Сумма |
Флаги |
Описание |
|---|---|---|---|
3 |
2 + 1 |
|
запись + выполнение |
5 |
4 + 1 |
|
чтение + выполнение |
6 |
4 + 2 |
|
чтение + запись |
7 |
4 + 2 + 1 |
|
чтение + запись + выполнение |
Но 3 бита хватит только что бы обозначить права для пользователя, а еще есть группа и “остальные”. По этому потребуется 9 бит = восьмеричное число из 3 цифр. Несколько случайных примеров:
777 (все права = все 9 бит в состоянии “вкл” =
111 111 111)400 (права на чтение только у владельца = в битах
100 000 000)444 (права на чтение у всех = в битах
100 100 100)440 (права на чтение только у владельца = в битах
100 100 000)112 (выполнение, выполнение, запись = в битах
001 001 010)
Восьмеричное представление прав самое компактное, по этому оно часто используется.
Шпаргалка: Восьмеричная, Бинарная, Символьная
Пояснение к заголовкам таблицы:
Octal — восьмеричная система счисления
Binary — двоичная система счисления
Права — символьная нотация
Octal |
Binary |
Права |
Описание |
|---|---|---|---|
|
|
|
Нет прав |
|
|
|
Только выполнение |
|
|
|
Только запись |
|
|
|
Запись + выполнение |
|
|
|
Только чтение |
|
|
|
Чтение + выполнение |
|
|
|
Чтение + запись |
|
|
|
Все права |
Шпаргалка: Восьмеричная (Популярные комбинации)
Octal |
Права |
Описание |
|---|---|---|
|
|
Все права для всех |
|
|
Владелец — всё; остальные — чтение и запуск |
|
|
Владелец — всё; группа — чтение и запуск |
|
|
Все права только владельцу |
|
|
Владелец — чтение/запись; остальные — чтение |
|
|
Владелец — чтение/запись; группа — чтение |
|
|
Чтение/запись только владельцу |
|
|
Только чтение только владельцу |
Специальные биты
Этот раздел для более подготовленных и уверенных пользователей linux, у новичков останутся вопросы. Описываю его в формате памятки. Если есть запрос на более детальное объяснение, дайте знать в комментах — в планах отдельная статья.
Выше мы рассмотрели стандартную модель прав в которых используется 9 бит для назначения прав. Но есть ситуации когда их не хватает. Для таких ситуаций предусмотрены 3 дополнительных (специальных) бита, у каждого свое название и особенности:
SUID (от анг. Set User ID) — предназначен для исполняемых файлов, если установлен, процесс будет запущен от имени пользователя-владельца файла (а не от имени запускающего как в случае с
x). Это полезно когда нужно позволить временно выполнить процесс от имени супер-пользователя, но вместе с тем опасно с точки зрения безопасности.SGID (от анг. Set Group ID) — для исполняемых файлов работает аналогично SUID, но устанавливает группу-владельца. Для директорий — новые файлы наследуют группу директории.
Sticky — для директорий: запрещает удаление и переименование чужих файлов. Удалить/переименовать файл может только его владелец, владелец директории или root.
Шпаргалка: Специальные биты
Octal |
Бит |
Описание |
|---|---|---|
|
SUID |
Запуск от имени владельца файла |
|
SGID |
Запуск от имени группы / наследование группы |
|
Sticky |
Удалять файлы в каталоге может только владелец |
Несколько примеров со спецбитами:
Octal |
Символьная |
Пример использования |
|---|---|---|
|
|
|
|
|
Каталог с SGID |
|
|
|
SELinux контекст
Пример вывода при комманде ls -lZ
gtosss@laptop-dc:~/example$ ls -lZ total 4 drwxr-xr-x. 1 gtosss gtosss unconfined_u:object_r:user_home_t:s0 0 Apr 21 13:52 first-dir -rw-r--r--. 1 gtosss gtosss unconfined_u:object_r:user_home_t:s0 13 Apr 21 13:57 first.txt drwxr-xr-x. 1 gtosss gtosss unconfined_u:object_r:user_home_t:s0 0 Apr 21 13:53 second-dir -rw-r--r--. 1 gtosss gtosss unconfined_u:object_r:user_home_t:s0 0 Apr 21 13:52 second.text
Пример как выглядит SELinux контекст: unconfined_u:object_r:user_home_t:s0. Здесь 4 значения разделенных двоеточием. Соответствует такому шаблону:
user : role : type : level
user
unconfined_u — это не пользователь из linux (gtosss), а отдельная сущность SELinux. Она значит что на пользователя не наложены строгие SELinux ограничения.
role
Для данных файлов назначена object_r — SELinux роль, как раз механизм RBAC о котором говорилось в разделе “Какие есть системы контроля доступами”. Эта роль назначается файлам по умолчанию, есть такие варианты стандартных ролей:
unconfined_r— Неограниченная роль.user_r— Роль обычного пользователя для доступа к пользовательским приложениям и другим непривилегированным доменам.staff_r— Похоже на роль пользователя, но более привилегированная. Есть больше доступа к системной информации чем у обычного пользователя.sysadm_r— Как следует из названия, роль системного администратора. Имеет почти все привилегии.system_r— Системная роль для процессов, не предназначена для переключения на нее пользователем.
Подробнее о ролях в англоязычном туториале.
type
В нашем случае у файлов тип user_home_t — значит что файл находиться в домашней директории пользователя. На основе типа принимается решение о доступе, этот механизм называется TE (Type Enforcement) он является частью MAC (Mandatory Access Control) о котором мы говорили в разделе “Какие есть системы контроля доступами”.
level
У нас s0 — что значит самый низкий уровень секретности. Всего их 15:
s0, s1, …, s15 — где s15 совершенно секретно. Это механизм MLS (Multi-Level Security, уровни доступа)
В совокупности TE и MLS образуют MAC (Mandatory Access Control), а он уже образует часть механизма ABAC (Attribute-Based Access Control) позволяя сформировать сложные политики доступов.
Команды и утилиты
Статья получилась довольно большой, по этому постараюсь кратко пройтись по основным утилитам которые связаны с правами.
ls
Просмотр списка файлов и директорий с правами:
ls -l
Пример вывода `ls -l` в Fedora Linux
gtosss@laptop-dc:~/example$ ls -l total 4 drwxr-xr-x. 1 gtosss gtosss 0 Apr 21 13:52 first-dir -rw-r--r--. 1 gtosss gtosss 13 Apr 21 13:57 first.txt drwxr-xr-x. 1 gtosss gtosss 0 Apr 21 13:53 second-dir -rw-r--r--. 1 gtosss gtosss 0 Apr 21 13:52 second.text
Если нужно увидеть так же скрытые:
ls -la

Тип (так же часто называют флагом) может быть одним из:
-— файлd— директория (directory)l— символическая ссылка (symbolic link)b— блочное устройство (block device); например жесткий дискc— символьное устройство (character device); например динамик. Довольно подробно описывается в англоязычной википедии.p— канал, устройство fifo (fifo device)s— Unix сокет (unix domain socket)
Пользователь/группа/остальные — подразумевается имя пользователя/группы который является владельцем файла. По умолчанию владелец это тот кто создал файл, но его можно изменить командой chwon. Остальные, это все кто не является владельцем файла.
SELinux индикатор — на этом месте может быть 3 варианта:
.— Файл имеет SELinux-контекст+— Файл имеет ACL (Access Control List)(пусто) — Ни SELinux-контекста, ни ACL
Кто хочет копнуть глубже
Если подсмотреть исходный код команды ls в репозитории GNU coreutils, можно увидеть в каких случаях выводиться точка или какой-то еще символ:
if (! any_has_acl) modebuf[10] = '\0'; else if (f->acl_type == ACL_T_SELINUX_ONLY) modebuf[10] = '.'; else if (f->acl_type == ACL_T_YES) modebuf[10] = '+';
Массив modebuf это как раз строка которая выводиться в результате ls -l:
- r w x r - x r - x . ↑ 0 1 2 3 4 5 6 7 8 9 10
По индексу 10 будет назначено:
пустота — если нет никакого ACL
.— если отработала проверка на равенствоACL_T_SELINUX_ONLY, то есть файл имеет SELinux-контекст+— если отработала проверка на равенствоACL_T_YES, то есть файл имеет POSIX ACL (выставленный командойsetfacl)
Просмотр UID/GID (User/Group ID) числами
ls -ln
Показать SELinux-контекст
ls -lZ
stat
Команда stat возвращает подробную информацию о файле/директории, в нем можно увидеть: UNIX-права (все 9 бит + 3 специальных), SELinux контекст и другие данные.
Рассмотрим сразу на примере:
stat example
gtosss@laptop-dc:~$ stat example File: example Size: 78 Blocks: 0 IO Block: 4096 directory Device: 0,44 Inode: 3243310 Links: 1 Access: (0755/drwxr-xr-x) Uid: ( 1000/ gtosss) Gid: ( 1000/ gtosss) Context: unconfined_u:object_r:user_home_t:s0 Access: 2026-04-23 19:24:34.852196358 -0400 Modify: 2026-04-21 13:53:02.703032629 -0400 Change: 2026-04-21 13:53:02.703032629 -0400 Birth: 2026-04-21 13:52:34.648258436 -0400
Здесь к правам относиться:
Access: (0755/drwxr-xr-x) Uid: ( 1000/ gtosss) Gid: ( 1000/ gtosss) Context: unconfined_u:object_r:user_home_t:s0
В текущей статье уже был разбор всех обозначений, по этому коротко:
0755/drwxr-xr-x— отображает сначала восьмеричную нотацию (с отображением специального бита), затем символьную.Uid: ( 1000/ gtosss) Gid: ( 1000/ gtosss)— пользователь и группа с их ID.unconfined_u:object_r:user_home_t:s0— SELinux контекст.
chown
Название команды chwon происходит от английского change owner. Шаблон команды выглядит так:
chown [опции] владелец[:группа] файл
Смена пользователя-владельца и группы-владельца.
chwon username:groupname directory-or-file
Данная команда установит в качестве владельца пользователя username и группу groupname для директории или файла directory-or-file.
Смена только пользователя-владельца:
chown username file.txt
Смена только группы-владельца:
chown :group file.txt
Рекурсивная для директорий. Сменить владельца для директории и всего содержимого:
chown -R username dirname
chgrp
По аналогии с chown меняет группу. Эквивалент chown :groupname somefile.txt = chgrp groupname somefile.txt.
chmod
Название команды chmod происходит от английского change mod. Шаблон команды выглядит так:
chmod [options] mode[,mode] file1 [file2 ...]
Команда очень гибкая и имеет много разных вариантов работы. Все их разбирать не буду, вместо этого оставлю ссылки, которые делают разбор этой темы более ёмко.
Оставлю только самый короткий и универсальный пример в формате с восьмеричной нотацией (см “Шпаргалка: Восьмеричная, Бинарная, Символьная”).
Рекурсивно раздать чтение и запись пользователю и группе. Чтение всем остальным.
chmod -R 664 somedir
Выдать все права только пользователю-владельцу.
chmod 700 somefile
И на всякий случай относительный режим. Тут нужно вспомнить про сокращение ugo:
u — user
g — group
o — other
Дать юзеру и группе права на чтение:
chmod u+r g+r
Ссылки где больше информации по `chmod`
В целом если вы прочитали статью вы полностью готовы к любой заметке по использованию команды, вот несколько полезных
ps
Показывает текущие процессы, но в контексте данной стать имеет смысл обратить внимание на флаг -Z:
ps -Z
Отобразит список процессов и SELinux контекст.
Сравнение `ps` и `ps -Z`
gtosss@laptop-dc:~$ ps PID TTY TIME CMD 2873 pts/0 00:00:00 bash 3191 pts/0 00:00:00 ps
gtosss@laptop-dc:~$ ps -Z LABEL PID TTY TIME CMD unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2873 pts/0 00:00:00 bash unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3200 pts/0 00:00:00 ps
id
Вывод информации об учетной записи пользователя, так же поддерживает флаг -Z:
id -Z
Сравнение `id` и `id -Z`
gtosss@laptop-dc:~$ id uid=1000(gtosss) gid=1000(gtosss) groups=1000(gtosss),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
gtosss@laptop-dc:~$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
find
Команда поиска. По шаблону: find path [expression]. Данная команда умеет осуществлять поиск по правам или владельцу:
Ищем в директории /temp файлы принадлежащие пользователю alice:
find /tmp -type f -user alice
Ищем во всей системе файлы со специальным битом SUID:
find / -perm -4000
Минус в -4000 — значит что поиск не строго соответствует критерию, то есть будут найдены права: 4755, 4777 и тд.
Ищем файлы у которых назначены все права всем.
find / -perm 777
Немного о безопасности (чем опасен 777)
Совсем немного расскажу, в чём главная опасность файлов, которым назначены все права (777). Такой файл любой желающий может изменить и выполнить. А если он ещё и автоматически выполняется каким-то системным процессом, это приведёт к полному захвату сервера злоумышленником. Если злоумышленник смог перебором (брутфорсом) или как-то ещё получить SSH-доступ к серверу, при этом не имея прав суперпользователя, самый простой путь атаки будет выглядеть следующим образом:
echo ' /* код злоумышленника */ ' > /path/to/script.sh
Но также в вопросах безопасности важную роль играет защита от самого же себя. Очень часто аварии и инциденты происходят вовсе не по вине злоумышленников, а по неосторожности или из-за ошибки. Человеческий фактор главная угроза любой системе. Человек может сам того не заметив, случайно выполнить скрипт злоумышленника. Правильно назначенные привилегии и права не позволят скрипту, в котором есть ошибка или вредоносный код, удалить или сломать что-то, что ему не положено. Отсюда и возникает принцип наименьших привилегий.
Полезные ссылки
Спасибо всем кто подписывается в телеге — это очень мотивирует делиться своим опытом и мнением. Помимо технических статей я так же высказываюсь на актуальные темы.
Комментарии (5)

Xelld
24.04.2026 17:58А неплохо получилось.
Только аналогии по selinux больше запутают, чем помогут новичку, выглядит не очень корректно.
Возможно стоит добавить про само управление метками selinux, атрибуты (тот же immutable).

gtosss Автор
24.04.2026 17:58На самом деле примерно половина того, что хотелось рассказать, а уже вышло прилично текста. Думаю в отдельную статью вынести некоторые темы, например POSIX ACL, еще думаю стоит схематично описать как устроены процессы linux и как они наследуют права/владельца/группу и прочее, еще туда же umask. Да и про модель Белла-Лападулы хотя бы уровня главного принципа No Read Up, No Write Down хотелось бы рассказать. Короче тема объменая, побоялся увязнуть еще на несколько дней написания и решил без фанатизма обпуликовать текущую версию, хотя бы узнать на сколько зайдет.
obir
Лет 20-25 назад Ваша статья была бы актуальна как никогда (когда деревья были большие). Сейчас новички получат тот же пакет знаний, используя пресловутый FuckAI, но не задумываясь, как это всё "под капотом" сложено.
gtosss Автор
Да, понимаю это. Но все равно есть те кто не ограничивается поверхностным ответом нейронок и отдает предпочтение литературе, статьям и документации.
А еще, нейронки лениво дозируют информацию из своих весов, и что бы получить подробные ответы, нужно знать что спрашивать, без каркаса фундаментальных знаний — спрашивать-то нечего.