вторник, июля 07, 2009

SELinux Lockdown, 5: SELinux RBAC

оригинал - 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

Комментариев нет: