Y que no permita al usuario andar curioseando por los archivos del sistema o de otros usuarios:
Es posible realizar esto y para ello es necesario realizar lo siguiente:
*Todos los comandos aquí descritos se ejecutan como root...
Primero configurar el ssh server, se requiere versión OpenSSH 4.8p1 o posterior.
Editar /etc/ssh/sshd_config:
1. Tenemos que especificar que se use el built-in sftp server:
Subsystem sftp internal-sftp
2. Y usamos la directiva Match para indicar que usuario o grupo van a estar restringidos en este caso vamos a restringir al usuario a que solo pueda hacer sftp:
Match user uploader
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /home/uploader/chroot
Listo ahora para aplicar reiniciamos el servicio
/etc/init.d/ssh restart
Ahora la parte del usuario y los directorios:
Creamos un grupo sftponly
groupadd sftponly
Y el usuario que vamos a usar, por ejemplo lo llamaremos uploader
useradd -g sftponly uploader--shell /bin/bash
Creamos su home
mkdir /home/uploader
mkdir /home/uploader/chroot
Con permisos adecuados
chmod 755 /home/uploader
chmod 755 /home/uploader/chroot
Asignamos un password al uploader si así nos interesa:
passwd uploader
Y como queremos que se pueda autenticar usando llaves y no solo password se requiere ponerlas en el archivo /home/uploader/.ssh/authorized_keys
mkdir /home/uploader/.ssh
chmod 700 /home/uploader/.ssh
chown uploader:sftponly /home/uploader/.ssh
touch /home/uploader/.ssh/authorized_keys
chmod 600 /home/uploader/.ssh/authorized_keys
chown uploader:sftponly /home/uploader/.ssh/authorized_keys
OPCIONALMENTE
{
En el cliente se crean las llaves para el cliente mediante el comando ssh-keygen y se deja el pass phrase en blanco (útil si se va a usar en un proceso automático), esto genera un archivo en el home .ssh/id_rsa.pub que contiene la linea de la llave que hay que agregar.
Una vez que nos hacen llegar el archivo id_rsa.pub del cliente lo añadimos
cat id_rsa.pub >> /home/uploader/.ssh/authorized_keys
}
Ahora bien dado que /home/uploader/chroot, es lo que aparece como / al cliente cuando se conecte y no puede ver el sistema de archivos original, pero dado que pertenece a root, solo va a poder escribir en los subdirectorios que le dejemos en su custodia dentro de este directorio, así que le hacemos los que necesite y se los asignamos por ej.
mkdir /home/uploader/chroot/music
mkdir /home/uploader/chroot/videos
mkdir /home/uploader/chroot/books
chown uploader:sftponly /home/uploader/chroot/music
chown uploader:sftponly /home/uploader/chroot/videos
chown uploader:sftponly /home/uploader/chroot/books
Cuando el cliente se conecte por sftp solo vera el arbol de directorios
/music
/videos
/books
Y solo podrá subir archivos a esas carpetas que es parte del objetivo que se quería alcanzar, además no podrá ver nada del sistema de archivos original lo que es genial para aislar esa cuenta del resto del sistema.
VARIANTE
{
Si desearamos que pudiera modificar y añadir llaves al authorized, simplement usamos el mismo home para que sea la carpeta chrooted en la directiva Match del sshd_config:
ChrootDirectory /home/uploader/
y creamos los directorios que va a usar dentro de /home/uploader.
}
Deja tu comentario si te ha servido.
Referencias:
http://undeadly.org/cgi?action=article&sid=20080220110039
https://debian-administration.org/article/590/OpenSSH_SFTP_chroot_with_ChrootDirectory
No hay comentarios.:
Publicar un comentario