====== Настройка SFTP сhroot ======
Как предоставить пользователю доступ к серверу по [[https://ru.wikipedia.org/wiki/SFTP|SFTP]] протоколу.
Добавляем в файл ''/etc/ssh/sshd_config''
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
В нём же комментируем строку
Subsystem sftp /usr/lib/openssh/sftp-server
Создаём новую группу для доступа по sftp
addgroup --system sftponly
Создаём нового пользователя и добавляем его в группу sftponly
adduser john
usermod -a -G sftponly john
Справка по usermod - [[https://linux.die.net/man/8/usermod|usermod(8) - Linux man page]]
-a, --append
Add the user to the supplementary group(s). Use only with the -G option.
Ставим правильные права на каталог /home/john
chmod 750 /home/john
chown root:john /home/john
Если этого не сделать, то в ''/var/log/auth.log'' будет ошибка **bad ownership**.
Sep 25 05:23:38 vm1337 sshd[17331]: Accepted password for john from a.b.c.d port 54512 ssh2
Sep 25 05:23:38 vm1337 sshd[17331]: pam_unix(sshd:session): session opened for user john by (uid=0)
Sep 25 05:23:38 vm1337 sshd[17340]: fatal: bad ownership or modes for chroot directory "/home/john"
Sep 25 05:23:38 vm1337 sshd[17331]: pam_unix(sshd:session): session closed for user john
В WinSCP это выглядит так
{{:linux:sftp_chroot_failed.png?nolink|}}
В Ubuntu также была ошибка **Directive 'UsePAM' is not allowed within a Match block**.
# systemctl restart ssh
Job for ssh.service failed because the control process exited with error code. See "systemctl status ssh.service" and "journalctl -xe" for details.
Смотрим ''systemctl status ssh.service''
systemd[1]: Stopped OpenBSD Secure Shell server.
systemd[1]: Starting OpenBSD Secure Shell server...
sshd[17397]: /etc/ssh/sshd_config line 98: Directive 'UsePAM' is not allowed within a Match block
systemd[1]: ssh.service: Main process exited, code=exited, status=255/n/a
systemd[1]: Failed to start OpenBSD Secure Shell server.
systemd[1]: ssh.service: Unit entered failed state.
systemd[1]: ssh.service: Failed with result 'exit-code'.
Опция ''UsePAM yes'' должна быть перед секцией ''Match''.
Правильно
UsePAM yes
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Неправильно
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
UsePAM yes
Пробуем подключиться (например через [[https://winscp.net/|WinSCP]]).
{{:linux:sftp_chroot.png?nolink|}}
Итог: пользователь john может подключаться к хосту по протоколу sftp и не может выйти за пределы каталога /home/john. Внутри каталога /home/john у пользователя полные права на чтение/запись.