Nossa empresa possui um servidor web com o CentOS 7 e nossos clientes gerenciam seus sites por FTP (vsftpd). O SELinux está no modo de imposição.
O problema é que os dados criados / enviados pelo VSFTPD não estão herdando o contexto apropriado do SELinux. Deixe-me explicar.
Por exemplo, para sites WordPress, o servidor já possui algumas regras que podem ser vistas usando semanage fcontext -l |grep '/var/www'
, que são:
/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
Portanto, quando copio um site WordPress, digamos de outro servidor para um diretório /var/www/html/
do SSH, as pastas wp-content/
e wp-content/uploads/
o httpd_sys_rw_content_t
contexto de segurança adequado . NO ENTANTO, quando essas pastas são criadas por FTP, o contexto que elas obtêm é httpd_sys_content_t
(sem rw ). Isso significa que os sites que nossos clientes carregam no servidor não podem gravar nesses diretórios, mesmo que concedam permissões de gravação ao usuário / grupo apache, para que o administrador do WordPress não funcione. Portanto, quando eles enviam um site, precisam solicitar nosso suporte para corrigir isso, o que é uma perda de tempo para todos os envolvidos.
Digamos que o cliente enviou o site para o site httpdocs
, se através do SSH eu mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
resolver o problema, não haverá nada de errado com os dados.
Também posso fazer restorecon -Rv httpdocs/
para corrigir o problema.
Portanto, a pergunta é: como os diretórios criados / enviados por meio do VSFTPD herdam os contextos adequados do SELinux, assim como eles são herdados quando os diretórios são criados / enviados por meio do SSH?
Respostas:
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ões regulares que se aplica ao servidor.
O que você está anotando aqui:
É a política de pós-rotulagem.
O que você discute no seu problema está realmente relacionado à política de tempo de execução.
Quando uma entrada é criada em um diretório usando o SELinux, as regras que regem qual rótulo o arquivo ou diretório acabam não sendo ditadas pelas expressões regulares que você cita, mas por outras regras a seguir (acredito que essa seja a ordem correta, mas pode ter perdido algo) .
type_transition
regra nomeada explícita .type_transition
regra explícita sem nome .default_context
.Então, sim, faz isso, mas não pelo motivo que você pensa que faz. Certamente não por causa da política de pós-rotulagem.
Isso ocorre porque
type_transition
existe uma regra nomeada específica que fornece esse comportamento.Isso é basicamente dizer.
unconfined_t
ehttpd_sys_content_t
ehttpd_sys_rw_content_t
A razão pela qual isso funciona para o SSHD é porque, após o login, você recebe o contexto de origem
unconfined_t
ao qual essa regra se aplica.Isso não funciona para o serviço FTP, porque é mais provável
ftpd_t
que o contexto de origem desse serviço não tenha regra correspondente.Como tal, você precisará modificar a política para alterar o comportamento do SELinux para também respeitar as regras de arquivo nomeadas que você vê nas outras entradas do FTP também.
No Fedora 23, pelo menos, existe uma interface para permitir isso, um módulo de política como esse faria isso.
Você pode carregar isso garantindo que o
selinux-policy-devel
pacote esteja instalado e em execuçãomake -f /usr/share/selinux/devel/Makefile load
.fonte
local_ftpd.te
com o seu módulo de política, então eu fizmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
e depoissemodule -i local_ftpd.pp
. Isso está bom? Agora, os arquivos criados por FTP herdam os contextos desejados. Obrigado novamente!