
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, restorecon
etc. 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 httpd
REL8, posso ver os seguintes rótulos no processo e no DocumentRoot
diretó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:
- 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?
- Como é a
role
definição de que esse acesso é permitido? Como posso verificar a definição da função - Como posso determinar como um processo pode acessar um recurso de um rótulo específico?
- 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_t
ró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/html
tem o rótulo de domínio permitido httpd_sys_content_t
. Portanto, um processo em execução with httpd_d
pode 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) semanage
e c)audit2allow
Para mais informações, você pode lerDocumentos do RedHat Selinux
Para responder às suas perguntas:
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_t
rótulo leia arquivos com ohttpd_sys_content_t
rótulo (ou sejaALLOW apache_process apache_log:FILE READ;
:)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).
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 olhada
semange fcontext -l
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, usesetsebool
ousemanage
para personalizar sua política base.