Seguí varios tutoriales tratando de configurar un usuario sftp que únicamente tuviera acceso al folder del directorio web asignado y en el proceso obtuve muchos errores. Finalmente lo logré y a continuación escribo los pasos que seguí.

Las versiones son:

  • SO Linux Fedora Core 11
  • OpenSSH 5.2

Y los pasos son:

  1. Creamos un grupo para los usuarios que queremos restringir:
    [root@server ~]# groupadd chrooted
  2. Creamos un usuario que pertenezca al grupo chrooted.
    [root@server ~]# useradd -d /home/username -g chrooted username

    Nota: aunque no es necesario especificar la opción -d ya que por defecto el comando useradd creará un sud-directorio bajo el directorio /home.  Sin embargo si queremos que el usuario tenga acceso por ejemplo a /var/www/html/sitioweb/, tendremos que especificarlo en la opción.

  3. Por defecto una vez se crea el usuario el dueño del directorio hogar es el usuario, se debe cambiar para que sea root así:
    [root@server ~]# chown root.root /home/username

    Dentro de éste se creará un subdirectorio al que tendrá acceso exclusivo el usuario,

    [root@server ~]# mkdir /home/username/public_html/

    Finalmente ajustamos los permisos del directorio así:

    [root@server ~]# chmod -R 0755 /home/username

    Nota: Los pasos anteriores son los más importantes ya que seguirlos me evito el error: fatal: bad ownership or modes for chroot directory component “/home/username/” que aparecia en el log (/var/log/secure).

  4. Continuamos con asignarle una clave al usuario recién creado:
    [root@server ~]# passwd username
  5. Configuramos el servicio ssdh editando el archivo sshd_config:
    [root@server ~]# nano /etc/ssh/sshd_config

    Buscamos esta línea:

    Subsystem      sftp    /usr/libexec/openssh/sftp-server

    Y ponemos el signo # para comentariarla, luego agregamos la siguiente línea:

    #Subsystem      sftp    /usr/libexec/openssh/sftp-server
    Subsystem sftp internal-sftp

    Entonces al final del archivo agregamos las siguientes líneas:

    Match Group chrooted
    	ChrootDirectory %h
    	X11Forwarding no
    	AllowTcpForwarding no
    	ForceCommand internal-sftp
  6. Y finalizamos la configuración reiniciando el servicio sshd:
     [root@server ~]# service sshd restart
  7. Finalmente para probar ejecutamos el comando sftp y verificamos que unicamente tenemos acceso al directorio /home/username:
    [root@server ~]# sftp username@localhost
    Connecting to localhost...
    The authenticity of host 'localhost (127.0.0.1)' can't be established.
    RSA key fingerprint is 9b:f0:fa:df:ff:2b:bd:13:78:5d:b7:0d:f3:9a:b3:3a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
    username@localhost's password:
    sftp> pwd
    Remote working directory: /
    sftp>

Y voila, tenemos chroot más sftp-only.