Table of Contents

sftp

sftp ftp ssl tls

Comentario comun a todos lo articulos:

drwxr-xr-x 4 root root 4096 Nov 17 12:02 www

Es decir, pertenecer al usuario y grupo “root” y permisos 755. En caso contrario al intentar hacer el sftp se obtiene el siguiente error:

  
packet_write_wait: Connection to 172.17.0.2 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

Restringir sftp a un usuario y a una IP, solo lectura

Queremos que el usuario “ftp_user” solo se pueda ejecutar sftp (y no iniciar una sesion ssh normal) en el servidor remoto y ademas que solo lo pueda hacer desde una IP conocida, en este ejemplo la 10.0.0.15

1. Crear el usuario “ftp_user”

sudo adduser ftp_user

Contestar a todas las preguntas. Recordar la contrasenya

2. Crear el directorio al que se podra conectar:

sudo mkdir -p /srv/ftp/usuario_ftp
sudo chmod 0755 /srv/ftp/usuario_ftp

3. Editar:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 
sudo vim /etc/ssh/sshd_config

Y anyadir o editar las siguientes lineas:

Subsystem sftp internal-sftp

Match User ftp_user Address 10.0.0.15
    PasswordAuthentication yes
    ChrootDirectory /srv/ftp/ftp_user
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

Restringir sftp a un usuario con escritura

NOTA Procedimiento revisado 22/10/2018. Sospecho que otras secciones en este artículo deben ser revisados

1. Crear el usuario “ftp_user”

sudo adduser ftp_user

Contestar a todas las preguntas. Recordar la contrasenya

2. Crear el punto de montaje:

sudo mkdir -p /srv/ftp/ftp_user/ftp
sudo chmod 0755 /srv/ftp/ftp_user/

3. Crear el directorio al cual se podrá conectar:

sudo mkdir -p /home/ftp_user/ftp
sudo touch /home/ftp_user/ftp/test_file_to_be_seen
sudo chown ftp_user:ftp_user /home/ftp_user/*

4. Montarlo de forma persistente:

sudo cp /etc/fstab /etc/fstab.bak; sudo vim /etc/fstab

Con la siguiente linea:

/home/ftp_user/ftp /srv/ftp/ftp_user/ftp       none    bind    0    0

5. Editar:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 
sudo vim /etc/ssh/sshd_config

Y anyadir o editar las siguientes lineas:

Subsystem sftp internal-sftp

Match User ftp_user
    PasswordAuthentication yes
    ChrootDirectory /srv/ftp/ftp_user
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

6. Reiniciar ssh

sudo service ssh restart

7. Probar desde el cliente:

sftp ftp_user@maquina_remota
cd ftp
put local_file.txt

NOTA Para que funcione, y esto hay que revisarlo, el directorio padre tiene que pertener a root y el hijo al usuario ftp:

Directorio Propietario
/srv/ftp/ftp_user root
/srv/ftp/ftp_user/dir1 usuario

Acceso escritura usuario www-data

Es un parche para que se puedan subir archivos vía SFTP o a través de la aplicación web (por ejemplo Wordpress) sin que haya colisión de permisos:

1. Editar el archivo original:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 
sudo vim /etc/ssh/sshd_config

Y anyadir al final:

AllowUsers www-data

2. Editar:

sudo cp /etc/passwd /etc/passwd.bak 
sudo vim /etc/passwd

Y dejar la linea del usuario 'www-data' así:

www-data:x:33:33:www-data:/var/www:/bin/bash

3. Asignar una contraseña al usuario 'www-data':

sudo passwd www-data

4. Probar:

sftp www-data@ip_servidor