domingo, 13 de enero de 2013

Crear un Acceso sFTP en Ubuntu

Conceder acceso sFTP a una carpeta de tu server

FTP es un protocolo NO-seguro. Porque la conexión no esta cifrada. Es mejor usar sFTP. Aquí explicaré como configurarlo.

NOTA: mi máquina tiene instalado Ubuntu 11.10. Para ver la tuya haz:  

lsb_release -a

Te dirá algo asi:
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:        11.10
Codename:       oneiric

Servidor SSH

Para dar acceso sFTP se necesita tener instalado un servidor SSH. Si no lo tienes instalado (no lo hagas, normalmente Ubuntu ya lo tiene. Sobre todo si es un hosting).
Asi se instala. Primero actualiza las fuentes de código de tu máquina:

sudo apt-get update

Segundo. Si no esta instalado. Instala el server:

sudo apt-get install openssh-server

Crear un grupo sólo para users con acceso por sFTP:

En mi caso lo he llamado al grupo sftponly

sudo groupadd sftponly

Averiguar el ID del grupo recien creado:

Para ello miramos el siguiente archivo. Al final vereis el grupo que habeis creado y un ID numérico.
En mi caso es el 1003
cat /etc/group

Crear el usuario al que darás acceso

En mi caso voy a llamar al usuario pedro

sudo useradd [user name] -d / -g [sftponly group id] -M -N -o -u [sftponly group id]
sudo passwd [user name]
 
Ejemplo con mis datos:
     sudo useradd pedro -d / -g 1003 -M -N -o -u 1003
A continuación explico cada parámetro.
  • -d is the user home directory which needs to be set to / (root).
  • -g is the user group id to assign which in our example needs to be assigned to sftponly.
  • -M stops the useradd command creating a home directory.
  • -N useradd by default creates a group with the same name as the new user, this disables that behaviour.
  • -u is the user id, which in our case needs to be the same id value as sftponly.
  • -o allows duplicate, non-unique user ids.
  • The passwd command sets an encrypted user password.

Tocar el archivo de configuarion de SSH

 Antes de tocarlo. Haz una copia de segurida asi:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Editalo con tu editor favorito. En mi caso VI:
sudo vi /etc/ssh/sshd_config

Una vez dentro del archivo haz lo siguiente. Substituye esta línea así:
Subsystem sftp /usr/lib/openssh/sftp-server
Por esta otra:
Subsystem sftp internal-sftp
Ahora añade estas líneas al final del archivo:
Match group sftponly
ChrootDirectory /var/www
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Lo que estamos haciendo aquí es configurar los permisos y settings del grupo sftponly.
ChrootDirectory: Es la raiz donde el grupo actua. Ten en cuenta que la carpte www tiene que existir. Sino la creas con el comando mkdir. Los otros tres comandos son para deshabilitar la interfaz grafica a los users que accedan mediante este grupo y para decir ssh que use internal-sftp.

Reiniciar SSH:
En Ubuntus nuevos se hace de esta forma:
sudo service ssh restart
En versiones mas antiguas u otros Linux puede que funcione esto:
sudo /etc/init.d/ssh restart

Y ya esta. Con esto deberías poder conectarte con un cliente FTP como FileZilla:
http://filezilla-project.org/
 

Yo he aprendido de este enlace:
Implement a SFTP Service for Ubuntu/Debian With a Chroot’ed, Isolated File Directory

2 comentarios:

  1. Lo he probado en ubuntu 12.04 y al intentar conectarme la verdad es que me dice "connection refused" seguiré intentandolo

    ResponderEliminar
  2. muy bueno me servio perfecto

    ResponderEliminar