El protocolo SFTP permite una serie de operaciones sobre archivos remotos. SFTP intenta ser más independiente de la plataforma que SCP, por ejemplo, con el SCP encontramos la expansión de comodines especificados por el cliente hasta el servidor, mientras que el diseño SFTP evita este problema. Aunque SCP se aplica con más frecuencia en plataformas Unix, existen servidores SFTP en la mayoría de las plataformas.
El Secure Internet Live Conferencing (SILC) define el protocolo SFTP como su protocolo de transferencia de archivos por omisión. En el SILC, los datos del protocolo SFTP no están protegidos con SSH pero el protocolo de paquetes seguros de SILC se utiliza para encapsular los datos SFTP dentro de los paquetes de SILC para que se la llevara de igual a igual (peer to peer, P2P). Esto es posible ya que SFTP está diseñado para ser un protocolo independiente.
Esta guía muestra como configurar una cuenta SFTP para el envío o recepción de ficheros según los siguientes requirimientos.
groupadd sftponly useradd user gpasswd -a user sftponly # Se da por hecho que el usuario dispone de un directorio y fichero authorized_keys (/home/user/.ssh/authorized_keys) # Como usuario crear el directorio /home/user/incoming/ su - user mkdir incoming # /home/user/incoming/ exit mkdir -p /etc/ssh/authorized_keys/ cp /home/user/.ssh/authorized_keys /etc/ssh/authorized_keys/user cp /root/.ssh/authorized_keys /etc/ssh/authorized_keys/root chmod 644 /etc/ssh/authorized_keys/user # /etc/ssh/authorized_keys/root kann nur 600 haben. rm -fr /home/user/.* chown root:root /home/user/
Evitar el uso de SSH: cambiar la shell del usuario “user” en /etc/passwd (Se puede utilizar usermod para tal fin, entre otros comandos).
user:x:500:500::/home/user:/bin/false # usermod -s /bin/false user
Modificar la configuración del servidor ssh editando el fichero /etc/ssh/sshd_config.
# override default of no subsystems #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp AuthorizedKeysFile /etc/ssh/authorized_keys/%u Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
service sshd restart
Agregar nuevos usuarios (Borrar ficheros y directorios ocultos del home de cada uno es lógicamente optativo).
sudo usermod -g sftponly username sudo usermod -s /bin/false username
Vincular cualquier otra carpeta del sistema con el directorio incoming previamente creado. De esta manera el usuario estará siempre encerado en la jaula pero podrá trabajar en cualquier otro directorio mientras sea de su propiedad, por ejemplo los ficheros php de un virtualhost.
mkdir /tmp/prueba chown user:user /tmp/prueba/ mount --bind /tmp/prueba/ /home/fauser/incoming/
Si se quiere montar el directorio de manera automática al inicio del sistema, se puede agregar la siguiente linea al fichero “/etc/fstab”.
/tmp/prueba /home/user/incoming none bind'
SFTP Test
sftp user@sftp.servidor Connected to sftp.servidor. sftp> pwd Remote working directory: / sftp> ls incoming sftp> cd incoming sftp> mkdir test sftp> cd test/ sftp> pwd Remote working directory: /incoming/test sftp>
SSH Test. (No se permite el acceso).
ssh user@sftp.servidor This service allows sftp connections only. Connection to sftp.servidor closed.