This is an old revision of the document!
Table of Contents
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
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/
3. Crear el punto de montaje:
sudo mkdir -p /home/usuario/ftp sudo chown usuario:usuario /home/usuario/ftp
4. Montarlo de forma persistente:
sudo cp /etc/fstab /etc/fstab.bak; sudo vim /etc/fstab
Con la siguiente linea:
/srv/ftp/usuario/ftp /home/usuario/ftp none bind
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 usuario PasswordAuthentication yes ChrootDirectory /srv/ftp/usuario AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp
6. Reiniciar ssh
sudo service ssh restart
7. Probar desde el cliente:
sftp usuario@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/usuario | root |
/srv/ftp/usuario/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