Я пытаюсь настроить резервный сервер. я бы хотел chroot каждому пользователю (клиенту) в свой домашний каталог и разрешить только ему использовать sftp и rsync.
Я быстро обнаружил, что я был не единственным, кто пытался сделать что-то подобное, и обнаружил, что это руководство и последовал за ним. Итак, теперь у меня есть chroot-пользователи только с sftp.
Затем я узнал, что rsync нуждается в ssh для создания себя на другой машине, и этого sftp недостаточно. В первую очередь я хотел избежать предоставления каждому пользователю ssh-входа.
Кто-нибудь может придумать возможные решения?
Спасибо,
отметка
Решение sftp будет также требуется вход по ssh для всех, так что вы действительно ничего здесь не потеряли. Предоставление доступа по ssh не обязательно подразумевает полный доступ к оболочке, например, этот показывает, как использовать ssh authorized_keys
файл, чтобы разрешить резервное копирование через rsync, ограничивая доступные команды до просто приемник rsync.
Фактически, если вы выберете аутентификацию на основе ключей, а не аутентификацию по паролю (что вам и следовало бы), вы могли бы запустить все под одной учетной записью пользователя, вместо того, чтобы требовать несколько учетных записей. Вы могли бы использовать ключи для идентификации удаленных пользователей и направить приемник rsync в определенный каталог.
Что-то вроде этого в вашем authorized_keys
файл:
command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2
Кто-то, использующий user1
закрытый ключ будет сохранен в /tmp/user1
, и кто-то, использующий user2
закрытый ключ будет сохранен в /tmp/user2
. И так далее...
Выполнить как обычно rsync
с клиента на удаленный сервер, но добавьте дополнительный подробный переключатель: SSH -v
, затем grep для Sending command
. Вы увидите точную команду, которую клиент отправляет на удаленный сервер:
rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"
В моем случае это было
rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path
Добавьте это как command="..."
на удаленный сервер /home/USER/.ssh/authorized_keys
как указано в @larsks. При необходимости добавьте дополнительные настройки безопасности:
no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server
Все вместе:
command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server
(Взято из очень хорошего учебника http://en.positon.org/post/Rsync-command-restriction-over-SSH)
Вам нужно будет предоставить некоторую форму доступа к оболочке, чтобы иметь возможность использовать rsync, если вы не подключаетесь напрямую к серверу rsync - порт по умолчанию - 873 (TCP).
Из страница руководства rysnc:
Существует два разных способа связи rsync с удаленной системой: использование программы удаленной оболочки в качестве транспорта (например, ssh или rsh) или прямое обращение к демону rsync через TCP. Транспорт удаленной оболочки используется всякий раз, когда исходный или целевой путь содержит один разделитель двоеточия (:) после спецификации хоста. Прямое обращение к демону rsync происходит, когда исходный или целевой путь содержит двойное двоеточие (: :) разделитель после спецификации хоста, ИЛИ когда указан URL-адрес rsync: // (см. Также lqUSING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTIONrq для исключения из этого последнего правила).
Чтобы обеспечить ограниченный доступ к оболочке, примите во внимание следующее руководство. (Примечание: исходная ссылка мертва) Резюме:
Эта установка сочетает в себе лучшие функции rsync, SSH и chroot. Rsync обеспечивает гибкость и эффективность при передаче файлов, SSH защищает передаваемые данные, а chroot защищает данные на сервере от несанкционированного доступа. Думмыш ограничивает доступ только к rsync.
Хотя сервер rsync реализует chroot, ему не хватает часто необходимой защиты SSH. Кроме того, открытие дополнительного порта сервера rsync представляет собой угрозу безопасности и иногда невозможно технически или политически. Sftp и scp не обладают гибкостью и эффективностью, обеспечиваемой rsync, особенно когда задействовано дерево каталогов, например веб-сайт.
Или взгляните на использование rssh (есть инструкция по настройке rssh Вот):
rssh - это оболочка с ограниченным доступом для использования с OpenSSH, допускающая только scp и / или sftp. Теперь он также включает поддержку rdist, rsync и cvs. Например, если у вас есть сервер, с которого вы хотите разрешить пользователям копировать файлы только через scp, без предоставления доступа к оболочке, вы можете использовать rssh для этого.
SFTP с возможностями Rsync, без оболочки
Ты можешь использовать LFTP + SFTP в среде chroot и достичь тех же результатов, что и при использовании rsync, без предоставления пользователю оболочки или выполнения каких-либо серьезных настроек в ssh с помощью оболочек.
Это более безопасно и может быть значительно быстрее.
вы можете написать оболочку, которая обертывает rsync.
посмотрите на общую идею здесь: https://sixohthree.com/1458/locking-down-rsync-using-ssh
в вашей оболочке-оболочке вы можете делать все, что хотите, и, возможно, chroot пользователя.
В моем случае мне нужно было включить виртуальную учетную запись, используя того же пользователя * nix. Мне удается сделать это, используя такую оболочку плюс много строк в файле authorized_keys. Я не выполнял chroot для пользователя, но я добавил уровень пользовательской папки в команде rsync server.
смотреть на обрабатывать пользователя по-разному, используя ключ ssh
Rsync в chroot сложно :) Вам нужно будет настроить минимальную среду для / bin / sh и / usr / bin / rsync в chrooted каталоге (на стороне назначения), чтобы он работал.
См. Всю статью здесь, настройка rsync-environment завершена.
https://medium.com/@deltazero/linux-remote-backup-rsync-chroot-d797ba6babe5