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