O restorecon no CentOS não segue a ordem do fcontext

O restorecon no CentOS não segue a ordem do fcontext

Experimentando contextos de arquivos, enfrentei um comportamento estranho e parece que estou faltando alguma coisa. Aqui está o que eu faço:

Crie vários diretórios e arquivos

# mkdir -p /virtual/www/cgi-bin
# touch /virtual/www/cgi-bin/script
# touch /virtual/www/webpage

Configure algumas regras do zero

# semanage fcontext -D
# semanage fcontext -a -t httpd_sys_script_exec_t '/virtual/www/cgi-bin(/.*)?'
# semanage -a -t httpd_sys_content_t '/virtual/www(/.*)?'

Teste-o!

# restorecon -vr /virtual
restorecon reset /virtual/www context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin/script context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/webpage context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

Apesar da regra mais específica para cgi-bin, cada arquivo/diretório recebe o tipo httpd_sys_content_t. No entanto, eu quero o diretório cgi-bin e abaixo tenho o tipo httpd_sys_script_exec_t. O que estou fazendo de errado?

Testado em CentOS 6 e RedHat 7 com o mesmo resultado.

Responder1

Como os padrões usados ​​pelo selinux não podem ser classificados (por exemplo, comparar .*bcom b.*), o selinux não ordena as regras por especificidade, mas por último adicionado, último aplicado.

Infelizmente, semanage fcontext -l ordena as regras por meio de uma simples comparação de strings, o que ajuda a encontrar sua regra, mas não se você precisar depurar várias regras correspondentes.

Você pode ver a ordem realmente aplicada em

cat /etc/selinux/targeted/contexts/files/file_contexts.local

Portanto, você precisa adicionar primeiro a regra mais geral e depois a mais específica. Ou, melhor ainda, tente o seu melhor para construir as regras de uma forma que apenas uma regra por arquivo possa corresponder.

informação relacionada