Маркеры доступа как атрибуты процесса в Linux

Процесс в операционной системе является основным активным субъектом, взаимодействующим с окружающими его объектами — файлами и файловыми системами, другими процессами, устройствами и пр.

Возможности процесса выполнять те или иные действия по отношению к другим объектам определяются его специальными свойствами — атрибутами процесса.

Возможности процесса по отношению к объектам, доступ к которым разграничивается при помощи дискреционных механизмов (в частности, к файлам дерева каталогов) определяются значениями его атрибутов, формирующих его DAC-маркер доступа, а именно — атрибутами RUID, RGID, EUID, EGID, см. credentials).

Эффективные идентификаторы EUID (effective user identifier) и EGID (effective group identifier) указывают на «эффективных» пользователя и группу, использующихся дискреционными механизмами для определения прав доступа процесса к файлам и другим объектам согласно назначенному им режиму или списку доступа.

Атрибуты RUID (real user identifier) и RGID (real group identifier) указывают на «настоящих» пользователя и группу, «управляющих» процессом.

Первому процессу пользовательского сеанса (в случае регистрации в системе С использованием алфавитно-цифрового терминала — командному интерпретатору) назначают атрибуты RUID/EUID и RGID/EGID равными идентификаторам зарегистрировавшегося пользователя и его первичной группы. Последующие процессы пользовательского сеанса наследуют значения атрибутов, т. к. порождаются в результате клонирования при помощи fork.

В примере из листинга ниже при помощи команды id показаны значения EUID/EGID пользовательского сеанса и их наследование s от командного интерпретатора, что явным образом подтверждает команда ps.

DAC-маркер доступа процесса—атрибуты RUID, EUID, RGID, EGID

fitz@ubuntu:~$ id

uid=1006(iltz) gid=1008(fitz) группы=1008(fitz)

fitz@ubuntu:~$ PS fo euid,ruid,egid,rgid,user,group,tty,cmd

EUID  RUID   EGID  RGID  USER  GROUP  TT         CMD

1006   1006     1008    1008  fitz        fitz           pts/2   -bash
1006   1006     1008    1008  fitz        fitz           pts/2      \_ ps fo euid,uid,egid,…,tty,cmd

Изменение идентификаторов EUID/EGID процесса происходит при срабатывании механизма неявной передачи полномочий, основанного на дополнительных атрибутах SUID/SGID файлов программ.

При запуске таких программ посредством системного вызова exec атрибуты EUID/EGID запускающего процесса устанавливаются равными идентификаторам UID/GID владельца запускаемой программы.

В результате процесс, в который будет загружена такая программа, будет обладать правами владельца программы, а не правами пользователя, запустившего эту программу.

В листинге ниже приведен типичный пример использования механизма неявной передачи полномочий при выполнении команд passwd и wall. При смене пароля пользователем при помощи программы /usr/bin/passwd ее процесс получает необходимое право записи в файл /etc/shadow (см. листинг выше) в результате передачи полномочий  суперпользователя root (UID=0).

При передаче широковещательного сообщения всем пользователям при помощи /usr/bin/wall необходимо иметь право записи в их файлы устройств /dev/tty*, которое появляется в результате передачи полномочий группы tty (GID=5).

Атрибуты файла SUID/SGID и атрибуты процесса RUID, EUID, RGID, EGID

fitz@ubuntu:~$ who
fitz          pts/0                         2018-11-22 00:52 (:0.0)
fitz          pts/1                          2018-11-22 00:53 (:0.0)
fitz          pts/2                          2018-11-22 01:06 (:0.0)
fitz@ubuntu:~$ ls -la /etc/shadow /dev/pts/*
crw—w—-  1 fitz  tty              136, 2 февр. 14 22:05 /dev/pts/1
crw—w—-  1 fitz  tty              136, 2 февр. 14 22:05 /dev/pts/1
crw—w—-  1 fitz  tty              136, 3 февр. 14 22:18 /dev/pts/2
crw—w—-  1 mike tty            136, 3 февр. 14 22:18 /dev/pts/2
c————  1 root root               5, 2 февр. 8 14:21 /dev/pts/ptmx
-rw-r——  1 root shadow      2595 февр. 14 22:18 /etc/shadow
fitz@ubuntu:~$ ls -l /usr/bin/passwd /usr/bin/wall

-rwsr-xr-x  1   root  root        41284 сент.  13 2018 /usr/bin/passwd
-rwxr-sr-x  1   root tty           18036 марта 30 2018 /usr/bin/wall
fitz@ubuntu:~$ ls -ln /usr/bin/passwd /usr/bin/wall

-rwsr-xr-x  1   0       0             41284 сент. 13 2018 /usr/bin/passwd
-rwxr-sr-x  1   0       5            18036 марта 30 2018 /usr/bin/wall
fltz@ubuntu:~$ ps ft pts/1,pts/2 о pid,ruid,rgid,euid,egid,tty,cmd

PID    RUID   RGID   EUID   EGID   TT               CMD

27883   1006    1008    1006     1008    pts/2          bash
27937    1006    1008    1006            5    pts/2            \_ wall
27124    1006    1008    1006     1008    pts/1          bash
27839   1006    1008           0     1008     pts/1            \_ passwd

По отношению к объектам, доступ к которым ограничивается при помощи мандатных механизмов, возможности процесса определяются значениями его MAC-маркера доступа, а именно — атрибутом мандатной метки LABEL.

Как и RUID/EUID/RGID/EGID, атрибут LABEL назначается первому процессу сеанса пользователя явным образом, а затем наследуется при клонировании процессами-потомками от процессов-родителей.

В примере из листинга ниже при помощи команды id показан атрибут LABEL сеанса пользователя, а при помощи команды ps — его явное наследование от процесса-родителя.

Аналогично изменениям EUID/EGID Процесса, происходящим при запуске SUID-ной/SGID-ной программы, изменение метки LABEL процесса происходит (согласно мандатным правилам ) в системном вызове exec при запуске программы, помеченной соответствующей мандатной меткой файла. Так, например, .при запуске программы /usr/sbin/dhclient с типом dhcpc_exec_t ее мандатной метки в процесс приобретает тип dhcpc_t своей мандатной метки , в результату чего существенно ограничивается в правах доступа к разным объектам операционной системы.

MAC-маркер доступа процесса—мандатная метка selinux

fitz@ubuntu:~$ ssh lich@fedora

lich@fedora’s password:

Last login: Sat Nov 21 14:25:16 2018

[lich@centos ~]$ id -Z

staff_u:staf f_r:staff_t:s0-s0:c0.c1023

[lichgcentos ~]$ ps Zf
LABEL                                                         PID           TTY               STAT        TIME       COMMAND
staf f _u:staff_r:staff_t:s0-s0:c0. c1023  31396 pts/0               Ss               0:00       -bash

staff_u:staff_r:s.taff-.t:s0-s0:c0.c1023  31835   pts/0               R+              0:00          \_ ps Zf

staff_u:staf f _r:staff_t: s0 — s0: c0.c1023 31334 tty2                Ss+             0:00        -bash

[lich@centos ~]$ sesearch -T -t dhcpc_exec_t -c process

Found 19 semantic te rules:
type_transition NetworkManager_t dhcpc_exec_t : process dhcpc_t;

[lich@centos ~]$ ls -Z /usr/sbin/dhclient
-rwxr-xr-x. root root system_u:object_r:dhcpc_exec_t:s0 /usr/sbin/dhclient

[lich@centos ~]$ ps -ZC dhclient
LABEL                                                         PID    TTY                             TIME   CMD
system_u:system_r:dhcpc_t:s0            2120   ?                           00:00:00   dhclient
system_u:system_r:dhcpc_t:s0            4320   ?                           00:00:00   dhclient

Переменные окружения  и текущий рабочий каталог на поверку тоже оказываются атрибутами процесса, которые можно получить при помощи команд ps и pwdx соответственно.

Переменные окружения процесса

fltz@ubuntu:~$ ps fe

PID   TTY        STAT          TIME       COMMAND
21872    pts/2       S                 0:06         -bash TERM=xterm LS_COLORS=rs=0:di=01;34:ln=01;36mh=00:…
22904   pts/2       R+              0:00           \_ ps fe SHELL=/bin/bash TERM=xterm USER=fitz …

Текущий рабочий каталог процесса

fitz@ubuntu:~$ ps fx

PID   TTY          STAT         TIME     COMMAND

22984    pts/0      S                  0:00      -bash
23086    pts/0      S+               0:00         \_ man ps
23097    pts/0      S+               0:00                   \_ pager -s
21872     pts/2      S                  0:00       -bash
23103     pts/2      R+               0:00           \_ ps fx

fitz@ubuntu:~$ pwdx 23097 22984

23097: /usr/share/man

22984: /home/fitz

Добавить комментарий