среда, июля 08, 2009

SELinux Lockdown, 7: su, newrole, sudo и run_init

оригинал - SELinux Lockdown Part Seven: su, newrole, sudo and run_init

Продолжаю выкладывать перевод цикла статей по использованию SELinux. Оригинал на английском языке опубликован в блоге Доминика Грифта (Dominick Grift).


До выхода Fedora версии 9 пользователям, имеющим доступ к ролям, для смены домена (Domain Transition) нужно было использовать команду newrole. Команду можно установить с пакетом policycoreutils-newrole. Например, пользователь запускал: newrole -r, и получал приглашение на ввод его пароля. После чего команда newrole проверяла, что у пользователя имеются все необходимые права доступа для осуществления запрашиваемого доменного перехода, и разрешала или запрещала его.

При переходе в привилегированный пользовательский домен и желании выполнить какое-то привилегированное задание пользователь выполнял команду su, чтобы выполнить требования дискреционного контроля доступа (Discretionary Access Control). Команда su запрашивает пароль пользователя root.

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

Такому пользователю для запуска системной службы имеется другая команда. Команда run_init осуществляет переход к домену сценариев инициализации (Init Script), в котором, в свою очередь, в соответствующем ей домене запускается системная служба. Эта программа также запрашивает пароль.

Таким образом получается много команд и паролей всего лишь, например, для перезапуска Apache.

В Fedora версии 9 для поддержки доменных переходов модифицировали команду sudo. Рекомендуется вместо команд su и newrole использовать sudo.
Два основных преимущества команды sudo заключаются в том, что данная команда позволяет за одно действие сменить идентификатор (uid) пользователя Linux и сменить домен SElinux, а также не требуется вводить пароль пользователя root при условии, что ваш пользователь добавлен в конфигурационный файл /etc/sudoers.

Целевой домен может быть указан опцией -t, целевая роль может быт указана опцией -r. Также в файле конфигурации /etc/sudoers можно настроить автоматическое переключение на определенные роль и домен по умолчанию.

Пример:
Linux пользователь joe входит в систему как SELinux пользователь joe_u. SELinux пользователь joe_u имеет доступ к роли joe_r, а также к ролям webadm_r и system_r. Роль joe_r сопоставлена домену joe_t, который обладает всеми необходимыми полномочиями для входа в систему ограниченного пользователя. Пользовательский домен joe_t в соответствии с политикой имеет доступ к ролям system_r и webadm_r. В файле /etc/sudoers о пользователе joe имеется следующая запись:

joe ALL=(ALL) TYPE=webadm_t ROLE=webadm_r ALL

Эта запись разрешает при запуске команды sudo пользователем joe осуществлять автоматическую смену значений параметров его контекста SELinux, соответственно роли на webadm_r и типа на webadm_t.

При входе пользователя joe в систему он оказывается в домене joe_t. Когда у Джо появляется необходимость запустить службу Apache он просто запускает команду:

sudo service httpd start

Команда sudo изменяет идентификатор (uid) Джо на 0 и автоматически осуществляет смену домена и роли Джо на определенные роль и домен - webadm_r и webadm_t.

Джо также имеет доступ к роли system_r, необходимой для смены пользовательского домена на домен сценария инициализации (Init Script), который запускает httpd в правильном домене. Команда run_init больше не требуется.

Если Джо доступно несколько ролей, он может переопределить роль и домен, указанные в конфигурационном файле sudo, указав опции -r и -t с требуемыми значениями роли и домена в качестве параметров.

Вывод:
Отдавайте предпочтение использованию команды sudo вместо команд su и newrole.
Отдавайте предпочтение предоставлению доступа к роли system_r вместо использования команды run_init.

Справка: man su, man sudo, man newrole, man run_init

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