Я настроил sftp-сервер с chroot, и он отлично работает, единственное, что меня беспокоит, - это начальный целевой каталог, поскольку у пользователя sftp нет прав на запись в целевой папке, он должен перейти в папку, названную в честь его собственного имя пользователя для загрузки файлов.
Я установил: ForceCommand internal-sftp -d% u, который я нашел в некоторых руководствах по настройке, и они сказали, что он должен изменить папку посадки, но это не работает. Вначале я настроил нулевой сценарий для входа пользователя в passwd, но я изменил его на / bin / bash на случай, если это могло иметь какое-то отношение к этому. Я перезагрузил службу, так что, возможно, причина тоже не в этом.
Возможно, это может быть связано с версией ssh, которую я использую в дистрибутиве, или, возможно, sshd вообще не может этого сделать?
Вот моя конфигурация sshd:
Релиз CentOS 6.6 (окончательный)
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 февраля 201 г.
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -d %u
Вы можете использовать опцию -d
sftp, который меняет начальный каталог за вас. Видеть sftp-server(8)
страница руководства:
-d начальный_каталог
указывает альтернативный начальный каталог для пользователей. Имя пути может содержать следующие токены, которые раскрываются во время выполнения:
%%
заменяется буквальным "%",%h
заменяется домашним каталогом аутентифицируемого пользователя, и%u
заменяется именем этого пользователя. По умолчанию используется домашний каталог пользователя. Эта опция полезна вместе с sshd_config (5)ChrootDirectory
вариант.
Вы можете сделать это, поставив это в качестве аргумента internal-sftp
, например:
Subsystem sftp internal-sftp -d "%h/sftp_home/"
Кроме того, вам может потребоваться настроить вашу force-команду, если вы ее используете:
ForceCommand internal-sftp -d "%h/sftp_home/"
Это должно быть доступно в openssh начиная с версии 6.2.