Корневой каталог пользователя SFTP

Корневой каталог пользователя SFTP

Я собрал следующий скрипт, который отлично работает. Он создаст пользователя sftp, и когда пользователь войдет в систему, он будет в /var/base/test1, из которого он не может писать в этом каталоге, ему нужно войти, /var/base/test1/test1и тогда он сможет писать.

Однако это немного раздражает, и в идеале я хочу, чтобы пользователь входил в /var/base/test1/test1каталог, когда он входит через ftp. Есть ли способ облегчить это? Если я изменю ChrootDirectory (в sshd_config) на /var/base/test1/test1, то пользователь ftp больше не сможет войти.

mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd

sshd_config:

Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

решение1

Короткий ответ

Это невозможно, но установите его /test1как обходной путь.

Длинный ответ

opensshтребует, чтобы ChrootDirectoryи все компоненты пути, ведущие к нему, принадлежали пользователю root и не были доступны для записи кому-либо еще. Это мера безопасности, гарантирующая, что ChrootDirectoryнельзя будет злонамеренно манипулировать и, например, заменить символической ссылкой на что-то совершенно другое. Если ChrootDirectoryили любой из его родительских каталогов не принадлежит пользователю root или доступен для записи группе или всем, sshdотказывает в входе. Если это происходит, вы видите что-то вроде этого в /var/log/auth.log:

Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1

Сообщение об ошибке должно указать вам правильное направление.

Об этом также прямо говорится вСтраница руководства sshd_config:

ChrootDirectory
Указывает путь к каталогу для chroot(2) после аутентификации. При запуске сеанса sshd(8) проверяет, что все компоненты пути являются каталогами, принадлежащими root, которые не доступны для записи никакому другому пользователю или группе. После chroot sshd(8) изменяет рабочий каталог на домашний каталог пользователя.[...]

Для безопасности очень важно, чтобы иерархия каталогов не изменялась другими процессами в системе (особенно теми, которые находятся за пределами jail). Неправильная конфигурация может привести к небезопасным средам, которые sshd(8) не сможет обнаружить.

Обходной путь

Однако вы можете установить домашний каталог пользователя на /test1( sudo usermod test1 -d /test1), тогда после chrootприменения каталог изменится на /var/base/test1/test1. Таким образом, пользователю не нужно будет переходить на , test1а он начнет свою sftpсессию уже в этом каталоге.

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1

Связанный контент