Provocar uma Negação do SELinux ao Mover um Arquivo com Contexto Incorreto
Nesta etapa, você verá o que acontece quando um arquivo com um contexto SELinux incorreto é movido para o diretório web do Apache. Este é um cenário comum que pode ser confuso se você não estiver ciente de como os contextos do SELinux funcionam com operações de arquivo como o mv. Ao contrário da criação de um arquivo diretamente em um diretório (que faz com que ele herde o contexto padrão do pai), mover um arquivo preserva seu contexto original.
Primeiro, vamos criar uma nova página web, page2.html, no seu diretório de trabalho atual, ~/project.
echo "This is Page 2" > page2.html
Agora, verifique o contexto SELinux deste novo arquivo. Como ele foi criado no diretório de projeto do seu usuário, ele receberá um contexto padrão atribuído a arquivos de usuário.
ls -Z page2.html
A saída mostrará um tipo de contexto como user_home_t ou algo semelhante, que é o padrão para arquivos no diretório home de um usuário.
system_u:object_r:user_home_t:s0 page2.html
Observe que o tipo é user_home_t. Isso é diferente do httpd_sys_content_t que o Apache tem permissão para acessar.
Em seguida, mova este arquivo para a raiz web do Apache usando o comando mv. Você precisará de sudo porque o diretório de destino /var/www/html pertence ao root.
sudo mv page2.html /var/www/html/
O comando mv preserva o contexto SELinux do arquivo de origem. Vamos verificar isso inspecionando o contexto do arquivo em sua nova localização.
ls -Z /var/www/html/page2.html
Como você pode ver, o contexto não mudou. Ele ainda é user_home_t, embora o arquivo esteja agora no diretório /var/www/html.
system_u:object_r:user_home_t:s0 /var/www/html/page2.html
Agora, tente acessar esta nova página usando o curl. O SELinux bloqueará o acesso devido à incompatibilidade de contexto.
curl http://localhost/page2.html
Você receberá um erro "403 Forbidden" do servidor. Isso não é um problema tradicional de permissão de arquivo; é o SELinux aplicando sua política de segurança e negando ao processo httpd a leitura de um arquivo com o rótulo user_home_t.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /page2.html
on this server.</p>
</body></html>
Isso demonstra um problema clássico do SELinux. Na próxima etapa, você aprenderá como corrigir isso alterando o contexto do arquivo.