Habilitar directorio de usuarios para pagina web en CentOS 6 con SELinux

Este articulo va dedicado a mi estimado amigo Santiago Carnago que sufre muchas veces con Linux, en nuestra oficina utilizamos Xen Server, luego de una instalación de Centos 6 mínimo debemos efectuar las siguientes configuraciones:

  • Red
  • Actualizar
  • Instalar EPEL y WebTatic
  • Instalar LAMP
  • Generar esqueleto para futuros usuarios
  • Habilitar directorio de usuarios

La Red:

Apenas finalizamos la instalación de CentOS 6 minimal deberemos configurar la red de forma manual, por lo general esto se hace de la siguiente forma:

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
 TYPE=Ethernet
 ONBOOT=yes
 BOOTPROTO=none
 IPADDR=192.168.1.68
 PREFIX=24
 GATEWAY=192.168.1.254
 IPV4_FAILURE_FATAL=yes
 NAME="System eth0"

Si vemos contenido en el archivo entonces simplemente agregamos las lineas faltantes, por lo general los valores mas importantes son IPADDR, PREFIX, GATEWAY y cambiar el valor de BOOTPROTO asi como el de ONBOOT y finalizamos la configuración con:

service network restart

Actualizar:

Ejecutamos el siguiente comando:

yum update -y

Y pasamos a la instalacion de EPEL y Webtatic la cual es bastante rapida, ejecutamos el siguiente comando:

yum install -y epel-release

Y luego instalamos Webtatic

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

Ahora vamos a hacer algo sucio, seguramente alguien podra corregirme aca, pero CentOS 6 trae MySQL 5.1 y quiero utilizar la version 5.5 de Webtatic, por ende antes remuevo el paquete viejo de mysql-libs para instalar el nuevo, esto me remueve varios paquetes los cuales arreglo a mano con los siguientes comandos (se de –nodeps).

yum remove -y mysql-libs
yum install cronie cronie-anacron crontabs postfix --exclude=mysql-libs

Esto me va a instalar la version 5.5 de mysql-libs y ahora estoy listo para ejecutar lo siguiente:

yum install php56w* mysql55w* --exclude=php56w-mysqlnd

Luego de finalizar esto agregaremos algunas características al esqueleto de usuarios:

mkdir /etc/skel/public_html
echo "Hello World" > /etc/skel/public_html/index.php
echo "<?php phpinfo(); ?>" > /etc/skel/public_html/test.php

Ahora habilitamos el UserDir de apache (me instale nano, odio vi):

nano /etc/httpd/conf/httpd.conf

Dentro buscamos (control +w UserDir disabled)

<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    #UserDir disabled

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    UserDir public_html

</IfModule>

#
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

Y lo comentamos como ven en este ejemplo, le sacamos el comentario a la variable UserDir public_html y removemos el comentario de la directiva Directory que se encuentra un poco mas abajo. Y ahora reiniciamos apache y lo dejamos activo al inicio:

service httpd restart
chkconfig httpd on

Creamos nuestro usuario el cual contiene ya el esqueleto nuevo:

[root@localhost ~]# adduser alberto
[root@localhost ~]# passwd alberto
Cambiando la contraseña del usuario alberto.
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: todos los tokens de autenticación se actualizaron exitosamente.
[root@localhost ~]# ls -lah /home/alberto/
total 24K
drwx------. 3 alberto alberto 4,0K ago 27 09:50 .
drwxr-xr-x. 4 root    root    4,0K ago 27 09:50 ..
-rw-r--r--. 1 alberto alberto   18 jul 23 13:55 .bash_logout
-rw-r--r--. 1 alberto alberto  176 jul 23 13:55 .bash_profile
-rw-r--r--. 1 alberto alberto  124 jul 23 13:55 .bashrc
drwxr-xr-x. 2 alberto alberto 4,0K ago 27 09:16 public_html
[root@localhost ~]#

Y establecemos los permisos del directorio public_html junto con los permisos generales de SELinux:

chmod 0711 /home/alberto/
chmod 0755 /home/alberto/public_html
setsebool -P httpd_enable_homedirs true
setsebool -P httpd_read_user_content true
chcon -R -t httpd_sys_content_t /home/alberto/public_html
chcon -t httpd_sys_content_t /home/alberto
chcon -t httpd_sys_content_t /home

Para finalizar, accedemos a http://192.168.1.68/~alberto/index.php y deberemos ver nuestro nuevo index y si ingresan a http://192.168.1.68/~alberto/test.php veran los detalles de php.

Nota: 

Algunas herramientas opcionales:

yum install -y nano mc

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *