Помню когда тема о правах доступа в 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
Но также в вопросах безопасности важную роль играет защита от самого же себя. Очень часто аварии и инциденты происходят вовсе не по вине злоумышленников, а по неосторожности или из-за ошибки. Человеческий фактор главная угроза любой системе. Человек может сам того не заметив, случайно выполнить скрипт злоумышленника. Правильно назначенные привилегии и права не позволят скрипту, в котором есть ошибка или вредоносный код, удалить или сломать что-то, что ему не положено. Отсюда и возникает принцип наименьших привилегий.
Полезные ссылки
Спасибо всем кто подписывается в телеге — это очень мотивирует делиться своим опытом и мнением. Помимо технических статей я так же высказываюсь на актуальные темы.