SELinux - CentOSx86_64: ограничение пользовательских команд


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

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

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

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

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

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

Ответы:


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.