Назад | Перейти на главную страницу

принудительная команда ssh: только sftp / scp

Цель: доступ только к sftp / scp, без необходимости для пользователей Linux.

Я хочу предоставить 10 каталогов sftp / scp для 10 человек. Назовем это «виртуальный счет»

Я не хочу создавать пользователей linux для каждого из них.

Я хочу создать одного пользователя Linux (backup_user). В его домашнем каталоге будет 10 каталогов. На каждую «виртуальную учетную запись» один каталог.

Каждая виртуальная учетная запись должна видеть только свои файлы, а не файлы из другой виртуальной учетной записи.

Я хотел бы использовать решение, представленное здесь: https://serverfault.com/a/88864/90324

Короче говоря, в файле authorized_keys будет 10 строк:

~backup_user/.ssh/authorized_keys:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command=\
    "scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

Я мог бы улучшить это с помощью сценария Python и не использовать жестко запрограммированный "scp -v ...".

Я хотел бы поддержать scp и sftp.

Есть ли способ chroot, чтобы гарантировать, что каждая виртуальная учетная запись не сможет вырваться из его тюрьмы?

Кстати: идея с authorized_keys и «принудительной командой» - это моя текущая стратегия. Если есть лучший способ достичь каждой общей цели, то, пожалуйста, скажите мне :-)

У нас запущен сервер OpenSSH. Я хотел бы по возможности придерживаться его.

Обновить

Мы нашли другое решение: http. Мы разработали небольшой универсальный файл-загрузчик http: https://github.com/guettli/tbzuploader Обратная связь приветствуется

Я думаю, что то, что вы хотите (доступ без создания локального пользователя), невозможно с sshd.

Скорее вы можете использовать proftpd с виртуальными пользователями (например, из базы данных MySQL) + модуль SFTP / SCP.

Это должен быть комментарий, но довольно длинный.

Вы не смогли адекватно описать свою цель. Хотя я могу сделать некоторые выводы, экстраполировать это на предложение было бы бесполезно.

Несмотря на то, что существуют инструменты, которые позволяют создавать сервер независимо от основных пользователей, их сложно настроить, и их возможности интеграции с другими функциями ограничены.

Было бы намного проще настроить 10 пользователей с паролем для входа в систему и без доступа к оболочке. Но ваше единственное четко сформулированное ограничение состоит в том, что «не хотите создавать пользователей Linux для каждого из них», но вы не объясняете, почему. OTOH, вы заявляете, что хотите использовать метод, основанный на обеспечении пользователей в ОС.

То, что вы хотите сделать, более чем непросто. Если вы не хотите использовать самодельный инструмент chroot-Shoot-in-your-Foot, вы должны придерживаться встроенного chroot ssh, который, в свою очередь, ограничен домашним каталогом пользователя (% h) = или чем-то еще, что вы можно указать в sshd_config. По крайней мере, я не нашел способа установить каталог chroot в файле authorized_keys, который бы решил эту проблему.

Так что все зависит от того, что вы имеете в виду, говоря «Я не хочу создавать пользователей Linux для каждого из них». Если вам просто не нужна запись в / etc / passwd, вы можете одним из способов, с помощью которых PAM сможет аутентифицировать «виртуальных» пользователей за вас. Вы можете использовать базу данных (излишек для 10 пользователей, конечно), использовать дополнительный файл, подобный passwd, например, файлы Berkley db. Эти виртуальные пользователи могут быть ограничены сервисом sftp или чем угодно. Если их виртуальные домашние каталоги настроены на предполагаемые подкаталоги пользователя backup_user, возможно, это то, что вам нужно. Ну - почти. Если вы укажете команду в authorized_keys, sftp запросит пароль - я думаю, вам это не нужно.

Если каждый из ваших 10 пользователей использует 2 ключа ssh, один для scp и один для sftp, это сработает. Однако вы должны имитировать поведение удаленного scp, указав сценарий в файле authorized_keys, который считывает переменную среды SSH_ORIGINAL_COMMAND. В любом случае, немного неловко.

ssh не поддерживает виртуальных пользователей. это можно реализовать через PAM, но нужно написать код.

если вы можете добавить локальных пользователей, вы можете попробовать этот инструмент

https://github.com/pymumu/jail-shell

Он помещает пользователя в определенный каталог.