Переадресация SFTP-пользователя в подкаталог chroot после аутентификации
Я настроил SFTP-сервер с использованием OpenSSH, все работает отлично, и созданные мной пользователи могут подключаться.
После аутентификации пользователи оказываются прямо внутри /chroot
каталог, в который им запрещено писать. Так что я положил /subdirectory
в /chroot
у них есть доступ для записи (вдохновленный этим сообщением в блоге), который также отлично работает.
Однако из-за характера проекта, над которым я работаю, пользователи должны оказаться непосредственно в папке, в которую им разрешено писать после аутентификации. Переадресация их в /chroot/subdirectory
может быть лучшим решением, но я не нашел ресурса, объясняющего, как этого достичь.
Это можно сделать? Как?
3 ответа
[EDIT] Да, я верю, что это возможно, но я также верю не с openssh:
Вот как я запускаю sftp с помощью openssh:
Я помещаю пользователей sftp в особую группу sftponly
который идентифицирован в sshd_config
файл. Я удостоверяюсь, что у пользователей sftp нет оболочки (чтобы они не могли войти с ssh), и использую .%h
переменная окружения, чтобы заставить их войти в подкаталог sftp chroot, названный в честь их домашнего каталога, используя 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, включая часть, указанную в расширении переменных, ожидается и проверен на sshd как принадлежащий и доступный для записи исключительно root. Следовательно, пользователю службы с привязкой openssh sftp требуются записываемые подкаталоги, чтобы иметь возможность записи в домашний каталог.
Однако я считаю, что это не обязательно для всех серверов ssh. Мы также используем Tectia, где я вижу, что пользователи могут писать в свои корневые каталоги. Однако мы запускаем его только там, где требуется Windows, поэтому, к сожалению, я не могу с готовностью протестировать соответствующую конфигурацию * nix. На странице поддержки корневой загрузки Tectia sftp явно не указано, что домашняя страница пользователя должна принадлежать пользователю root в среде Unix. Поэтому я бы предположил, что в Tectia это не является обязательным требованием, а то, что владельцем rootdir для домашнего пользователя в chroot может быть владелец реального пользователя.
ChrootDirectory / upload /% u
ForceCommand internal-sftp -d data
Это поместит sftp в каталог /upload/UserXX/data. Каталог данных принадлежит и доступен для чтения / записи UserXX
С помощью пользователя 474056 ответьте. Это работало хорошо следующим образом:
sudo addgroup exchangefiles
sudo mkdir /home/chroot/
sudo chmod g+rx /home/chroot/
sudo mkdir /home/chroot/exchangefiles/
sudo chmod g+rwx /home/chroot/exchangefiles/
sudo chgrp -R exchangefiles /home/chroot/exchangefiles/
sudo useradd -g exchangefiles -s /usr/bin/false -d /home/chroot/exchangefiles/username username
sudo passwd username
vi /etc/ssh/sshd_config
цитата А:
# override default of no subsystems
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
sshd_config
цитата Б:
Match Group exchangefiles
# Force the connection to use SFTP and chroot to the required directory.
ForceCommand internal-sftp -d %u
ChrootDirectory /home/chroot/exchangefiles/
# Disable tunneling, authentication agent, TCP and X11 forwarding.
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sudo service sshd restart