# ¿Cómo limito un usuario de sFTP a un solo directorio?

OpenSSH (4.8p1 para el port de GNU/Linux) y las versiones posteriores incluyen una opción de configuración: `ChrootDirectory`. Esto es posible gracias a un nuevo subsistema SFTP enlazado estáticamente con sshd.

Esto facilita la sustitución de un servicio FTP básico sin la complicación de configurar el cifrado ni tener que lidiar con los modos pasivo y activo de FTP al operar a través de un router NAT. También es más sencillo que usar paquetes como rssh u otros parches, ya que no requiere configurar ni mantener un entorno chroot (por ejemplo, aplicar actualizaciones de seguridad).

Para habilitarlo, obviamente necesitas la nueva versión 4.8p1. Personalmente, uso la versión de cvs y el directorio debian/ del paquete sid para crear un paquete Debian 4.8p1\~cvs-1 bien integrado.

En `/etc/ssh/sshd_config`:

Debes configurar OpenSSH para que use su subsistema SFTP interno.

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_J2dUuDbK49ciWRJSpUNizRHxu8UE)

```bash
Subsystem sftp internal-sftp

```

Después, configuré `chroot()` mediante una regla de coincidencia.

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_J2dUuDbK49ciWRJSpUNizRHxu8UE)

```bash
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

```

El directorio en el que se ejecuta `chroot()` debe pertenecer a root. Después de la llamada a `chroot()`, `sshd`cambia al directorio de inicio relativo al nuevo directorio raíz. Por eso uso `/` como directorio de inicio.

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_J2dUuDbK49ciWRJSpUNizRHxu8UE)

```console
$ chown root.root /home/user
$ usermod -d / user
$ adduser user sftponly

```

Esto parece funcionar según lo previsto:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_J2dUuDbK49ciWRJSpUNizRHxu8UE)

```console
$ sftp user@host
Connecting to host...
user@host's password:
sftp> ls
build               cowbuildinall       incoming            johnbuilderclean
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
build               cowbuildinall       incoming            johnbuilderclean

```

> Incorporamos aquí las instrucciones originales de[https://debian-administration.org/article/590/OpenSSH\_SFTP\_chroot\_with\_ChrootDirectory](https://web.archive.org/web/20190316222106/https://debian-administration.org/article/590/OpenSSH%5FSFTP%5Fchroot%5Fwith%5FChrootDirectory)porque, en el momento de redactar este artículo, ese sitio web ya no funcionaba.
