Não é possível aplicar o contexto do arquivo SELinux a caminhos com links simbólicos

2

Eu tenho uma solução que está sendo instalada em um ambiente corporativo. A solução e seu guia de implantação são projetados para serem instalados em um servidor RHEL7 / CentOS7 com o SELinux ativado e com os componentes sendo instalados em locais de acordo com o Padrão de Hierarquia do Sistema de Arquivos.

No entanto, um dos clientes nos surpreendeu ao afirmar que todas as soluções de terceiros devem ser instaladas em um diretório /apps , pois elas fazem isso de acordo com a política.

Para evitar desvios para esse cliente específico, uma vez que isso exigiria modificações significativas na solução, decidimos que a melhor abordagem seria criar um novo diretório no diretório /apps para /opt e criar links simbólicos iniciais a partir do verdadeiro /opt e aplique o mesmo conteúdo do SELinux ( usr_t ), por exemplo:

ls -laZ /appl/opt
drwxr-xr-x. root     root     unconfined_u:object_r:usr_t:s0   .
drwxr-xr-x. root     root     unconfined_u:object_r:default_t:s0 ..
drwxr-xr-x. product product unconfined_u:object_r:usr_t:s0   product

la -laZ /opt
drwxr-xr-x. root root system_u:object_r:usr_t:s0       .
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..
lrwxrwxrwx. root root unconfined_u:object_r:usr_t:s0   product -> /apps/opt/product/

Certos componentes do produto são acessados via Apache HTTPD e exigem que o contexto httpd_sys_content_t seja aplicado a eles.

Os arquivos estão localizados em /opt/product/wwwstatic/ (que, na realidade, é /apps/opt/product/wwwstatic/ ).

O guia de implantação especifica os seguintes comandos para executar:

semanage fcontext -a -t httpd_sys_content_t "/opt/product/wwwstatic/*"
restorecon -Rv /opt/product/wwwstatic

que restaura os contextos em uma instalação padrão, mas neste ambiente, por causa dos links simbólicos, ele falha.

Se você modificar os comandos para incluir o diretório /apps , ele funciona, mas se desvia de uma abordagem genérica.

O conteúdo de /etc/selinux/targeted/contexts/files/file_contexts.local é:

# This file is auto-generated by libsemanage
# Do not edit directly.

/appl/opt/.*    system_u:object_r:usr_t:s0
/appl/srv/.*    system_u:object_r:var_t:s0
/opt/product/wwwstatic/*    system_u:object_r:httpd_sys_content_t:s0

Existe um meio de modificar os argumentos para os comandos semanage ou restorecon para que isso funcione para links simbólicos (assim como normalmente) ou eu tenha um mal-entendido fundamental sobre como o SELinux aplica os contextos de arquivos?

Acredito que essa questão seja diferente de , uma vez que se trata de aplicar contextos a arquivos em subdiretórios de diretórios com links simbólicos em vez de aplicar contextos para o arquivo symlink em si.

    
por prcjac 28.11.2015 / 14:37

3 respostas

4

Você pode usar o comando realpath no guia de implantação para garantir que as instruções sejam genéricas, mas aplique os contextos à localização real do sistema de arquivos onde quer que seja que seja.

'realpath "/opt/product/wwwstatic"'
    
por 28.11.2015 / 15:53
3

Os contextos do arquivo SELinux correspondem com base no caminho real do sistema de arquivos. Não há "seguir links simbólicos". Portanto, seus contextos personalizados precisam referenciar a localização real no disco.

A localização padrão para aplicativos de terceiros é /opt , então você está correto aqui. Se você tem um cliente que quer fazer algo fora do padrão, então você deve deixar claro para eles que eles estão fazendo errado, e quais serão os custos adicionais (em tempo e dinheiro).

    
por 28.11.2015 / 15:46
0

Use o sinalizador -h com chcon:

chcon -h -v system_u:object_r:httpd_sys_content_t:s0 *

    
por 18.02.2016 / 13:25