Если 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
,
На самом деле, это еще не все, что оценивается. Еще больше вопросов задают, прежде чем мы разрешим переход.
- Является ли субъект в роли, которая включает цель для перехода?
- Разрешено ли субъекту фактически выполнить
passwd_exec_t
файл с намерением перехода? - Разрешено ли, чтобы любой мог перейти в
passwd_t
выполнив объект файла с меткойpasswd_exec_t
? - Должны ли мы сделать это автоматически для
user_t
или долженuser_t
нужно явно попросить переход?
Модель перехода SELinux намного сильнее, делает лучшие оценки и намного более детальной, чем модель DAC.
Большая часть силы SELinux заключается в вашей сильной модели перехода. Поскольку вы можете быть очень точными в отношении того, кто есть кто, тогда вы можете сделать то, во что вы переходите, с очень конкретными разрешениями, в зависимости от того, какой может быть функция субъекта.
Итак, чтобы ответить на ваш оригинальный вопрос - ответ зависит от того, что вы хотите сделать, и кто вы хотите это сделать.