!Hola amigos! Hoy les traigo una alternativa al uso de un Servidor FTP para la transferencia segura de archivos. Ya el colega KZKG^Gaara publicó uno basado en el paquete jailkit. El que desarrollaremos, se basa en los paquetes que tenemos más a mano en nuestro repositorio.
Veremos:
- Necesaria Intro
- ¿Cómo configuramos el Openssh-server?
- ¿Cómo creamos los usuarios?
- ¿Cómo modificamos los directorios personales para que la jaula funcione?
Necesaria Intro
Frecuentemente necesitamos que nos copien archivos desde equipos remotos en nuestra máquina. Muchos me han preguntado al respecto. ¿Instalo un FTP?, que ¿cómo instalo un SAMBA?. Bueno, vayamos de lo sencillo a lo complejo. De entrada ¿para qué complicarnos si tenemos el OpenSSH-Server instalado?. Y si no lo tenemos, con el sencillo comando:
aptitude install openssh-server
¡ya lo tenemos!, y entonces seremos capaces de transferir archivos de forma segura vía el protocolo SFTP (Secure File Transfer Protocol), el cual utiliza el SSH (Secure Shell) para la encriptación.
Por defecto, los usuarios con el permiso de iniciar una sesión remota vía ssh usuario@miequipo, serán capaces de ver la casi totalidad de los archivos almacenados en nuestro sistema, lo cual puede que no sea de nuestro agrado, o que por motivos de seguridad no lo debamos permitir.
Este artículo nos ayudará a configurar el OpenSSH-Server para que los usuarios que queramos, queden restringidos a su directorio personal /home/usuario. Aclaramos que, con éste método los usuarios declarados no podrán iniciar una sesión remota mediante una consola ssh o mediante el PuTTy. Sólo serán capaces de transferir archivos hacia o desde su directorio personal en nuestro equipo o servidor.
El método aquí descrito es válido para las versiones de Debian 5 (Lenny) o superiores, y para las versiones de Ubuntu 9.04 o superiores. La versión del paquete SSH del Hardy o Ubuntu 8.04 está muy atrasada y no soporta la configuración que describiremos a continuación.
¿Cómo configuramos el Openssh-server?
Como el usuario root editamos el archivo /etc/ssh/sshd_config con cualquier editor de texto simple. Nosotros recomendamos el uso del nano en modo consola.
nano /etc/ssh/sshd_config
Buscamos que la siguiente línea se encuentre presente:
Subsystem sftp <servidor interno sftp>
En Lenny y en Squeeze existen:
Subsystem sftp /usr/lib/openssh/sftp-server
En caso de que no exista, adicionamos al final del archivo:
Subsystem sftp internal-sftp
Seguimos con la edición del archivo sshd_config y le agregamos al final:
Match group grupo-sftp ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
Guardamos los cambios y reiniciamos el servicio:
/etc/init.d/ssh restart
¿Cómo creamos los usuarios?
Primero creamos el «group» que declaramos en el sshd_config. Ojo con el nombre que escogimos anteriormente no vaya a ser que ya exista y sea un grupo propio del Sistema. Sino deseamos restringir a usuarios existentes en nuestro sistema, debemos crear nuevos usuarios para que puedan transferir archivos. Para que la jaula funcione, tenemos que hacerlos además, miembros del grupo en cuestión.
addgroup grupo-sftp adduser usuario1 adduser usuario2 [----] usermod -G grupo-sftp usuario1 usermod -G grupo-sftp usuario2
Para comprobar la creación del grupo y de los usuarios, podemos hacer:
less /etc/password less /etc/group ls -l /home
Y deben aparecer los usuarios usuario1 y usuario2, así como los grupos grupo-sftp y los correspondientes a los usuarios creados. También, al listar el directorio /home, aparecerán los directorios personales de cada usuario creado.
¿Cómo modificamos los directorios personales para que funcione la jaula de forma efectiva?
Debemos aumentar la seguridad de las carpetas personales de cada usuario creado de forma que no puedan crear carpetas adicionales debajo de su directorio personal, y con permisos de escritura donde deseamos (no donde ellos quieran) :
chown root:root /home/usuario1 /home/usuario2 chmod 755 /home/usuario1 /home/usuario2 cd /home/usuario1 mkdir documentos html_publico chown usuario1:usuario1 * cd /home/usuario2 mkdir documentos html_publico chown usuario2:usuario2 *
Los usuarios pertenecientes al grupo grupo-sftp, en lo adelante serán capaces de iniciar sesión con sus nombres y contraseñas vía SFTP solamente, y podrán transferir archivos desde y hacia los directorios ubicados por debajo de su carpeta personal y que fueron creados por nosotros, pero no serán capaces de ver el resto de nuestro sistema de archivos.
Para la transferencia de archivos y carpetas, podemos utilizar el Nautilus, Konqueror, WinSCP, FileZilla, y otros que soporten el protocolo SFTP. En el caso del Konqueror, debemos usar fish://usuario@equiporemoto.
¡Esperamos que este artículo nos sirva de utilidad práctica!.
¡Hasta la próxima aventura, amigos!
Buen artículo. Una forma muy segura de compartir ficheros. Muchas gracias por la explicación. 🙂
Excelente
¿Y no es más cómodo usar sshfs?
Para nuestro equipo la carpeta remota aparecería como una carpeta más con las mismas caracteristicas.
Hola Federico, como siempre excelente artículo. Me alegra mucho poder leer ahora sí tus posts desde Internet.
Un abrazo,
Jako
Que tal jacobo, no federico no accede directamente. Oye cuando vuelvas no más ubuntu pintas humanos de verde y opensuse completo. Un abrazo. 😉
Excelentes aportes estás haciendo fico, keep it up 😀
Gracias mil KZKG^Gaara, y Gracias a TODOS por sus comentarios
Se puede enjaular a un usuario en una carpeta que no sea /home/usuario/….. ?
Lo que quiero hacer es enjaular a un usuario en la carpeta /media/hdd/…
Necesito hacerlo asi ya que el servidor es una Raspberry Pi con Raspbian, y tiene la carpeta /home/…/ en una tarjeta sd, la cual se llenaria en poco tiempo
Lo he intentado de varias formas y el resultado en cliente es siempre «Broken pipe», y el resultado en el servidor fatal: bad ownership or modes for chroot directory component «/media/HDD/»
Muchas gracias a todos
Creo que vas a tener que decirle al sistema que la carpeta home de ese usuario es /home/HDD, siempre que esa partición tenga formato nativo de linux, es decir, ext4; ext3; etcétera. Ejemplo, si el usuario es jae -para abreviar- debes ejecutar algo así por el estilo:
:~# usermod –move-home –home /home/HDD jae
También consulta el man usermod. Saludos
tengo un problema, uo tengo un servicio en amazon con una ami publica y tengo que entrar por sftp para colocar o remover archivos.
lo he hecho antes y todo bien pero hoy me hizo algo que no me había pasado
dentro de la ami hay una serie de carpetas y una de ellas es un portal cautivo de internet ( pagina para mis usuarios) resulta que ahí hago promociones y publicidad para mis usuarios y constantemente le hago modificaciones y las subo por sftp ( con winscp ) tengo permisos de root y el pass de root
le he dado el chmod 777 para permisos de escritura y todo había marchado bien
pero hoy al hacer la actualización de la web y subir el index.html y sus otros archivos me dio los nombres pero me ha dejado todo sin bytes es decir en cero (blanco) ahora no se ve nada en mi web
he cerrado la sesión y entre de nuevo, volvi a dar permisos, cambie de usuario, actualice, intente meter otros archivos, genere nuevos y siempre hace lo mismo
me da los archivos pero no tienen datos
alguien me puede ayudar ???
agradecería mucho sus respuestas
de antemano GRACIAS
atte
Lic Irving Hernandez
Hola como usar filezilla, ya lo he visto varios modos y aun no consigo conectar.
Me marca error.
Buenas Tardes,
Realice el procedimiento y funciona perfectamente el enjaulado, sin embargo al tratar de escribir sobre la carpeta «documentos» o «html_publico» me da acceso denegado. Tiene los permisos mencionados y nada que lo permite.
drwxr-xr-x. 2 usuario1 usuario1 4096 mar 11 13:16 documentos
drwxr-xr-x. 2 usuario2 usuario2 4096 mar 11 13:16 html_publico
El resultado es acceso denegado al tratar de escribir en cualquier carpeta. Sin embargo, al realizar un get si lo permite.
Espero que me puedan ayudar lo mas pronto posible.
Saludos.