Если matchpathcon проверяет контекст SELinux каталога, какова обратная проверка для службы?

Страница из документации Fedora описывает проблему контекста SELinux на следующем примере:

"... вместо использования /var/www/html/ для веб-сайта администратор хочет использовать /srv/myweb/. ... [Однако] SELinux препятствует доступу HTTP-сервера Apache (httpd) к ошибочно помеченным файлам и каталоги]

Как известно любому, кто имеет проблемы с SELinux, SELinux не помогает при сообщениях об ошибках. Один из способов определения правильного контекста - использование matchpathcon (дальше вниз по странице)

Команда matchpathcon проверяет контекст пути к файлу и сравнивает его с меткой по умолчанию для этого пути. В следующем примере демонстрируется использование matchpathcon в каталоге, содержащем файлы с неправильной маркировкой:

$ / usr / sbin / matchpathcon -V /var/www/html/ *

/ ** РЕДАКТИРОВАТЬ: в соответствии с запросом, используя пример контекста httpd, matchpathcon сообщает о пользователе, роли и типе содержимого общедоступного каталога www как:

[root@mrwizard ~]# /usr/sbin/matchpathcon /var/www/html/*
/var/www/html/info.php  system_u:object_r:httpd_sys_content_t:s0

Если - и это просто иллюстрация, а не правильное использование этой команды - вы выполняете ту же команду для двоичного файла для httpd, вы обнаружите, что тип не тип содержимого httpd, а тип выполнения httpd, я полагаю, SysV (на CentOS6) использует для запуска httpd:

[root @ mrwizard ~] # / usr / sbin / matchpathcon / usr / sbin / httpd / usr / sbin / httpd system_u: object_r: httpd_exec_t: s0

matchpathcon вывод асимметричный; это не помогает администратору устранять неполадки пользователя, роли и типа SELinux со службой в качестве входных данных для получения контекста SELinux по умолчанию в качестве выходного. **/

Если matchpathcon проверяет контекст SELinux правильно настроенного каталога, какую процедуру обратного следует использовать в службе? Другими словами, есть ли обратная проверка /usr/sbin/httpd?


Я прошу это излишне осторожно. Кажется, этот шаг полезен, когда сервер работал и теперь не работает. Однако, если вы устанавливаете систему и приняли какое-то решение в начале установки что-то не в том месте, то правильного каталога контекста SELinux может не существовать. Правильно? Итак, что бы вы проверили, чтобы найти правильный контекст SELinux, кроме службы?

1 ответ

Я буду использовать passwd Программа, чтобы объяснить многое из этого.

Чтобы однозначно ответить на этот вопрос в контексте DAC (стандартная модель управления доступом Unix):

Как вы определяете из файла, в какой теме я могу запустить бинарный файл?

Ответ: ты бежишь ls -l /bin/passwdпроверьте, установлен ли бит setuid. Если это так, вы будете запускать программу как владелец файлов, если нет, вы будете запускать программу от имени своего пользователя.


Чтобы однозначно ответить на этот вопрос в контексте SELinux:

Как вы определяете из файла, в какой теме я могу запустить бинарный файл?

Ну, это не так просто, потому что это зависит от того, кто вы есть, когда вы пытаетесь запустить двоичный файл! К счастью, sesearch Утилита невероятно удобна для проверки того, какой может быть политика в этом случае. Мы можем попросить его сообщить нам, какие переходы могут возникнуть при запуске объекта, помеченного httpd_exec_t,

Который дает

$ sesearch -T -c process -t httpd_exec_t
Found 14 semantic te rules:
    type_transition system_cronjob_t httpd_exec_t : process httpd_t; 
    type_transition crond_t httpd_exec_t : process httpd_t; 
    type_transition certwatch_t httpd_exec_t : process httpd_t; 
    type_transition initrc_t httpd_exec_t : process httpd_t; 
    type_transition dirsrvadmin_t httpd_exec_t : process httpd_t; 
    type_transition kdumpctl_t httpd_exec_t : process httpd_t; 
    type_transition cluster_t httpd_exec_t : process httpd_t; 
    type_transition logrotate_t httpd_exec_t : process httpd_t; 
    type_transition condor_startd_t httpd_exec_t : process httpd_t; 
    type_transition cobblerd_t httpd_exec_t : process httpd_t; 
    type_transition openshift_initrc_t httpd_exec_t : process httpd_t; 
    type_transition piranha_pulse_t httpd_exec_t : process httpd_t; 
    type_transition init_t httpd_exec_t : process httpd_t; 
    type_transition svc_run_t httpd_exec_t : process httpd_t;

Получается, что в вашем случае есть целая куча разных субъектов, которые могут это сделать, все они попадают в домен httpd_t.

Вот теперь всегда так:-

$ sesearch -T -c process -t ssh_exec_t
Found 8 semantic te rules:
   type_transition virsh_t ssh_exec_t : process virsh_ssh_t; 
   type_transition sge_job_t ssh_exec_t : process sge_job_ssh_t; 
   type_transition ajaxterm_t ssh_exec_t : process ajaxterm_ssh_t; 
   type_transition nx_server_t ssh_exec_t : process nx_server_ssh_t; 
   type_transition sysadm_t ssh_exec_t : process ssh_t; 
   type_transition staff_t ssh_exec_t : process ssh_t; 
   type_transition condor_startd_t ssh_exec_t : process condor_startd_ssh_t; 
   type_transition user_t ssh_exec_t : process ssh_t; 

Этот исполняемый файл делает разные переходы для разных предметов. Потому что мы знаем, что virsh_t следует только делать очень специфический набор вещей в SSH, он перемещается в virsh_ssh_t для перехода, который имеет больше ограничений, чем тот, кто будет переходить в ssh_t,

Ниже я добавил довольно длинный ответ на тему переходов, чтобы люди могли оценить, какие проблемы SELinux пытается решить и как пытается их решить.


Перемещение между пользователями в DAC (Unix) и MAC/TE (SELinux)

Давайте определим некоторые термины, чтобы это имело смысл.

  • Предмет: актер, который манипулирует элементами в системе. Обычно это пользователь или процесс.
  • Объект: предмет, на который воздействуют. Может быть много вещей (файл, каталог, порт)
  • Переход: акт превращения из одного субъекта в другого.

Прежде чем мы ответим, как это делается при применении типа SELinux, подумайте, как бы вы это сделали в DAC (дискреционный контроль доступа; стандартная модель безопасности UNIX).

Как это работает в модели безопасности Unix

В DAC субъектом является в первую очередь UID, но GID и дополнительные GID также определяют субъект. Объекты - это файлы, каталоги, сокеты Unix, на которые в основном ссылаются их пути (хотя существуют некоторые исключения, например, общая память IPC).

Обычно, когда вы запускаете программу - нет перехода. пользователь jim хочет бежать /bin/cat, Когда он это делает, процесс создается и наследует субъект jim наряду с любыми другими свойствами своего предмета (GID, дополнительные группы и т. д.).

Тем не менее, есть некоторые программы, которые при запуске делают переход. Когда пользователь jim управляет passwd команда, jim переходы в root, что, конечно, необходимо для внесения изменений в теневой файл.

Это автоматическое поведение при переходе контролируется переключением бита SUID в разрешениях файловой системы, в котором определяется, на кого вы переходите, устанавливая владельца исполняемого файла на диске в целевой объект, в который вы хотите перейти.

Так что для ясности в passwd пример jim становится root потому что режим разрешения 4755 и владелец root,

Итак, setuid выполняет переход в стандартной модели управления доступом Unix.

К сожалению, программы setuid имеют ужасную историю проблем безопасности. Это связано с ограничениями в модели безопасности DAC, когда речь идет о том, как оцениваются переходы.

Процесс перехода setuid не выполняет проверку субъекта (пользователя), вызывающего программу. И то и другое jim а также betty перейдет к root вместе с apache, mysql а также nobody если они вызывают passwd,

Невозможно (без проверки самой программы, и мы все знаем, насколько это было надежно) сделать так, чтобы при jim звонки passwd он переходит в root но если betty вызывает passwd, чтобы не переходить к root, Единственное, что вы можете сделать, это прямо отрицать betty от когда-либо звонящего passwd во-первых, используя POSIX ACL, но это не гранулярно.

Также невозможно (без того, чтобы приложение делало это и не имело на это права), чтобы владельцем файла был кто-то, кроме человека, в которого вы хотите перейти. Так betty не могу бежать passwd и стать пользователем bin вместо root,

Как это работает в модели безопасности SELinux

Тема в selinux определяется типом метки, в которой выполняется пользователь или процесс. Это может быть user_t, unconfined_t или же httpd_t например.

Объекты - это файлы, каталоги, сокеты и т. Д., Как и в ЦАП, которые также упоминаются по их типу и имеют метки. httpd_exec_t, user_home_t а также mysql_port_t примеры различных меток объектов, которые использует SELinux

В обычных условиях, как и в ЦАП, переход не происходит. Если user_t исполняет /bin/cat (или то, как SELinux видит это, если user_t выполняет bin_t объект), он создается и наследует субъект user_t от звонящего.

Однако некоторые программы будут переходить при вызове. Если user_t выполняет объект с меткой passwd_exec_t (который /bin/passwd неудивительно) он переходит в passwd_t,

Это определено в правиле перехода типа, которое в политике выглядит так:

type_transition user_t passwd_exec_t:process passwd_t;

В SELinux для перехода происходит следующая оценка.

  • Кто является субъектом, желающим перейти (user_t)?
  • На какой объект ссылаются (passwd_exec_t)?
  • Какой новой темой хочет стать старая тема (passwd_t)?

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

  • httpd_t никогда не станет passwd_t и впоследствии никогда не сможет получить доступ к теневому файлу.
  • Мы можем дать Бетти guest_t предмет в SELinux и она тоже никогда не станет passwd_t,

На самом деле, это еще не все, что оценивается. Еще больше вопросов задают, прежде чем мы разрешим переход.

  1. Является ли субъект в роли, которая включает цель для перехода?
  2. Разрешено ли субъекту фактически выполнить passwd_exec_t файл с намерением перехода?
  3. Разрешено ли, чтобы любой мог перейти в passwd_t выполнив объект файла с меткой passwd_exec_t?
  4. Должны ли мы сделать это автоматически для user_t или должен user_t нужно явно попросить переход?

Модель перехода SELinux намного сильнее, делает лучшие оценки и намного более детальной, чем модель DAC.

Большая часть силы SELinux заключается в вашей сильной модели перехода. Поскольку вы можете быть очень точными в отношении того, кто есть кто, тогда вы можете сделать то, во что вы переходите, с очень конкретными разрешениями, в зависимости от того, какой может быть функция субъекта.

Итак, чтобы ответить на ваш оригинальный вопрос - ответ зависит от того, что вы хотите сделать, и кто вы хотите это сделать.

Другие вопросы по тегам