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 Admin» не предоставляет никакой возможности изменить политику на целевую, поэтому я попытался напрямую изменить / etc / selinux / config. Это закончилось «паникой ядра» после перезагрузки, поэтому я решил использовать оригинальную установленную политику (т.е. целевую).
(2) Из пользовательского интерфейса SELinux Admin я создал новую политику с типом политики «Минимальная роль пользователя терминала». За «имя» я назвал его «ограниченный пользователь». Я не выбрал ни одной роли, на которую он будет переведен. Я не выбрал никаких дополнительных ролей. Я выбрал «Все» порты TCP и UDP для привязки / соединения. Я не добавил булевы в политику. После запуска сгенерированного .sh были созданы новые пользователь и роль SELinux. Затем я назначил имя пользователя для «ограниченного пользователя». Как и ожидалось, это дало мне пользователя с очень ограниченными правами.
(3) Первоначально этот новый пользователь мог создать скрипт в своем домашнем каталоге, но не мог его выполнить. После того, как я установил логическое значение allow_guest_exec_content, пользователь смог выполнить скрипт. Первоначально скрипт просто содержал «эхо», но как только я изменил это на ping, он снова не удался. В попытке разрешить '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
(5) Я посмотрел на альтернативную ограниченную оболочку, такую как http://lshell.ghantoos.org/ но мое требование компании - либо использовать SELinux -или-, если все не в состоянии использовать что-то, уже предоставленное ОС (например, bash ограничено), но это может быть не так безопасно.
Я думаю, что мне нужно определить собственную политику и в рамках этого:
(а) Разрешить пользователю выполнять файлы в своем домашнем каталоге.
(b) Разрешить переход пользовательских сценариев в различные типы для запуска команд, для которых у пользователя нет прав доступа.
Используя графический интерфейс администратора SELinux (и файлы конфигурации, которые мне известны), я не представляю, как это сделать.
Спасибо за любую помощь, которую вы можете предоставить.