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"'
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.
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"'
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).
Use o sinalizador -h com chcon:
chcon -h -v system_u:object_r:httpd_sys_content_t:s0 *