оригинал - SELinux Lockdown Part Five: SELinux RBAC
Продолжаю выкладывать перевод цикла статей по использованию SELinux. Оригинал на английском языке опубликован в блоге Доминика Грифта (Dominick Grift).В
первой главе этой серии рассказывалось, что пользователи SELinux сопоставляются пользовательским доменам и компонентам мультикатегорийной безопасности (Multi Category Security - MCS). Эти сопоставления могут настраиваться запуском команды
semanage
с опцией
user
. Также сопоставления пользователя SELinux могут автоматически настраиваться вызовом интерфейса
gen_user() в файле с исходным текстом модуля Type Enforcement (Type Enforcement Source Module) для вашего домена пользователя.
SELinux RBAC используется для обеспечения возможности назначения нескольких ограниченных окружений SELinux одному SELinux пользователю.
В SELinux роли пользователя (User Roles) - это домены пользователя или пользовательские домены (User Domains). Когда упоминаются роли часто имеется в виду дополнительный (secondary) пользовательский домен пользователя SELinux. Часто роли, предназначенные для использования в качестве дополнительных доменов пользователя, отличаются от основных (primary) доменов. Это объясняется тем, что пользователи Linux фактически не используют для входа в систему роли, созданные как дополнительные домены пользователя, .
Вместо этого пользователи Linux, используя команду
sudo
или комбинацию команд
su
и
newrole
, осуществляют переключение домена или доменный переход (Domain Transition) к их дополнительной роли.
Имейте в виду, что некоторые роли разрабатывались как основные домены пользователей, тогда как другие поддерживают только функциональность дополнительного домена пользователя. Первичные пользовательские домены позволяют пользователю войти в систему, второстепенные домены пользователей могут быть использованы только с командами
sudo
и
su
вместе с
newrole
.
Роль SysadmПример роли, предназначенной для использования в качестве основного домена пользователяSELinux пользователь
sysadm_u сопоставлен роли
sysadm_r. Это сопоставление можно увидеть, выполнив команду:
sudo semanage user -l | grep sysadm_u
По умолчанию пользователи Linux, сопоставленные пользователю SELinux
sysadm_u, работают с ролью
sysadm_r. В этом случае
sysadm_r - это основной домен пользователя.
SELinux пользователь
staff_u также сопоставлен роли
sysadm_r. Основным пользовательским доменом пользователя SELinux
staff_u является (роль)
staff_r. Контексты по умолчанию, определенные в
/etc/selinux/targeted/contexts/users/staff_u
, определяют с какими пользовательскими доменами пользователи будут подключаться по умолчанию и с какими пользовательскими доменами пользователи могут войти, указав домен пользователя при входе.
По умолчанию SELinux пользователь
staff_u входит в систему в домен пользователя
staff_t. Роль
sysadm_r, предназначенная для использования в качестве основного домена пользователя, может быть использована при входе, например, следующим образом:
ssh joe/sysadm_r@localhost.localdomain.tld
Также роль
sysadm_r может быть использована при переходе домена выполнением команд
sudo
и
su
вместе с
newrole
, как это предусмотрено для дополнительных доменов пользователей.
Пользовательский домен
sysadm_t является окружением по умолчанию для SELinux пользователя
sysadm_u и предназначен для использования в качестве дополнительного окружения для SELinux пользователя
staff_u, хотя даже SElinux пользователь
staff_u может настроить подключаемый модуль аутентификации (Pluggable Authentication Module)
pam_selinux для использования
sysadm_t в качестве его основного домена пользователя.
Роль WebadmПример роли, предназначенной для использования в качестве дополнительного доменаВ отличии от роли
sysadm_r, пользовательский домен
webadm_t не может быть использован для непосредственного входа в систему. Вместо этого его необходимо использовать из другого домена пользователя через команды
sudo
или
su
вместе с
newrole
. Пользовательский домен
webadm_t не имеет разрешений, необходимых для запуск полноценного окружения пользователя.
Для использования роли
webadm_r, её следует сопоставить, например, SELinux пользователю
staff_u:
sudo semanage user -m -L s0 -r s0-s0:c0-c1023 -R "staff_r system_r webadm_r" -P user staff_u
Пожалуйста имейте в виду, что модификация существующих SELinux пользователей не поощряется. Предпочтительно оставлять предустановленных по умолчанию SELinux пользователей в их неизменном виде. Вместо этого добавляйте новых созданных и настроенных под ваши потребности SELinux пользователей:
sudo semanage user -a -L s0 -r s0-s0:c0-c1023 -R "staff_r system_r webadm_r" -P user webadm_u
cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/webadm_u
В этом примере роль
webadm_r может быть использована только как дополнительный пользовательский домен по двум причинам. Во-первых, пользовательский домен
webadm_t не имеет достаточных полномочий для поддержки полноценного окружения входа в систему. Во-вторых, для нашего пользователя
webadm_u за основу файла контекста по умолчанию в
/etc/selinux/targeted/contexts/users
мы взяли файл контекста по умолчанию пользователя
staff_u. В этом файле пользовательский домен
webadm_t не является допустимым контекстом, используемым для входа в систему.
Использование ролей для ограничения пользователя RootУправление доступом на основе ролей (Role Based Access Control) может использоваться для создания разных доменов пользователей с разными правами и назначения этих ролей пользователям SELinux. Хотя RBAC может использоваться как для непривилегированных так и для привилегированных пользователей, чаще его используют для ограничения привилегированного пользователя
root.
Например, SElinux пользователь
webadm_u, созданный выше, может быть использован для ограничения Linux пользователя
root до возможности только управлять окружением Apache. Домен пользователя
staff_t - непривилегированный. Это означает, что при работе пользователя
root в пользовательском домене
staff_t ему не доступны все полномочия
root. Пользовательский домен
webadm_t - ограниченно привилегированный. При работе пользователя
root в пользовательском домене
webadm_t ему доступны некоторые ресурсы
root, доступ к которым разрешен ограниченным окружением
webadm_t.
Например, некоторый пользователь сопоставлен SELinux пользователю
webadm_u. Ему также разрешены все полномочия пользователя
root в конфигурационном файле
/etc/sudoers
. При входе этого пользователя в систему по умолчанию ему будет определен пользовательский домен
staff_t. Если он выполнит команду
sudo
как
staff_t, то ему, например, не будет разрешено перезапустить службу Apache.
Если он до перезапуска службы, используя команду
sudo
, совершит переход в домен
webadm_t, то у него всё получится:
sudo -r webadm_r -t webadm_t service httpd restart
Если же он попытается, используя команду
sudo
, изменить пароль пользователя
root, то он получит отказ, потому что ни
staff_t, ни
webam_t не имеют таких привилегий.
Это мощная возможность, означающая, что теперь можно делегировать ограниченные явно заданные привилегии без необходимости раздавать пароль пользователя
root.
(
прим. перев.: в оригинале у автора написано - It means that it is not possible ("
не возможно") to delegate limited specified root privileges without having to share roots password - считаю, что тут явно опечатка, комментарий оставлю до получения ответа автора)
Далее рассказывается о некоторых предустановленных ролях.
Роль guest_rПользовательский домен, используемый только в качестве основного. Описание пользователя SELinux
guest_u приводится в первой части.
Роль xguest_rПользовательский домен, используемый только в качестве основного. Описание пользователя SELinux
xguest_u приводится в первой части.
Роль user_rПользовательский домен, используемый только в качестве основного. Описание пользователя SELinux
user_u приводится в первой части.
Роль staff_rПользовательский домен, используемый только в качестве основного. Описание пользователя SELinux
staff_u приводится в первой части.
Роль sysadm_rЭтот домен пользователя может быть использован и как основной, и как дополнительный домен. Пользователь SELinux
sysadm_u использует
sysadm_r в качестве роли по умолчанию, а SELinux пользователь
staff_u использует
sysadm_r как дополнительную роль. Роль
sysadm_r обладает достаточными правами для обеспечения входа пользователей в систему. Пользователь
sysadm_u описывается в первой части.
Роль system_rЭта роль используется системой в качестве основной. Пользователи могут использовать роль
system_r как дополнительную для перезапуска системных служб в их надлежащем контексте.
Роль unconfined_rЭтот пользовательский домен может быть использован и как основной, и как дополнительный домен. Пользователь
unconfined_u описывается в первой части.
Роль webadm_rЭтот пользовательский домен может быть использован только в качестве дополнительного домена. Эта роль не имеет доступа к домашним директориям пользователей и многие другие привилегии, необходимые для обеспечения входа пользователей в систему. Данный домен пользователя обладает необходимыми правами для управления окружением Apache.
Роль logadm_rЭтот пользовательский домен может быть использован только в качестве дополнительного домена. Эта роль не имеет доступа к домашним директориям пользователей и многие другие привилегии, необходимые для обеспечения входа пользователей в систему. Данный домен пользователя обладает необходимыми правами для управления окружением регистрации событий (logging).
Справка: man newrole, man su, man sudo, man semanage