Я настроил SFTP-сервер с помощью OpenSSH, все работает нормально, и созданные мной пользователи могут подключаться.
После аутентификации пользователи попадают прямо внутрь /chroot
, каталог, в который им не разрешено писать. Итак, я поставил /subdirectory
в /chroot
у них есть доступ на запись (на основе это сообщение в блоге), который тоже отлично работает.
Однако из-за характера проекта, над которым я работаю, пользователи должны оказаться непосредственно в папке, в которую им разрешено писать после аутентификации. Пересылка их в /chroot/subdirectory
может быть лучшим решением, но я не нашел ресурса, объясняющего, как этого добиться.
Это можно сделать? Как?
ChrootDirectory / upload /% u
ForceCommand внутренний-sftp -d данные
Это поместит sftp в каталог / upload / UserXX / data. Каталог данных принадлежит пользователю UserXX и доступен для чтения / записи.
[РЕДАКТИРОВАТЬ] Да, я считаю, что это возможно, но я также верю, что не с openssh:
Вот как я chroot sftp с помощью openssh:
Я помещаю пользователей sftp в особую группу sftponly
который указан в sshd_config
файл. Я убеждаюсь, что у пользователей sftp нет оболочки (чтобы они не могли войти в систему с помощью ssh), и использую .%h
переменная среды, чтобы заставить их войти в подкаталог chroot sftp, названный в честь их домашнего каталога, с помощью ChrootDirectory
директива. Другие переменные среды, интерпретируемые sshd_config, задокументированы в страница руководства sshd_conf вот так:
Имя пути может содержать следующие токены, которые раскрываются во время выполнения после аутентификации подключающегося пользователя: %% заменяется литералом '%',% h заменяется домашним каталогом аутентифицируемого пользователя, а% u заменяется по имени пользователя этого пользователя.
Вот копия моих заметок по достижению этого в OpenBSD, если вы используете другую систему, .%h
переменная окружения, конечно, может отличаться:
# 1. Create the sftp jail directories
# These directory permissions work with this /etc/ssh/sshd_config:
# drwxr-xr-x 4 root wheel 512 May 14 16:20 /home/sftproot
# drwxr-xr-x 3 root wheel 512 May 14 16:21 /home/sftproot/home
# drwxr-xr-x 3 root wheel 512 May 14 16:37 /home/sftproot/home/User01
# drwxr-xr-x 3 User01 sftponly 512 May 14 16:39 /home/sftproot/home/User01/upload
# drwxr-xr-x 3 root wheel 512 May 14 16:37 /home/sftproot/home/User02
# drwxr-xr-x 3 User02 sftponly 512 May 14 16:39 /home/sftproot/home/User02/upload
# 2. Make sure /etc/ssh/sshd_config jails /home/sftproot/.%h
# 3. Create a group whose members will only be allowed sftp access
# groupadd sftponly
# 4. Create User01 + User02 whom will only get sftp access
# useradd -s /sbin/nologin -m -G sftponly User01
# useradd -s /sbin/nologin -m -G sftponly User02
# 5. In /etc/ssh/sshd_config enable use of chroot(internal-sftp) then force chroot dirs per user:
# override default of no subsystems
# Subsystem sftp /usr/libexec/sftp-server
# Subsystem sftp internal-sftp
# Rules for sftponly members
# Match group sftponly
# ChrootDirectory /home/sftproot/.%h
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand internal-sftp
# [Comment] Make sure /etc/ssh/sshd_config jails /home/sftproot/.%h
# Which will translate .%h to /home/$username
# [Comment] The sftp users will not be able to log in outside of sftp (as they have no shell).
# As they sftp in they will land in the /home/sftproot/home/Userxx directory which
# will be named "./" and where they have no write access.
# However the directory ./upload is read/writable.
[ИЗМЕНИТЬ часть 2] Однако страница руководства sshd_conf также указывает, что:
ChrootDirectory
Задает путь к каталогу, в который после аутентификации будет использоваться chroot (2). При запуске сеанса sshd (8) проверяет, что все компоненты пути являются корневыми каталогами, которые не доступны для записи другим пользователям или группам. После chroot sshd (8) меняет рабочий каталог на домашний каталог пользователя.
Таким образом, предполагается, что путь к каталогу chroot, включая часть, заданную расширением переменной, будет принадлежать и быть доступным для записи исключительно пользователю root и проверено sshd. Следовательно, пользователю chrooted-сервиса openssh sftp нужны подкаталоги с возможностью записи, чтобы иметь возможность писать в домашний каталог.
Однако я считаю, что это требование не для всех ssh-серверов. Мы также используем Tectia где я заметил, что пользователи могут писать в свои соответствующие корневые каталоги. Однако мы запускаем его только там, где требуется Windows, поэтому, к сожалению, я не могу легко протестировать соответствующую конфигурацию * nix. В Страница поддержки Tectia sftp chrooting не указывает явно, что домашняя страница пользователя должна принадлежать пользователю root в среде Unix. Поэтому я предполагаю, что для Tectia это не является обязательным требованием, но право собственности на домашний rootdir chroot-пользователя может принадлежать фактическому пользователю.