
Я просто пытаюсь лучше понять целевой SELinux. Хотя я понимаю, что пользователи, процессы, порты и т. д. помечены четверкой <user>,role>,<type>,<sensitivity>
и как устанавливать метки с помощью semanage, restorecon
и т. д., я пока не понимаю, как SELinux решает, доступен ли ресурс из процесса и как к нему может получить доступ процесс.
Например, глядя на свой httpd
REL8, я вижу следующие метки процесса и DocumentRoot
каталога по умолчанию /var/www/html
:
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35292 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35293 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35294 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35295 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 35838 27088 0 13:30 pts/0 00:00:00 grep --color=auto httpd
Но я ищу ответы на следующие вопросы:
- Почему процессу httpd разрешен доступ к файлам в /var/www/html?? Какие метки здесь проверяются, в каком порядке и какие метки должны совпадать?
- Как
role
выглядит определение того, что этот доступ разрешен?? Как я могу проверить определение роли? - Как определить, как процесс может получить доступ к ресурсу определенной метки??
- Могу ли я как администратор изменить роль так, чтобы, например, можно было получить доступ и к другим файловым контекстам??
Заранее большое спасибо за любые разъяснения.
решение1
Из вашего вывода:
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ?
httpd
запускается как httpd_t
метка. Такая метка прикрепляется к процессу через определенное правило перехода домена selinux.
Далее, как мы видим:
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
/var/www/html
имеет разрешенную метку домена httpd_sys_content_t
. Следовательно, процесс, работающий с httpd_d
может читать содержимое файловой системы, помеченное тем же httpd_sys_content_t
.
Все это контролируется очень сложными (и многословными) правилами selinux. От системных администраторов не ожидается понимания всего набора правил, так что не паникуйте. Важно понимать a) логи selinux, b) semanage
и c)audit2allow
Для получения более подробной информации вы можете прочитатьДокументация RedHat Selinux
Чтобы ответить на ваши вопросы:
Почему процессу httpd разрешен доступ к файлам в /var/www/html?Поскольку правило разрешает процессу с
httpd_t
меткой читать файлы сhttpd_sys_content_t
меткой (т.е.:ALLOW apache_process apache_log:FILE READ;
)Как выглядит роль, определяющая, что этот доступ разрешен?Роли применяют MAC к типам пользователей (например, персонал), но не используются в политике по умолчанию; вместо этого они используются в (нестандартной) политике MLS.
Как определить, каким образом процесс может получить доступ к ресурсу определенной метки?Вы можете сбросить весь набор политик, но это не даст простой информации. Вместо этого взгляните на
semange fcontext -l
Могу ли я как администратор изменить роль так, чтобы, например, можно было получить доступ и к другим файловым контекстам?Конечно. Вы можете написать политику с нуля (не рекомендуется) или использовать
audit2allow
(лучше). Однако постарайтесь избегать этого, так как любое изменение пользовательской политики будет трудно отслеживать/управлять; вместо этого, когда это возможно, используйтеsetsebool
илиsemanage
для настройки вашей базовой политики.