Chroot FreeBSD


FreeBSD es un sistema operativo multiusuario, multitarea y multiproceso como la mayoría de los sistemas operativos del nuevo siglo. Descendiente de la variante 4.4 BSD-Lite de UNIX está hecho para ser compatible con la norma POSIX. Un sistema muy robusto y sumamente estable, no siempre de la preferencia de los administradores más jóvenes quienes casi siempre optan por variante más LINUX por así llamarlo, digamos un CentOS o Debian y hasta Ubuntu server.

Yo particularmente habiendo tenido mis inicios en UNIX me hace sentir una dulce nostalgia y debo confesar que me inclino hacia él.

El servicio SSH se encuentra en todas las distribuciones LINUX/UNIX de hoy en día. Opción principal para la administración y transferencia de datos de manera segura, ofrece variantes que reemplazan a protocolos fundadores como lo son telnet o FTP. SSH-CLI, SCP o SFTP son algunas de las opciones que ofrece al cliente esta pequeña suite SSL.

Algunas veces es necesario compartir recursos con clientes externos. Digamos somos una empresa que hosting aplicaciones a terceros y existe la necesidad de darle acceso a una porción de nuestro sistema de ficheros en el servidor pues los clientes cada cierto tiempo necesitan actualizar el contenido de sus aplicaciones en cada uno de los virtualhosts. Debemos tener en cuenta que el cliente solo podrá acceder a sus datos, pues es un server donde convive mas de una aplicación.

Hay muchas maneras y soluciones para la problemática. Personalmente siempre me he inclinado al uso de SSH para estos temas. Seguro y estable a mi modo de ver, y además cumple con los estándares de la AAA (Authentication-Authorization-Accounting).

Lo primero que haremos será instalar el servidor SSH. En FreeBSD la instalación de paquetes es mediante un sistema de gestión de paqueterías llamado ports, algo parecido a los apt-get de Debian. La diferencia radica en el nivel de detalle de la instalación. Los ports son un conjunto de comandos por lotes, que especifican exactamente los requisitos, lo que se debe hacer para compilar el código fuente y lo necesario para instalar la versión ejecutable de un determinado paquete de software en el sistema, en otras palabras los paquetes son descargados y compilados con las opciones básicas o definidas para el sistema en especifico por el administrador.

Instalación de SSH

  #cd /usr/ports/sshd
  #make config; make install; make clean
  #echo "sshd_enable="YES"" >> /etc/rc.conf
  #service sshd start

Lo anterior expuesto compila la version del servidor SSH en los ports, habilita que inicie con el sistema (no existen los runlevel como en las distribuciones LINUX) e inicia el servicio por primera vez. Ahora ya seremos capaces de recibir peticiones seguras por el puerto 22 del servidor.

Configuración

Lo siguiente es otorgar el acceso al servidor mediante SFTP. Los clientes podrán hacer uso del servicio con cualquier cliente como WinSCP o FileZilla a nuestro servidor. Deberemos ser capaces de enjaularlos (Chroot) en un directorio determinado después de chequear sus credenciales.
Para eso agregaremos un grupo llamado sftponly al cual pertenecerán todos los usuarios que consumirán el servicio.

  #pw groupadd sftponly

Editaremos en fichero de configuración del SSH en el cual estableceremos lo antes expuesto. Todos los usuarios pertenecientes al grupo sftponly podrán hacer uso solo del servicio SFTP, no podrán loguearse en el sistema para hacer uso de la linea de comandos y solo pueden moverse dentro de la carpeta autorizada inhabilitando así el acceso a otras ubicaciones dentro del servidor.

  #vi /etc/ssh/sshd_config 

Y agregamos al final del fichero:

  Match Group sftponly
    ChrootDirectory /usr/home/%u
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

Reiniciamos el servicio:

  #service sshd restart

Agregamos los usuarios que consumirán el servicio. Tener en cuenta que deben pertenecer al grupo sftponly y setear nologin para evitar el uso de una terminal no autorizada.

  #adduser

Digamos el usuario pedro, una vez habilitado inicia sesión para hacer uso del servicio. El resultado luego de chequeadas sus credenciales sera darle acceso a la carpeta /usr/home/pedro donde le otorgaremos permisos de escritura pero nunca podrá moverse hacia arriba en el árbol del sistema de ficheros. Este es el resultado que queremos.

Conclusiones

Existen muchas soluciones a la problemática antes expuesta. El protocolo FTP también implementa algo similar. La selección como siempre digo es de ustedes, pero tengan en cuenta siempre la seguridad. Las credenciales no deben viajar por la red en texto plano, los procesos de autenticación ya sean FTP o HTTP siempre deben ser seguros (SFTP, HTTPS). La información en el mundo de hoy es el recurso mas valioso que tenemos y necesita ser custodiada y eso esta en nuestras manos.

Latest posts by Leroy Ley (see all)