Переадресация 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

Другие вопросы по тегам