1

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 -or-, если все не в состоянии использовать что-то, уже предоставленное ОС (например, bash ограничено) но это может быть не так безопасно.

Я думаю, что мне нужно определить собственную политику и в рамках этого:

(а) Разрешить пользователю выполнять файлы в своем домашнем каталоге.

(b) Разрешить переход пользовательских сценариев в различные типы, чтобы выполнять команды, для которых у пользователя нет прав доступа.

Используя графический интерфейс администратора SELinux (и файлы конфигурации, которые мне известны), я не представляю, как это сделать.

Спасибо за любую помощь, которую вы можете предоставить.

1 ответ1

0

Из версий пакетов это CentOS 6. Подход к этой проблеме, который я сейчас реализую, основными преимуществами которого являются возможности аудита (посредством sudo), простота (не требующая MLS/MCS) и ограничение, заключается в следующем:

  • Пользователям предоставляется каталог HOME с использованием pam_namespace
  • Пользователям предоставляется rbash логин shell
  • HOME смонтирован noexec,ro , с такими вещами, как HISTFILE указывающими вне их домов на контролируемое место в другом месте
  • Пользователи отображаются в user_u seuser
  • У пользователей свой PATH установлен только для чтения и ограничен ~/bin , где существуют символические ссылки на разрешенные (базовые) двоичные файлы
  • Использование sudo обязательно для любой другой команды, не входящей в ~/bin
  • Файл /etc/sudoers содержит правила, которые учитывают применение роли и типа целевого пользователя / команды с помощью SELinux_Spec для указания параметров role и type sudoers.

Этот блог описывает случай использования. Этот поток ссылается на положение вещей в отношении RHEL5/CentOS5 и RHEL6/CentOS6

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .