Права доступа в Linux и что такое "Классическая модель разрешений прав доступа для Linux".

 Блог— конспект, «Классическая модель разрешений Linux», рассмотрены основные принципы модели распределения прав операционной системы Linux, материал сопровождается примерами в качестве стенда используется дистрибутив ALT Linux.

Ведение

 Linux позаимствовал у Unix простую модель прав доступа к файлам, обозначив её как «Классическая модель разрешений Linux», которая является эффективным, гибким и относительно простым инструментом для понимания и дизайна безопасности файлов и каталогов.

Содержание

Классическая модель разрешений Linux.

 В OC Linux у каждого создаваемого файла и каталога есть два владельца — пользователь и группа. Владельцем файла становится зарегистрированный в системе пользователь, создатель файла, и группа в которую входит этот пользователь. Каждый раз когда система обращается к файлу происходит сопоставление: является ли тот кто пытается получить доступ к файлу его владельцем (owner) с правами владельца, если нет, система проверяет членство пользователя в группе (group) и права этой группы, если нет, происходит сопоставление прав для других (other), после чего принимается решение о правах доступа к файлу или каталогу для пользователя. Ещё одно условие при получение прав разрешения наличие - UID и GID, соответственно, для пользователя и группы. Когда пользователь входит в систему ему присваивается, вернее он уже есть при создании учётной записи, уникальный идентификатор — UID, следовательно все процессы, которые выполняет пользователь, система будет сопоставлять с его UID, определяя для этого UID, права разрешений для доступа к файлу и каталогу, узнать UID пользователя можно командой id.

 При подготовке статьи блога, в примерах, использовались следующие команды и обозначения принятые в OC Linux.

Таблица 1
mod_0

Пример 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 каждый файл или каталог имеет три (триада) правил для разрешений доступа к файлам и каталогам в структуре дерева папок и файлов после установки из коробки.

Пример 2.1

mod1

mod2

 Теперь рассмотрим и расшифруем полное значение выходных данных файла, созданного в домашнем каталоге пользователя и команды, которые участвовали в примере, а также рассмотрим использования оператора '=' для установки прав доступа к файлу.

Пример 2.2

mod3

mod3

 Следующие примеры демонстрируют назначение, по умолчанию, прав при создании файлов и каталогов в операционной системе Linux —  набор прав для файлов 644, набор прав каталогов 755.

Пример 2.3
 $ 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 - это плохое решение т.к модель разрешения будет полностью отключена.

Модель разрешений доступа для каталога.

 Как и файлы, каталоги имеют полный набор атрибутов и флагов безопасности, но в отличие от файлов, для каталогов атрибуты и флаги имеют особое значение. Для понимания возможности разрешений прав на каталоги рассмотрим и разберём несколько примеров, триады 'o' в лабораторной работе т.к теория не может показать все особенности работы с каталогами.

Пример 3

mod5

mod6

mod7

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

Пример 4a

mod9

Специальные права доступа к файлам и каталогам SUID, SGID, Sticky Bit.

 Пользователи Linux войдя при регистрации в систему, запускают процесс доступа к файлам и каталогам системы, используя свой UID см.выше. Каждый каталог и файл в системе имеет триаду прав: | владелец | группа | другие. При необходимости в каждой тройке прав, бит 'x', при некоторых обстоятельствах, может меняться на специальный бит, который меняет параметры доступа к каталогу или файлу. Ниже приводится синтаксис написания специальных атрибутов доступа в символьном и цифровом написании.

  • SUID для владельца 'u' - синтаксис:
    • 's' - если стоял бит 'x'
    • 'S' - если Не стоял бит 'x'
    • 4  - в числовом написании
  • SGID для группы 'g' - синтаксист:
    • 's' - если стоял бит 'x'
    • 'S' - если Не стоял бит 'x'
    • 2  - в числовом написании
  • Sticky Bit для остальных 'o' - синтаксист:
    • 't' - если стоял бит 'x'
    • 'T' - если Не стоял бит 'x'
    • 1  - в числовом написании

 Термин маскировка бита соответствует тому, что перед установкой спец.бита в этой позиции уже стоит флаг 'x' и на него накладывается спец. бит.

 Атрибут SUID — когда файл выполняется, UID времени выполнения устанавливается для владельца файла, а не для пользователя, запустившего файл.

 Рассмотрим пример использования SUID, есть такая известная команда ping, надеюсь она хорошо всем известна и не требует пояснений, так вот, обращение к ней должно быть доступно любому зарегистрированному пользователю системы, что бы это осуществить применяют атрибут SUID, в качестве стенда использовалась Ubuntu, Пример 5.

Пример 5

mod10

 В OC Linux существует несколько десятков SUID файлов, они являются причиной многих эксплойтов 'переполнения буфера', SUID файлы подвергаются строгому аудиту безопасности, захват бита 'мошеннической' программой - нарушение безопасности.

Атрибут SGID — изменяет правила наследования для новых файлов в каталоге, файлы созданные в этом каталоге будут иметь привилегированного владельца, а не права первичной группы пользователя создавшего файл. Подкаталоги и созданные файлы, наследует SGID владельца корневого каталога, в качестве примера приведём фрагмент кода из лабораторной работы Пример 5a.

Пример 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 
$ eustace] ls -la /home/alex/dir
drwxr-xrwx .
drwx-----x ..
-rw-r--r-- alex alex file
-rw-r--r-- eustace eustace file1
↑Пользователи Alex и Eustace создали файлы в катологе 'dir' владелеца Alex, все созднные файлы имеют разные группы.
↓Alex установил бит 's' на каталог 'dir', Eustace создал файл 'file2' в  'dir',  'file2'  в каталоге 'dir' принадлежит группе Alex
 $ alex] chmod g+s dir
$ alex] ls -la /home/alex/dir drwxr-srwx 2 alex alex . drwxr-xr-x 10 alex alex .. -rw-r--r-- 1 alex alex file
-rw-r--r-- 1 eustace eustace file1 -rw-r--r-- 1 eustace alex file2
...
 $ vim /home/alex/dir/file2
$ ls -la /home/alex/dir drwxr-srwx 2 alex alex . drwxr-xr-x 10 alex alex .. -rw-r--r-- 1 alex alex file -rw-r--r-- 1 eustace eustace file1 -rw-r--r-- 1 eustace alex 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.

Пример 5c

mod11

mod12

mod13

 В некоторых случаях требуется одной командой назначит атрибуты SUID, SGID, Sticky Bit каталогам и файлам, для этих задач собраны наборы флагов объединённых одной цифрой Таблица 2, для наглядности синтаксиса Пример 5d.

Таблица 2

mod14

Пример 5d
$ mkdir dir
$ ls -ld dir
drwxr-xr-x
$ chmod 7755 dir
$ ls -ld dir
drwsrwsrwt
$ mkdir dir
$ ls -ld dir
drwxr-xr-x
$ chmod 6755 dir
$ ls -ld dir
drwsr-sr-x
$ mkdir dir
$ ls -ld dir
drwxr-xr-x
$ chmod 5755 dir
$ ls -ld dir
drwsr-xr-t
$ mkdir dir
$ ls -ld dir
drwxr-xr-x
$ chmod 3755 dir
$ ls -ld dir
drwxr-sr-t
$ mkdir dir
$ ls -ld dir
drwxr-xr-x
$ chmod 0755 dir
$ ls -ld dir
drwxr-xr-x

Лабораторная работа

Условие

 В системе зарегистрированы два пользователя 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
Лабораторная работа, действия с каталогом в группе остальные 'o'.
 $ alex] groups
alex ...
...
...
 $ eustace] groups
eustace
$ eustace] ls -la /home/alex
...
...
Владелец 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 .. 
-rw-r--r-- file
 $ eustace] ls -l /home/alex/dir 
-rw-r--r-- 1 alex alex   file
...
...
...
...
Владелец создал каталог 'dir' и
  разместил в нём файл 'file'
 Пользователь eustace может читать, что
  находится в каталоге 'dir'
 $ alex] chmod o-r dir
$ alex] ls -la dir
drwxr-x--x  .
drwxr-xr-x ..
-rw-r--r-- file
 $ eustace] ls -la /home/alex/dir
'/home/alex/dir': Отказано в доступе
...
...
...
Владелец снял флаг 'r'с каталога 'dir'
  в триаде 'o'
Пользователь eustace не может читать, что
  находится в каталоге 'dir'
 $ alex] chmod o+r-x dir
$ alex] ls -la dir
drwxr-xr--  .
drwxr-xr-x  ..
-rw-r--r--  file
...
...
 $ eustace] ls -la /home/alex/dir
'/home/alex/dir/file': Отказано в доступе
'/home/alex/dir/.': Отказано в доступе
'/home/alex/dir/..': Отказано в доступе
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? file
Владелец установил флаг 'r'и снял
флаг 'x' с каталога 'dir' в триаде 'o'
Пользователь не может читать, что находится
в каталоге 'dir'
 $ alex] chmod o+w dir
$ alex] ls -la dir
$ alex] ls -la dir
drwxr-xrw-  .
drwx-----x  ..
-rw-r--r--  file
...
 $ eustace] ls -la /home/alex/dir
': Отказано в доступе
': Отказано в доступе
': Отказано в доступе
d????????? ? ? ? ?   ? .
d????????? ? ? ? ?   ? ..
-????????? ? ? ? ?   ? file
Владелец добавил для каталога
'dir' флаг 'w' в триаде 'o"
Пользователь не может читать, что находится
в каталоге 'dir'
 $ alex] chmod o-r+x dir
$ alex] ls -la dir
drwxr-x-wx .
drwxr-xr-x ..
-rw-r--r--  file
 $ eustace] ls -la /home/alex/dir
'/home/alex/dir': Отказано в доступе ...
...
...
Владелец снял флаг 'r' и добавил флаг 'x'
для каталога 'dir' в триаде 'o'
Пользователь не может читать, что внутри
каталога 'dir'.
 $ alex] chmod o+r dir
$ alex] ls -la dir
drwxr-xrwx   .
drwxr-xr-x ..
-rw-r--r--   alex alex file
 $ eustace] ls -la /home/alex/dir
drwxr-xrwx  .
drwx-----x  ..
-rw-r--r--  alex alex file
...
Владелец установил '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
$ cat /home/alex/dir/file1 Привет я Eustace
...
$ 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.