Я хотел бы добиться следующего с помощью директив OpenSSH internal-sftp, chroot и Match:

Пользователи, принадлежащие к группе sftpuser, должны иметь доступ для чтения и записи в / srv / sftp / {username} (или аналогичные, могут быть предприняты определенные уловки, чтобы представить более красивую структуру каталогов для chrooted пользователя)

Пользователи, принадлежащие к группе sftpadmin, должны иметь доступ для чтения и записи к / srv / sftp и подкаталогам, то есть ко всем другим каталогам пользователей.

Все пользователи, принадлежащие sftpadmin или sftpuser, являются пользователями только sftp. Так что не нужно беспокоиться об оболочках и т. Д.

/ srv / sftp должен принадлежать пользователю root, чтобы пользователи sftpadmin могли перемещаться в эту папку. / srv / sftp / {username} также должен принадлежать root, чтобы привязать пользователей sftpuser к этой папке.

Как лучше всего предоставить пользователям sftpadmin доступ к корневым каталогам / srv / sftp / {username}?

Могу я просто использовать ACL поверх прав root?

answer

В итоге я сделал это:

/ srv / sftp / testadmin (домашний каталог пользователя testadmin )

/ srv / sftp / testuser / testuser (дом пользователя testuser )

Группа sftpadmin, которую я привязал к / srv / sftp:

Match Group sftpadmin
    ChrootDirectory /srv/sftp
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

и группа sftpuser, которую я привязал к / srv / sftp / {username} и изменил их начальный каталог на / srv / sftp / {username} / {username} (который просто / {username} видно из chroot):

Match Group sftpuser
    ChrootDirectory /srv/sftp/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp -d /%u

Наконец, я дал группе sftpadmin rwx в каталоге / srv / sftp / testuser / testuser:

setfacl -m g:sftpadmin:rwx /srv/sftp/testuser/testuser

Это примерно выполнило то, что я хотел. Группа sftpadmin может читать, записывать и изменять рабочий каталог на все, что находится ниже / srv / sftp (включая «домашние каталоги» группы sftpuser ). Группа sftpuser может записывать только в каталог / srv / sftp / {username} / {username} и не видеть другие домашние каталоги sftpuser, поскольку они расположены вне chroot для группы sftpuser.

Единственное, что нежелательно думать об этом, - это структура / srv / sftp / {username} / {username}. Пользователь из группы sftpuser может сделать cd .. и вернуться в / srv / sftp / {username}, где указанный пользователь не может делать ничего полезного, кроме возврата к / srv / sftp / {username} / {username}. Изменение каталога на / srv / sftp / {username} можно предотвратить, удалив бит выполнения для / srv / sftp / {username}, но это также помешает группе sftpadmin перейти в этот каталог и, следовательно, эффективно помешать им выводить список файлов. и т. д. в каталоге / srv / sftp / {username} / {username}.