Sim, isso pode ser feito.
O SELinux é um sistema de rotulagem, e o acesso para executar operações diferentes em arquivos (mas também usuários, processos, ...) é concedido com base no contexto de segurança do processo de origem.
A política de referência define o contexto de segurança de um processo:
# ps -defZ | grep httpd
system_u:system_r:httpd_t:s0 root 1085 1 0 21:22 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
Neste exemplo, o contexto de segurança tem os seguintes elementos:
-
system_u
: o usuário do SELinux -
system_r
: o papel do SELinux -
httpd_t
: o atributo de aplicação do tipo SELinux. -
s0
: o intervalo MLS / MCS, relevante em políticas diferentes da segmentada por padrão.
E também define em quais contextos de segurança um processo pode ter acesso:
# ll -dZ /srv/www/html/
drwxr-s---. root apache system_u:object_r:httpd_sys_content_t:s0 /srv/www/html/
# sesearch -s httpd_t -t httpd_sys_content_t -c file -p read -Ad
Found 1 semantic av rules:
allow httpd_t httpd_sys_content_t : file { ioctl read getattr lock open } ;
No exemplo acima, dado o contexto de segurança do diretório /srv/www/html
, você pode encontrar usando sesearch(1)
se estiver definido na política que um processo rotulado httpd_t
pode ter acesso de leitura a um diretório rotulado httpd_sys_content_t
.
Verifique a página de manual de sesearch
para mais opções.
Assim, para que um processo bifurcado seja restrito para acessar arquivos abertos por seu pai, você deve garantir que exista uma política que permita essa operação.