home dos utilizadores como DocumentRoot

Não sou certamente o único a tentar fazer da home dos utilizadores a sua DocumentRoot.

Estamos a falar de um servidor web virtualizado (no meu caso VirtualBox OSE) com CentOS5 e Apache2.

Partindo do pressuposto que o utilizador foi previamente criado com o nome u_demo e a sua home se encontra em /home/u_demo/, vamos ao que interessa.

Não me vou alongar sobre o que é nem qual o princípio inerente ao SELinux, mas é bom que se tenha consciência de que existe.

SELinux (“Security-Enhanced Linux”) é uma implementação de uma flexível e refinada arquitetura MAC (“Mandatory Access Control”). SELinux provê uma política de segurança sobre todos os processos e objetos do sistema baseando suas decisões em etiquetas contendo uma variedade de informações relevantes à segurança. A lógica da política de tomada de decisões é encapsulada dentro de um simples componente conhecido como servidor de segurança (“security server”) com uma interface geral de segurança.

in pt.wikipedia.org

Se inspeccionarmos o contexto de segurança da home do utilizador, devemos ter qualquer coisa como

$ ls -Z /home/u_demo
-rw-r--r--  u_demo udemo user_u:object_r:user_home_t      /home/u_demo

No entanto para que seja possível o apache “entrar e servir” a partir desta localização o mesmo deverá ser httpd_sys_content_t conforme se poderá verificar na DocumentRoot por omissão

$ ls -Z /var/www/html
 drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www/html

portanto resta-nos alterar o contexto da home do utilizador

# chcon -v --type=httpd_sys_content_t /home/u_demo
context of /home/u_demo changed to user_u:object_r:httpd_sys_content_t

Pessoalmente adopto uma organização mais elaborada com VirtualHosts que me permita manter toda a informação de um determinado projecto no mesmo sítio. Estou a falar em particular da DocumentRoot, dos logs do Apache etc…

Para conseguir isto, crio na home do utilizador dois directórios: public_html (a DocumentRoot) e logs onde serão escritos o access_log e o error_log.
O contexto de segurança para a public_html já foi referido acima. Para os logs o contexto deverá ser httpd_log_t

# chcon -v --type=httpd_log_t /home/u_demo/logs
context of /home/u_demo/logs changed to user_u:object_r:httpd_log_t

Este artigo é só uma breve referência/nota mental que vem no seguimento do Nem todo o servidor é um servidor web.
O verdadeiro HowTo sobre SELinux pode ser encontrado aqui.

2 Comments

Leave a Comment.

thirty six − = 27