Há uma diferença entre a rotulagem padrão que ocorre no tempo de execução e a política de pós-rotulagem baseada em expressão regular que se aplica ao servidor.
O que você está anotando aqui:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
É a política de rotulagem de postagem.
O que você discute no seu problema realmente está relacionado à política de tempo de execução.
Quando uma entrada é criada em um diretório usando o SELinux, as regras que governam o rótulo que o arquivo ou diretório acaba sendo não são ditadas pelas expressões regulares que você cita, mas outras regras como segue (acredito que esta é a ordem correta, mas pode ter perdeu alguma coisa).
- Existe uma regra explícita denominada
type_transition
. - Existe uma regra explícita não nomeada
type_transition
. - Herdar o mesmo contexto que o diretório pai.
- Aplique o
default_context
.
So, when I copy a WordPress site let's say from another server into a directory in /var/www/html/ by SSH, the folders wp-content/ and wp-content/uploads/ have the proper httpd_sys_rw_content_t security context.
Então, sim, isso é feito, mas não pelo motivo que você pensa. Certamente não por causa da política de rotulagem.
Isso ocorre porque existe uma regra específica denominada type_transition
que fornece esse comportamento.
$ sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir
Found 4 named file transition filename_trans:
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade";
Isso está basicamente dizendo.
- Se você é
unconfined_t
e - Se você estiver executando uma ação no tipo de destino
httpd_sys_content_t
e - Se a classe da nova entrada for um diretório e
- Se o nome da nova entrada for "uploads" , então
- O novo tipo é
httpd_sys_rw_content_t
A razão pela qual isso funciona para o SSHD é porque depois de efetuar login você está recebendo o contexto de origem de unconfined_t
para o qual esta regra se aplica.
Isso não funciona para o serviço FTP porque o contexto de origem deste serviço é provavelmente ftpd_t
, o qual não possui regras correspondentes.
Como tal, você precisaria modificar a política para alterar o comportamento do SELinux para também honrar as regras de arquivo nomeadas que você vê nas outras entradas para o FTP também.
No Fedora 23, pelo menos, existe uma interface para permitir isso, um módulo de políticas como este faria isso.
policy_module(local_ftpd, 7.2.0)
require {
type ftpd_t;
}
apache_filetrans_named_content(ftpd_t)
Você pode carregar isso garantindo que o pacote selinux-policy-devel
esteja instalado e executando make -f /usr/share/selinux/devel/Makefile load
.