Мне нужна установка, в которой я могу поместить содержимое нескольких пользовательских папок на сервер DMZ, откуда внешние клиенты могут его загрузить, протокол SFTP, Linux, OpenSSH. Чтобы упростить администрирование, мы хотим использовать для загрузки одного пользователя.

Что действительно работает, так это определить ChrootDirectory /home/sftp/в sshd_config, установить соответствующие права собственности и режимы и определить домашний passwdкаталог, чтобы он соответствовал рабочему каталогу пользователя. Это моя структура:

/home/sftp/uploader/user1/file1.txt
                   /user2/file2.txt

Пользователь-загрузчик может писать file1.txtи file2.txtв соответствующие папки, установив для папок пользователя (user1, user2) основную группу пользователей + установив SETGUID для папок, пользователи могут даже удалять файлы (что необходимо).

Единственная проблема: поскольку /home/sftp/это базовый каталог chroot, пользователи могут изменять Updir и видеть папки других пользователей, но не могут перейти в них из-за прав доступа.

Требование : мы хотим запретить пользователям переходить в / home / sftp / uploader / и видеть папки других пользователей. Мои требования - использовать SFTP, иметь одного пользователя загрузки, и каждый пользователь должен иметь доступ на запись в свой домашний каталог.

Очевидно, что это не вариант использовать что-то подобное, ChrootDirectory %hпотому что каждый компонент пути chroot-пути должен иметь ограниченные права доступа, поэтому, насколько я понимаю, это не работает.

answer

Я решил это, представив другой уровень каталогов:

/srv/sftp/user1/data/file1.txt
          ^^^^^ ^^^^
            |     +- user homedir
            +------- chroot target

OpenSSH теперь настроен на chroot в каталог «user1», предотвращая выход пользователя из его собственного каталога. Домашний адрес пользователя установлен в «/ data», так что рабочий каталог пользователя становится этим сразу после входа в систему по SFTP.

«user1» имеет ограниченные права доступа, как того требует OpenSSH, пользователь не имеет права записи в этот каталог.

«данные», с другой стороны, принадлежат пользователю и имеют его основную группу вместе с SETGUID, так что пользователь может записывать в этот каталог, а файлы, которые записываются пользователем загрузки, принадлежат правильной группе.

Насколько я понимаю, я должен использовать Match user для каждого пользователя отдельно в sshd_config

Match user user1
ChrootDirectory /srv/sftp/user1
Match user user2
ChrootDirectory /srv/sftp/user2
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp