Essayer de configurer rsync chroot'd

10

J'essaie de configurer un serveur de sauvegarde. Je veux chrooter chaque utilisateur (client) dans son répertoire personnel et lui permettre uniquement d'utiliser sftp et rsync .

J'ai rapidement découvert que je n'étais pas le seul à essayer de faire quelque chose comme ça, et j'ai trouvé ce guide et l' ai suivi. Alors maintenant, je n'ai que des utilisateurs chrootés avec sftp.

Ensuite, j'ai découvert que rsync a besoin de ssh pour se reproduire sur l'autre machine, et que sftp n'est pas suffisant. Donner à chaque utilisateur une connexion ssh est quelque chose que je voulais éviter en premier lieu.

Quelqu'un peut-il penser à des solutions possibles?

Merci,

marque

Mark R.
la source
Jetez un oeil à cette réponse que j'ai écrite un peu de temps aller serverfault.com/questions/255084/…
user9517

Réponses:

11

Une solution sftp nécessiterait également une connexion ssh pour tout le monde, donc vous n'avez vraiment rien perdu ici. Accorder l'accès ssh n'implique pas nécessairement un accès shell complet, par exemple, cela montre comment utiliser le authorized_keysfichier ssh pour permettre la sauvegarde via rsync tout en limitant les commandes disponibles au récepteur rsync uniquement .

En fait, si vous optez pour l'authentification par clé, plutôt que l'authentification par mot de passe (ce que vous devriez), vous pouvez alors tout exécuter sous un seul compte d'utilisateur au lieu d'exiger plusieurs comptes. Vous utiliseriez des clés pour identifier les utilisateurs distants et dirigeriez le récepteur rsync vers un répertoire particulier.

Quelque chose comme ça, dans votre authorized_keysfichier:

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

Une personne utilisant la user1clé privée effectuera une sauvegarde dans /tmp/user1, et une personne utilisant la user2clé privée effectuera une sauvegarde dans /tmp/user2. Et ainsi de suite...

larsks
la source
Link is gone 404.
luckydonald
J'ai mis à jour le lien.
larsks
6

Exécutez l'habituel rsyncdu client au serveur distant, mais ajoutez un commutateur verbeux supplémentaire:, SSH -vpuis grep for Sending command. Vous verrez la commande exacte que le client envoie au serveur distant:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

Dans mon cas, c'était

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

Ajoutez ceci command="..."au /home/USER/.ssh/authorized_keysfichier du serveur distant comme @larsks l'a mentionné. Ajoutez des paramètres de sécurité supplémentaires, si nécessaire:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

Tous ensemble:

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

(Tiré d'un très bon tutoriel http://en.positon.org/post/Rsync-command-restriction-over-SSH )

Arnis Juraga
la source
Bonne 1ère réponse.
slm
2

Vous devrez fournir une forme d'accès au shell pour pouvoir utiliser rsync à moins que vous vous connectiez directement au serveur rsync - le port par défaut est 873 (TCP).

Depuis la page de manuel de rysnc :

Il existe deux façons différentes pour rsync de contacter un système distant: en utilisant un programme shell distant comme transport (tel que ssh ou rsh) ou en contactant un démon rsync directement via TCP. Le transport shell distant est utilisé chaque fois que le chemin source ou de destination contient un seul séparateur deux-points (:) après une spécification d'hôte. Contacter un démon rsync se produit directement lorsque le chemin source ou de destination contient un double séparateur (: :) après une spécification d'hôte, OU lorsqu'une URL rsync: // est spécifiée (voir également les fonctionnalités lqUSING RSYNC-DAEMON VIA A REMOTE-SHELL CONNECTIONrq pour une exception à cette dernière règle).

Pour fournir un accès shell limité, consultez le guide suivant . (Remarque: le lien d'origine est mort) Résumé:

Cette configuration combine les meilleures fonctionnalités de rsync, SSH et chroot. Rsync offre la flexibilité et l'efficacité dans le transfert de fichiers, SSH protège les données transférées et chroot protège les données sur le serveur contre tout accès non autorisé. Le mannequin limite uniquement l'accès à rsync.

Bien que le serveur rsync implémente chroot, il ne dispose pas de la protection SSH souvent requise. De plus, l'ouverture d'un port de serveur rsync supplémentaire présente un risque pour la sécurité et n'est parfois pas possible techniquement ou politiquement. Sftp et scp n'ont pas la flexibilité et l'efficacité fournies par rsync, en particulier lorsqu'une arborescence de répertoires est impliquée, comme un site Web.

Ou jetez un œil à l'utilisation de rssh (il y a un guide pour configurer rssh ici ):

rssh est un shell restreint à utiliser avec OpenSSH, autorisant uniquement scp et / ou sftp. Il inclut désormais également la prise en charge de rdist, rsync et cvs. Par exemple, si vous avez un serveur dont vous souhaitez uniquement autoriser les utilisateurs à copier des fichiers depuis via scp, sans fournir un accès shell, vous pouvez utiliser rssh pour cela.

runlevelsix
la source
1
Les nouvelles actuelles sont que rssh n'est pas maintenu et a un trou de sécurité étrange. Vérifiez l'état actuel avant d'investir dans celui-ci.
chutz
2
Vous pouvez utiliser le script perl rrsyncau lieu de rssh, inclus dans le package rsync officiel. Voir derek.simkowiak.net/backing-up-multiple-servers-with-rsnapshot
unhammer
0

vous pouvez écrire un shell qui encapsule rsync.

regardez l'idée générale ici: https://sixohthree.com/1458/locking-down-rsync-using-ssh

dans votre enveloppe, vous pouvez faire ce que vous voulez et peut-être chrooter l'utilisateur.

Dans mon cas, j'avais besoin d'activer le compte virtuel en utilisant le même utilisateur * nix. J'arrive à le faire en utilisant ce type de shell et de nombreuses lignes dans le fichier authorized_keys. Je n'ai pas chrooté l'utilisateur mais j'ai ajouté un niveau de dossier utilisateur dans la commande du serveur rsync.

regarder différemment l'utilisateur du processus à l'aide de la clé ssh

quazardous
la source
0

SFTP avec capacités Rsync, sans shell

Vous pouvez utiliser LFTP + SFTP dans un environnement chroot et obtenir les mêmes résultats que l'utilisation de rsync, sans fournir à l'utilisateur un shell ou effectuer de personnalisations lourdes dans ssh avec des wrappers.

Ceci est plus sûr et peut être considérablement plus rapide.

Aaron
la source
0

Rsync dans chroot est délicat :) Vous devrez configurer un environnement minimal pour / bin / sh et / usr / bin / rsync dans le répertoire chrooté (côté destination) pour que cela fonctionne.

Voir l'article entier ici, la configuration de l'environnement rsync est à la fin
https://medium.com/@deltazero/linux-remote-backup-rsync-chroot-d797ba6babe5

dayvee.cz
la source