====== sftp ====== sftp ftp ssl tls Comentario comun a todos lo articulos: * El directorio especificado en "ChrootDirectory" debe tener exactamente estos permisos: 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