SELinux: Por que o httpd pode ler arquivos em/var/www/html?

SELinux: Por que o httpd pode ler arquivos em/var/www/html?

Estou apenas tentando entender melhor o SELinux direcionado. Embora eu entenda que usuários, processos, portas etc. são rotulados com um quádruplo <user>,role>,<type>,<sensitivity>e como definir os rótulos usando semanage, restoreconetc. Ainda não entendo como o SELinux decide se um recurso é acessível a partir de um processo e como ele pode ser acessado por o processo.

Por exemplo, olhando para o meu httpdREL8, posso ver os seguintes rótulos no processo e no DocumentRootdiretório padrão /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

Mas o que procuro são respostas para as seguintes perguntas:

  1. Por que o processo httpd tem permissão para acessar os arquivos em/var/www/html? Quais rótulos são verificados aqui, em que ordem e quais rótulos devem corresponder?
  2. Como é a roledefinição de que esse acesso é permitido? Como posso verificar a definição da função
  3. Como posso determinar como um processo pode acessar um recurso de um rótulo específico?
  4. Como administrador, posso modificar a função para que, por exemplo, outros contextos de arquivo também possam ser acessados??

Muito obrigado antecipadamente por qualquer esclarecimento.

Responder1

Da sua saída:

[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0    root       35291       1  0 13:23 ?        

httpdé executado como httpd_trótulo. Esse rótulo é anexado ao processo por meio de uma regra específica de transição de domínio selinux.

Então, como podemos ver:

[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/htmltem o rótulo de domínio permitido httpd_sys_content_t. Portanto, um processo em execução with httpd_dpode ler o conteúdo do sistema de arquivos rotulado com o mesmo arquivo httpd_sys_content_t.

Tudo isso é controlado por regras selinux muito complexas (e detalhadas). Não se espera que os administradores de sistemas entendam todo o conjunto de regras, então não entre em pânico. O que é importante é entender é a) logs do selinux, b) semanagee c)audit2allow

Para mais informações, você pode lerDocumentos do RedHat Selinux

Para responder às suas perguntas:

  1. Por que o processo httpd tem permissão para acessar os arquivos em/var/www/html?Porque uma regra permite que um processo com httpd_trótulo leia arquivos com o httpd_sys_content_trótulo (ou seja ALLOW apache_process apache_log:FILE READ;:)

  2. Como é a função que define que esse acesso é permitido?As funções aplicam MAC aos tipos de usuários (ou seja: funcionários), mas não são usadas na política padrão; em vez disso, eles são usados ​​na política MLS (não padrão).

  3. Como posso determinar como um processo pode acessar um recurso de um rótulo específico?Você pode descartar todo o conjunto de políticas, mas isso não fornecerá informações simples. Em vez disso, dê uma olhadasemange fcontext -l

  4. Como administrador, posso modificar a função para que, por exemplo, outros contextos de arquivo também possam ser acessados?Claro. Você pode escrever uma política do zero (não recomendado) ou usar audit2allow(melhor). No entanto, tente evitar isso, pois qualquer alteração na política personalizada será difícil de rastrear/gerenciar; em vez disso, quando possível, use setseboolou semanagepara personalizar sua política base.

informação relacionada