Trucs libres

CV Diaspora
en

mercredi 29 décembre 2010

Restriction de commande Rsync par SSH

Vous disposez de deux systèmes et vous voulez mettre en place une sauvegarde sécurisée par rsync + SSH d’un système sur l’autre.

De manière très simple, vous pouvez utiliser la commande :

backup.example.com# rsync -avz --numeric-ids --delete root@myserver.example.com:/path/ /backup/myserver/

Pour faire la sauvegarde, vous devez être root sur le serveur, car certains fichiers ne sont lisibles que par root.

Problème : vous allez autoriser backup.example.com à faire n’importe quoi sur myserver.example.com, alors qu’un simple accès en lecture seule sur un dossier suffit.

Pour résoudre ce problème, il suffit d’utiliser la directive command="" dans le fichier authorized_keys pour filtrer la commande lancée.

Pour trouver cette commande, on lance rsync en ajoutant l’option -e'ssh -v' :

rsync -avz -e'ssh -v' --numeric-ids --delete root@myserver.example.com:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

On obtient un résultat du genre :

debug1: Sending command: rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/

Maintenant, il suffit d’ajouter la commande avant la clé dans le fichier /root/.ssh/authorized_keys :

command="rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/" ssh-rsa AAAAB3NzaC1in2EAAAABIwAAABio......

Et pour encore plus de sécurité, on pourra ajouter un filtre par IP, et autres options :

from="backup.example.com",command="rsync --server --sender -vlogDtprze.iLsf --numeric-ids . /path/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1in2EAAAABIwAAABio......

Maintenant, vous pouvez essayer d’ouvrir un shell ssh, ou de lancer d’autres commandes rsync non autorisées...

Notes :

  • Attention, si vous changez les options de la commande rsync, à ne pas oublier de modifier aussi le fichier authorized_keys.
  • Plus besoin de chroot compliqué, vous pouvez oublier mon précédent article : /post/SFTP-chroot-rsync

Voir aussi :

  • man ssh #/AUTHORIZED_KEYS FILE FORMAT
  • man rsync
  • view /usr/share/doc/rsync/scripts/rrsync.gz (restricted rsync, vous permet de gérer précisément les options autorisées)

vendredi 9 octobre 2009

SFTP chroot + rsync

On le trouve partout. Voici comment créer des partages sftp en chroot.

Dans le fichier /etc/ssh/sshd_config :

# on utilise le sftp interne d'openssh
# car la commande /usr/lib/openssh/sftp-server ne sera pas disponible dans le chroot
Subsystem sftp internal-sftp

Match group sftp
        ChrootDirectory %h
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

MAJ 17/06/2010 : Attention à la syntaxe ! Les commentaires doivent commencer en début de ligne uniquement, et il ne doit pas y avoir d’espace en fin de la ligne ForceCommand internal-sftp.

Il suffit ensuite de créer des utilisateurs appartenant au groupe sftp, et le tour est joué. On teste par :

sftp user@myserver.com

Problème si on veut utiliser la commande rsync pour transférer des fichiers, car la commande rsync n’est pas disponible dans le chroot.

En premier lieu, on autorise d’autres commandes que "internal-sftp" en commentant la ligne :

#ForceCommand internal-sftp

Ensuite, on crée l’arborescence suivante dans le dossier chroot :

bin/
bin/bash
bin/rsync
lib/
lib/libncurses.so.5
lib/ld-linux.so.2
lib/libacl.so.1
lib/libpopt.so.0
lib/libattr.so.1
lib/i686
lib/i686/cmov
lib/i686/cmov/libdl.so.2
lib/i686/cmov/libc.so.6

Il s’agit des commandes bash et rsync, ainsi que toutes leurs librairies (que l’on peut obtenir à l’aide de la commande ldd)

Note : l’utilisateur doit avoir /bin/bash comme shell par défaut.

Note 2 : le dossier du chroot doit appartenir à root, bien que ça soit le dossier de l’utilisateur. Pour permettre à l’utilisateur d’écrire dedans, il faut créer un sous dossier où il a les droit. C’est une contrainte importante, mais nécessaire à la sécurité d’un chroot, vous dirons les programmeurs d’OpenSSH.

Références :

mardi 29 juillet 2008

Sauvegarde intelligente avec rsync

rsync est un outil très puissant de copie/transfer/sauvegarde de fichiers sous Unices.

Pour effectuer une sauvegarde triviale, on peut l’utiliser de la manière suivante :

rsync -av MES_DONNEES DOSSIER_SAUVEGARDE

Plutôt que de refaire une copie intégrale de mes données dans le dossier de sauvegarde à chaque sauvegarde, il est plus intelligent d’utiliser rsync combiné avec le système de fichiers ext3 pour faire des sauvegardes incrémentales.

cp -al DOSSIER_SAUVEGARDE_HIER DOSSIER_SAUVEGARDE
rsync -av MES_DONNEES DOSSIER_SAUVEGARDE

Le cp -al recopie le dossier en créant des nouveau répertoire, mais en faisant des liens en dur vers les fichiers. En faisant un rsync par dessus, seuls les fichiers modifiés sont copiés. Ainsi, on utilise de l’espace disque en plus seulement pour les nouveaux fichiers. Le plus fort, c’est qu’on peut accéder à chaque dossier de sauvegarde de manière très rapide car ils sont tous identiques aux originaux. Un mini système de gestion de versions très simple à mettre en place.

Mais le plus fort c’est que rsync peut tout faire à notre place :

rsync -av --link-dest=DOSSIER_SAUVEGARDE_HIER MES_DONNEES DOSSIER_SAUVEGARDE