2.28.2013

sftp/chroot + selinux

Dado que en un ambiente de hosting los webmaster necesitan subir cosas a su web, Nessus sugirió sFTP, ni modo... Debemos activar los booleanos ssh_chroot_rw_homedirs, httpd_enable_homedirs, fenced_can_ssh (no descarto otro que no recuerde ahora..)

El archivo de configuración /etc/ssh/sshd_config lo deje así:


# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp
Match Group apache

        ChrootDirectory /data/web
        ForceCommand internal-sftp
        AllowTcpForwarding no


Creamos el usuario "webmaster" asignandolo al grupo apache el cual no debería tener shell y en mi caso con un home particular por ejemplo "incoming".

useradd -g apache -d /incoming -s /sbin/nologin  webmaster

Nótese que éste comando crea el directorio /incoming conteniendo:

[root@rusia incoming]# ls -lZa
drwx------. adminer apache system_u:object_r:default_t:s0   .
dr-xr-xr-x. root    root   system_u:object_r:root_t:s0      ..
-rw-r--r--. webmaster apache system_u:object_r:default_t:s0   .bash_logout
-rw-r--r--. webmaster apache system_u:object_r:default_t:s0   .bash_profile
-rw-r--r--. webmaster apache system_u:object_r:default_t:s0   .bashrc
-rw-r--r--. webmaster apache system_u:object_r:default_t:s0   .kshrc


Importante: Al final de todo el proceso y verificar que todo lo requerido funcione eliminé este directoio feo "/incoming" de la raiz y en /etc/passwd editar:
webmaster:x:613:48::/hosting/web1:/sbin/nologin

Luego bajo el directorio "Document Root" donde el webmaster subira sus htmls (en mi caso /hosting/web1/) deberá tener los propietarios y contextos:

/hosting : drwxr-xr-x. root root system_u:object_r:home_root_t:s0
/hosting/web1/  : drwxr-xr-x. root root unconfined_u:object_r:user_home_dir_t:s0
/hosting/web1/public_html : drwxr-xr-x+ wemaster apache unconfined_u:object_r:user_home_dir_t:s0 
/hosting/web1/public_html/* : webmaster apache unconfined_u:object_r:user_home_t:s0

Donde * son los directorios, archivos y cosas html

Finalmente revisar mediante un cliente sftp subiendo un file de nombre piedra.html por ejemplo.
Esta piedra.html tendra el contexto : adminer apache system_u:object_r:user_home_t:s0, el cual es válido e interpretado por apache normalmente.
Este escenario esta basado en http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/ considerando RHEL6 con selinux enforcing. 

No hay comentarios.:

Publicar un comentario