miércoles, mayo 25, 2016

como crear una cuenta linux que solo permita sftp en un directorio específico

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.: