SELinux: Почему httpd может читать файлы в /var/www/html?

SELinux: Почему httpd может читать файлы в /var/www/html?

Я просто пытаюсь лучше понять целевой SELinux. Хотя я понимаю, что пользователи, процессы, порты и т. д. помечены четверкой <user>,role>,<type>,<sensitivity>и как устанавливать метки с помощью semanage, restoreconи т. д., я пока не понимаю, как SELinux решает, доступен ли ресурс из процесса и как к нему может получить доступ процесс.

Например, глядя на свой httpdREL8, я вижу следующие метки процесса и 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

Но я ищу ответы на следующие вопросы:

  1. Почему процессу httpd разрешен доступ к файлам в /var/www/html?? Какие метки здесь проверяются, в каком порядке и какие метки должны совпадать?
  2. Как roleвыглядит определение того, что этот доступ разрешен?? Как я могу проверить определение роли?
  3. Как определить, как процесс может получить доступ к ресурсу определенной метки??
  4. Могу ли я как администратор изменить роль так, чтобы, например, можно было получить доступ и к другим файловым контекстам??

Заранее большое спасибо за любые разъяснения.

решение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

Чтобы ответить на ваши вопросы:

  1. Почему процессу httpd разрешен доступ к файлам в /var/www/html?Поскольку правило разрешает процессу с httpd_tметкой читать файлы с httpd_sys_content_tметкой (т.е.: ALLOW apache_process apache_log:FILE READ;)

  2. Как выглядит роль, определяющая, что этот доступ разрешен?Роли применяют MAC к типам пользователей (например, персонал), но не используются в политике по умолчанию; вместо этого они используются в (нестандартной) политике MLS.

  3. Как определить, каким образом процесс может получить доступ к ресурсу определенной метки?Вы можете сбросить весь набор политик, но это не даст простой информации. Вместо этого взгляните наsemange fcontext -l

  4. Могу ли я как администратор изменить роль так, чтобы, например, можно было получить доступ и к другим файловым контекстам?Конечно. Вы можете написать политику с нуля (не рекомендуется) или использовать audit2allow(лучше). Однако постарайтесь избегать этого, так как любое изменение пользовательской политики будет трудно отслеживать/управлять; вместо этого, когда это возможно, используйте setseboolили semanageдля настройки вашей базовой политики.

Связанный контент