Права доступа в Linux и что такое "Классическая модель разрешений прав доступа для Linux".
Введение.
Блог— конспект, «Классическая модель разрешений Linux», рассмотрены основные принципы модели распределения прав операционной системы Linux, материал сопровождается примерами в качестве стенда используется дистрибутив ALT Linux.
Linux позаимствовал у Unix простую модель прав доступа к файлам, обозначив её как «Классическая модель разрешений Linux», которая является эффективным, гибким и относительно простым инструментом для понимания и дизайна безопасности файлов и каталогов.
Содержание
- Введение
- Классическая модель разрешений Linux
- Синтаксис классической модели разрешений Linux
- Модель разрешений доступа для каталога
- Использование umask
- Специальные права доступа к файлам и каталогам
- Лабораторная работа
- Заключение
Классическая модель разрешений Linux.
В OC Linux у каждого создаваемого файла и каталога есть два владельца — пользователь и группа. Владельцем файла становится зарегистрированный в системе пользователь, создатель файла, и группа в которую входит этот пользователь. Каждый раз когда система обращается к файлу происходит сопоставление: является ли тот кто пытается получить доступ к файлу его владельцем (owner) с правами владельца, если нет, система проверяет членство пользователя в группе (group) и права этой группы, если нет, происходит сопоставление прав для других (other), после чего принимается решение о правах доступа к файлу или каталогу для пользователя. Ещё одно условие при получение прав разрешения наличие - UID и GID, соответственно, для пользователя и группы. Когда пользователь входит в систему ему присваивается, вернее он уже есть при создании учётной записи, уникальный идентификатор — UID, следовательно все процессы, которые выполняет пользователь, система будет сопоставлять с его UID, определяя для этого UID, права разрешений для доступа к файлу и каталогу, узнать UID пользователя можно командой id.
При подготовке статьи блога, в примерах, использовались следующие команды и обозначения принятые в OC Linux.
![]() |
Пример 1
$ id usertest uid=500(usertest) gid=500(usertest) группы=500(usertest)
$ groups usertest
usertest : usertest uucp proc cdrom floppy cdwriter audio radio scanner xgrp camera vboxusers video sambashare
GID — группа пользователя по умолчанию, как правило название GID совпадает с именем UID пользователя и является основной, Пример1, в дальнейшем пользователь может быть членом многих групп, но основная группа будет главной, такие правила. Для просмотра членства в группе используется команда groups.
кроме пользователей и групп создаваемых администратором, сушествуют системные пользователи и группы их числовой диапазон UID и GID, как правило начинается от 0-499, системные пользователи и группы выполняют управление служебными програми такими как, FTP, Apache, MySQL... Пример 2;
Пример 2
$ id root uid=0(root) gid=0(root)
$ id apache uid=96(apache) gid=96(apache) группы=96(apache)
$ groups root root : root bin daemon sys adm disk wheel pro
Синтаксис классической модели разрешений Linux.
В ОС Linux каждый файл или каталог имеет три (триада) правил для разрешений доступа к файлам и каталогам в структуре дерева папок и файлов после установки из коробки.
![]() |
Теперь рассмотрим и расшифруем полное значение выходных данных файла, созданного в домашнем каталоге пользователя и команды, которые участвовали в примере, а также рассмотрим использования оператора '=' для установки прав доступа к файлу.
Следующие примеры демонстрируют назначение, по умолчанию, прав при создании файлов и каталогов в операционной системе Linux — набор прав для файлов 644, набор прав каталогов 755.
$ touch file $ ls -l file -rw-r--r-- 1 user user 0 мая 31 12:43 file |
$ mkdir dir $ ls -ld dir drwxr-xr-x 2 user user 4096 мая 31 12:47 dir |
отключить модель разрешений можно установив восьмеричное число 777 или его аналог, символического обозначения ugo+rwx - это плохое решение т.к модель разрешения будет полностью отключена
суперпользователь, root, имеет право менять разрешения доступа для любого файла или каталога, пользователь менять права доступа файлов и каталогов только в своём профиле или при наличии делегированных права
Модель разрешений доступа для каталога.
Как и файлы, каталоги имеют полный набор атрибутов и флагов безопасности, но в отличие от файлов, для каталогов атрибуты и флаги имеют особое значение. Для понимания возможности разрешений прав на каталоги рассмотрим и разберём несколько примеров, триады 'o' в лабораторной работе т.к теория не может показать все особенности работы с каталогами.
Использование umask.
В Linux umask контролирует права доступа для вновь создаваемых файлов определяя, наложением своей маски, какие разрешения следует отключить, параметр umask указывается в файле /etc/profile. Структура маски идентична структуре прав доступа к файлам, umask может быть представлен в двоичной, восьмеричной или символьной записи. Команда umask позволяет установить маску во всех трех триадах. Понимание для чего нужна маска исходит из того, что изначально при создании пользователем каталога ему, каталогу, присваиваются права доступа 0777, а файлу 0666 из этого становится очевидно — безопасность отключена, любой пользователь может иметь полный доступ к каталогам и файлам системы см.Пример 2.1. Маска устраняет этот недостаток ограничивая разрешения файла или каталога при его создании, накладывая на них свои права. В большинстве системах Linux значение маски определено следующим значением:
Пример 4
$ umask
0022 // отобразить в цифровом виде
$ umask -S // отобразить в виде символов
u=rwx,g=rx,o=rx
Зная значение маски, по умолчанию, можно определить разрешение для создаваемых каталогов и файлов, накладывая параметр маски на соответстующие значения: для каталога получаем ограничения 0777-0022=0755 для файла эти ограничения будут составлять 0666-0022=0644, таким образом при создании пользователем каталога или файла права доступа будут соответственно 755 и 644.
Значение маски указывается в файле /etc/profile — применяется для всей системы в целом, но если требуется применить этот параметр для отдельного каталога, то можно воспользоваться следующими рекомендациями, поместив выбранный набор в требуемый каталог.
Специальные права доступа к файлам и каталогам SUID, SGID, Sticky Bit.
Пользователи Linux войдя при регистрации в систему, запускают процесс доступа к файлам и каталогам системы, используя свой UID см.выше. Каждый каталог и файл в системе имеет триаду прав: | владелец | группа | другие. При необходимости в каждой тройке прав, бит 'x', при некоторых обстоятельствах, может меняться на специальный бит, который меняет параметры доступа к каталогу или файлу. Ниже приводится синтаксис написания специальных атрибутов доступа в символьном и цифровом написании.
- SUID для владельца 'u' - синтаксис:
- 's' - если стоял бит 'x'
- 'S' - если Не стоял бит 'x'
- 4 - в числовом написании
- SGID для группы 'g' - синтаксист:
-
- 's' - если стоял бит 'x'
- 'S' - если Не стоял бит 'x'
- 2 - в числовом написании
- 's' - если стоял бит 'x'
- Sticky Bit для остальных 'o' - синтаксист:
-
- 't' - если стоял бит 'x'
- 'T' - если Не стоял бит 'x'
- 1 - в числовом написании
Термин маскировка бита соответствует тому, что перед установкой спец.бита в этой позиции уже стоит флаг 'x' и на него накладывается спец. бит.
Атрибут SUID — когда файл выполняется, UID времени выполнения устанавливается для владельца файла, а не для пользователя, запустившего файл.
Рассмотрим пример использования SUID, есть такая известная команда ping, надеюсь она хорошо всем известна и не требует пояснений, так вот, обращение к ней должно быть доступно любому зарегистрированному пользователю системы, что бы это осуществить применяют атрибут SUID, в качестве стенда использовалась Ubuntu, Пример 5.
В OC Linux существует несколько десятков SUID файлов, они являются причиной многих эксплойтов 'переполнения буфера', SUID файлы подвергаются строгому аудиту безопасности, захват бита 'мошеннической' программой - нарушение безопасности.
Атрибут SGID — изменяет правила наследования для новых файлов в каталоге, файлы созданные в этом каталоге будут иметь привилегированного владельца, а не права первичной группы пользователя создавшего файл. Подкаталоги и созданные файлы, наследует SGID владельца корневого каталога, в качестве примера приведём фрагмент кода из лабораторной работы Пример 5a.
$ alex] ls -la dir drwxr-xrwx . drwxr-xr-x .. -rw-r--r-- 1 alex alex file -rw-r--r-- 1 eustace eustace file1 |
$ eustace] vim /home/alex/dir/file1 |
↑Пользователи Alex и Eustace создали файлы в катологе 'dir' владелеца Alex, все созднные файлы имеют разные группы. | |
↓Alex установил бит 's' на каталог 'dir', Eustace создал файл 'file2' в 'dir', 'file2' в каталоге 'dir' принадлежит группе Alex | |
$ alex] chmod g+s dir |
$ vim /home/alex/dir/file2 |
SGID каталоги подвергаются строгому аудиту безопасности, захват бита 'мошеннической' программой - нарушение безопасности.
Атрибут Sticky bit — запрещает удаление файлов кем-либо кроме владельца файла, владельца каталога и пользователя root, это исключение можно увидеть рассмотрев, Пример 5b, каталог /tmp расположенного в структуре папок ОС Linux.
Пример 5b
# cd / # pwd / # ls -ld tmp drwxrwxrwt 14 root root tmp
Sticky bit получил свое название в ранних системах Linux до виртуальной памяти с постраничной загрузкой. Если был установлен Sticky bit исполняемого файла, то после выхода из программы копия его текстового сегмента сохранялась в области подкачки системы. Она, копия, «оставалась» для следующего использования. Эта функция использовалась для ускорения загрузки часто запускаемых программ. Теперь применяется только как защита файла от удаления другими пользователем
Все выше перечисленные примеры представлены в символьном виде, но они могут быть записаны и в числовом виде, с учётом синтаксиса это выглядит так Пример 5c.
В некоторых случаях требуется одной командой назначит атрибуты SUID, SGID, Sticky Bit каталогам и файлам, для этих задач собраны наборы флагов объединённых одной цифрой Таблица 2, для наглядности синтаксиса Пример 5d.
$ mkdir dir |
$ mkdir dir |
$ mkdir dir |
$ mkdir dir |
$ mkdir dir |
Лабораторная работа
Условие
В системе зарегистрированы два пользователя alex (Алекс) и eustace (Юстас), пользователь alex управляет правами доступа к своим папкам и файлам, пользователь eustace пытается совершить вход в каталог alex, и выполнить доступные для своего GID операции чтения, запись, создания, удаления и запуск файла в каталоге, в качестве пoльзователя не принадлежащего к группе aslex. Принятые обозначения: владелец - $ alex]; пользователь - $ eustace], для оптимизации строк, некоторые фрагменты кода опущены: дата, время, размер, количество ссылок и т.д... Конечно, человеку не сведущему будут не понятны наши записи, но мы то уже знаем о чём идёт речь, так же как наш руководитель Ш.
По умолчанию домашние каталоги пользователей имеют права доступа 701, для демонстрации примеров лабораторной работы изменим эти права на 755, стенд собран на ALT Linux
# ls -ld alex drwxr-xr-x 10 alex alex 4096 июн 2 14:59 alex
Команды для работы:
$ ls
-l подробный список
-x выстраивает по вертик.
-F / у каталогов
-a все файлы и скрытые
-al подробно все файлы и скрытые
-r обратный порядок
-t последние изменения
-R выводит подкаталоги
$ groups
$ sudo groupadd
$ sudo groupdel
$ getent group grp
# chown
$ chgrp
$ whoami
# chmod
$ umask
$ usermod
sudo groupmems -g grp -a user \\добавить в группу grp user
sudo groupmems -g grp -d user \\удалить из группы grp user
sudo groupmems -g grp -l \\список участников в группы grp
sudo groupmems -g grp -p user \\очистить группу grp
$ alex] groups |
$ eustace] groups |
Владелец alex один в группе 'alex' | Пользователь может читать , что находится в каталоге домашней папки 'alex' . |
$ alex] mkdir /home/alex/dir $ alex] touch /home/alex/dir/file $ alex] ls -la /home/alex/dir drwxr-xr-x . drwxr-xr-x .. |
$ eustace] ls -l /home/alex/dir -rw-r--r-- 1 alex alex file |
Владелец создал каталог 'dir' и разместил в нём файл 'file' |
Пользователь eustace может читать, что находится в каталоге 'dir' |
$ alex] chmod o-r dir |
$ eustace] ls -la /home/alex/dir |
Владелец снял флаг 'r'с каталога 'dir' в триаде 'o' |
Пользователь eustace не может читать, что находится в каталоге 'dir' |
$ alex] chmod o+r-x dir |
$ eustace] ls -la /home/alex/dir |
Владелец установил флаг 'r'и снял флаг 'x' с каталога 'dir' в триаде 'o' |
Пользователь не может читать, что находится в каталоге 'dir' |
$ alex] chmod o+w dir |
$ eustace] ls -la /home/alex/dir |
Владелец добавил для каталога 'dir' флаг 'w' в триаде 'o" |
Пользователь не может читать, что находится в каталоге 'dir' |
$ alex] chmod o-r+x dir |
$ eustace] ls -la /home/alex/dir |
Владелец снял флаг 'r' и добавил флаг 'x' для каталога 'dir' в триаде 'o' |
Пользователь не может читать, что внутри каталога 'dir'. |
$ alex] chmod o+r dir |
$ eustace] ls -la /home/alex/dir |
Владелец установил 'r' для каталога 'dir' | Пользователь может, читать, что находитса в 'dir' |
$ alex] ls -la dir drwxr-xrwx . drwxr-xr-x .. -rw-r--r-- 1 alex alex file -rw-r--r-- 1 eustace eustace file1 |
$ eustace] $ cat /home/alex/dir/file Привет я Alex $ eustace] vim /home/alex/dir/file1 $ eustace] ls -la /home/alex/dir drwxr-xrwx . drwx-----x .. -rw-r--r-- alex alex file -rw-r--r-- eustace eustace file1 |
Владелец читает файл 'file1' созданный пользователем в катологе 'dir' |
Пользователь создаёт файл 'file1' в 'dir' владельца Пользователь читает файл 'file' в 'dir' владельца. |
Заключение.
Вопросы безопасности, где бы вы с ними не сталкивались, упираются в права доступа к каталогам и файлам, если администратор или пользователь не имеет возможности разобраться в тонкостях и особенностях этого механизма, то постоянно будет испытывать трудности при работе в самых неожиданных случаях. Конечно есть более гибкая система контроля прав доступа к файлам и каталогам — ACL основанная на списках контроля доступа, дополняя стандартные права доступа, но классическая модель разрешений Linux — является базовым понятием для управления безопасностью unix систем. В материале блога не были рассмотрены примеры использования флагов: устройств (block), ссылок (link), гнезд (socket), каналов (pipe) ..., т.к на практике, в основном, приходится имеет дело с каталогами и файлами. Примеры из лабораторной работы выполнены с помощью консоли, проще демонстрировать, конечно можно использовать и GUI рабочего стола для управления правами доступа к папкам и файлам в повседневной работе, это особенно удобно для тех кто переходит с OC Windows.