Помню когда тема о правах доступа в 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; политика targeted из коробки

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-профили (hardened/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

Каждому процессу и файлу — метка вида user:role:type:level; решение по матрице политик (type enforcement)

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) для директорий

Права

Что можно

---

ничего

r--

только увидеть имена файлов (без деталей)

--x

войти (cd), обращаться к файлам по известному имени

r-x

полноценное чтение: ls, cd, чтение файлов

-wx

создавать/удалять файлы (по известному имени), но не видеть список

rwx

полный доступ: просмотр, чтение, создание, удаление

Шпаргалка: Символьная нотация (symbolic notation) для файлов

Права

Что можно

---

ничего

r--

только чтение

-w-

только запись (перезаписать/дополнить), но не прочитать содержимое

--x

только выполнение

rw-

чтение и запись (типичный набор для обычных файлов)

r-x

чтение и выполнение (типичный набор для программ/скриптов)

-wx

запись и выполнение, но нельзя прочитать

rwx

полный доступ

Восьмеричная нотация

Права могут отображаться в числовом формате (восьмеричном).

Для тех, кому нужно полное понимание

Восьмеричная система счисления выбрана не случайно. У нас есть 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

w + x

запись + выполнение

5

4 + 1

r + x

чтение + выполнение

6

4 + 2

r + w

чтение + запись

7

4 + 2 + 1

r + w + x

чтение + запись + выполнение

Но 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

Права

Описание

0

000

---

Нет прав

1

001

--x

Только выполнение

2

010

-w-

Только запись

3

011

-wx

Запись + выполнение

4

100

r--

Только чтение

5

101

r-x

Чтение + выполнение

6

110

rw-

Чтение + запись

7

111

rwx

Все права

Шпаргалка: Восьмеричная (Популярные комбинации)

Octal

Права

Описание

777

rwxrwxrwx

Все права для всех

755

rwxr-xr-x

Владелец — всё; остальные — чтение и запуск

750

rwxr-x---

Владелец — всё; группа — чтение и запуск

700

rwx------

Все права только владельцу

644

rw-r--r--

Владелец — чтение/запись; остальные — чтение

640

rw-r-----

Владелец — чтение/запись; группа — чтение

600

rw-------

Чтение/запись только владельцу

400

r--------

Только чтение только владельцу

Специальные биты

Этот раздел для более подготовленных и уверенных пользователей linux, у новичков останутся вопросы. Описываю его в формате памятки. Если есть запрос на более детальное объяснение, дайте знать в комментах — в планах отдельная статья.

Выше мы рассмотрели стандартную модель прав в которых используется 9 бит для назначения прав. Но есть ситуации когда их не хватает. Для таких ситуаций предусмотрены 3 дополнительных (специальных) бита, у каждого свое название и особенности:

  • SUID (от анг. Set User ID) — предназначен для исполняемых файлов, если установлен, процесс будет запущен от имени пользователя-владельца файла (а не от имени запускающего как в случае с x). Это полезно когда нужно позволить временно выполнить процесс от имени супер-пользователя, но вместе с тем опасно с точки зрения безопасности.

  • SGID (от анг. Set Group ID) — для исполняемых файлов работает аналогично SUID, но устанавливает группу-владельца. Для директорий — новые файлы наследуют группу директории.

  • Sticky — для директорий: запрещает удаление и переименование чужих файлов. Удалить/переименовать файл может только его владелец, владелец директории или root.

Шпаргалка: Специальные биты

Octal

Бит

Описание

4000

SUID

Запуск от имени владельца файла

2000

SGID

Запуск от имени группы / наследование группы

1000

Sticky

Удалять файлы в каталоге может только владелец

Несколько примеров со спецбитами:

Octal

Символьная

Пример использования

4755

rwsr-xr-x

/usr/bin/passwd (SUID)

2755

rwxr-sr-x

Каталог с SGID

1777

rwxrwxrwt

/tmp (Sticky bit)

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

Расшифровка
Расшифровка

Тип (так же часто называют флагом) может быть одним из:

Пользователь/группа/остальные — подразумевается имя пользователя/группы который является владельцем файла. По умолчанию владелец это тот кто создал файл, но его можно изменить командой 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)

Документация о выводе утилиты ls (англ.)

Вопрос на superuser.com о точке (англ.)

Просмотр 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)


  1. obir
    24.04.2026 17:58

    Лет 20-25 назад Ваша статья была бы актуальна как никогда (когда деревья были большие). Сейчас новички получат тот же пакет знаний, используя пресловутый FuckAI, но не задумываясь, как это всё "под капотом" сложено.


    1. gtosss Автор
      24.04.2026 17:58

      Да, понимаю это. Но все равно есть те кто не ограничивается поверхностным ответом нейронок и отдает предпочтение литературе, статьям и документации.

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


  1. Xelld
    24.04.2026 17:58

    А неплохо получилось.

    Только аналогии по selinux больше запутают, чем помогут новичку, выглядит не очень корректно.

    Возможно стоит добавить про само управление метками selinux, атрибуты (тот же immutable).


    1. gtosss Автор
      24.04.2026 17:58

      На самом деле примерно половина того, что хотелось рассказать, а уже вышло прилично текста. Думаю в отдельную статью вынести некоторые темы, например POSIX ACL, еще думаю стоит схематично описать как устроены процессы linux и как они наследуют права/владельца/группу и прочее, еще туда же umask. Да и про модель Белла-Лападулы хотя бы уровня главного принципа No Read Up, No Write Down хотелось бы рассказать. Короче тема объменая, побоялся увязнуть еще на несколько дней написания и решил без фанатизма обпуликовать текущую версию, хотя бы узнать на сколько зайдет.


  1. AlexeyZubarev
    24.04.2026 17:58

    Отличный tutorial