SELinux - CentOSx86_64: ограничение пользовательских команд
Подходит ли SELinux для этой работы? Если да, то как лучше всего это сделать?
Я хотел бы ограничить конкретного пользователя запуском только некоторого списка предопределенных команд / сценариев (возможно, в их домашнем каталоге). Кроме того, пользовательские скрипты могут иметь разрешение на запуск команд, которые пользователь не может запустить напрямую (например, пользовательский скрипт test.sh может вызывать ping localhost, но пользователь не может вызывать ping localhost непосредственно из командной строки). Стоит отметить, что я думаю, что эти ограничения необходимы только для одной учетной записи пользователя (мне не понадобятся несколько разных конфигураций для разных учетных записей пользователей).
Операционная система CentOSx86_64 и SELinux включен следующим образом:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Я новичок в SELinux, но экспериментировал со следующим:
(1) Я подумал, что, возможно, лучше всего подойдет политика MLS (эта ссылка выглядела многообещающей: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html) для этой задачи, поэтому я сначала попытался включить это. «Графический интерфейс администратора SELinux» не предоставляет возможности изменить политику с целевой, поэтому я попытался напрямую изменить / etc / selinux / config. Это закончилось «паникой ядра» после перезагрузки, поэтому я решил не использовать исходную установленную политику (т. Е. Целевую).
(2) В графическом интерфейсе администратора SELinux я создал новую политику с типом политики «Минимальная роль пользователя терминала». По «имени» я назвал его «ограниченный пользователь». Я не выбрал роли, на которые он будет переведен. Никаких дополнительных ролей я не выбрал. Я выбрал «Все» TCP и UDP-порты для привязки / подключения. Я не добавил в политику никаких логических значений. После запуска сгенерированного файла .sh были созданы новый пользователь и роль SELinux. Затем я назначил «ограниченному пользователю» логин. Как и ожидалось, это дало мне пользователя с очень ограниченными привилегиями.
(3) Первоначально этот новый пользователь мог создать сценарий в своем домашнем каталоге, но не мог его выполнить. После того, как я установил логическое значение с именем «allow_gues_exec_content», пользователь смог выполнить сценарий. Первоначально скрипт просто содержал «эхо», но как только я изменил его на ping, он снова не удался. Пытаясь разрешить «пинг» для этого нового пользователя, я отменил выбор логического user_ping (хотя я думаю, что это применимо только к user_u, а не guest_u). Чтобы сделать то, что я хочу, я думаю, что альтернативой может быть определение типа на основе user_u и затем удаление разрешений (вместо того, чтобы использовать подход, который я принял, который заключается в использовании типа на основе guest_u и добавлении разрешений - Однако я не я тоже не знаю, как это сделать!).
(4) В ряде онлайн-источников обсуждаются файлы политик из каталога src, но он не был установлен, и я не мог понять, какой пакет установить, чтобы добавить это. У меня установлены следующие пакеты, связанные с selinux:
libselinux.x86_64 2.0.94-5.3.el6 installed
libselinux-devel.x86_64 2.0.94-5.3.el6 installed
libselinux-python.x86_64 2.0.94-5.3.el6 installed
libselinux-utils.x86_64 2.0.94-5.3.el6 installed
selinux-policy.noarch 3.7.19-126.el6_2.4 @updates
selinux-policy-targeted.noarch 3.7.19-126.el6_2.4 @updates
setools-console.x86_64 3.3.7-4.el6 @base
setools-devel.x86_64 3.3.7-4.el6 @base
setools-gui.x86_64 3.3.7-4.el6 @base
setools-libs.x86_64 3.3.7-4.el6 @base
setools-libs-java.x86_64 3.3.7-4.el6 @base
setools-libs-python.x86_64 3.3.7-4.el6 @base
setools-libs-tcl.x86_64 3.3.7-4.el6 @base
Я думаю, что мне нужно определить собственную политику (или, возможно, использовать политику «strict»). В рамках этой политики:
(а) Разрешить пользователю запускать файлы в своем домашнем каталоге. (b) Разрешить пользовательским сценариям переходить в разные типы, чтобы выполнять команды, для которых у пользователя нет разрешений.
Используя графический интерфейс администратора SELinux (и файлы конфигурации, о которых я знаю), я не знаю, как это сделать.
Спасибо за любую помощь, которую вы можете предоставить.
Я бы подумал, что ограниченная оболочка, такая как http://lshell.ghantoos.org/ вам было бы легче. Поскольку он написан на Python, вы можете настроить его, если не можете заставить его работать так, как вы хотите, из коробки.