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)

dimanche 20 juin 2010

Tunnel SSH inverse pour connexion SSH vers une machine NATée

Comment prendre la main en SSH sur un serveur planqué derrière une passerelle NAT ?

On utilise un tunnel SSH inverse :

nated-host$ ssh -R 2222:localhost:22 anyuser@public-host
anyuser@public-host$

Cette commande ouvre le port 2222 sur public-host et le redirige vers le port 22 local de nated-host.

Et pour finir, depuis public-host, on se connecte en ssh sur le port 2222 local, pour tomber sur nated-host :

public-host$ ssh -p2222 localhost
nated-host$

Références :

jeudi 10 décembre 2009

[SSH] Changement de répertoire à la connexion

Problème :

Je souhaite créer un alias serveur-www qui me connecte au serveur en SSH et m’amène automatiquement dans le dossier /var/www/.

Voici :

ssh -t serveur 'cd /var/www && $SHELL'

Et pour l’alias qu’on pourra ensuite mettre dans son ~/.bashrc :

alias serveur-www="ssh -t serveur 'cd /var/www && $SHELL'"
serveur-www # pour tester

Références :

lundi 3 août 2009

Fail2ban

Si vous constatez de nombreuses tentative de connexion par ssh dans votre fichier /var/log/auth.log (robots qui testent des utilisateurs/mots de passes), il faut faire quelque chose.

Le plus simple est de mettre en place une restriction par IP dans votre pare-feu iptables, ou dans /etc/hosts.deny

Si vous ne pouvez/voulez pas mettre en place cette restriction, utilisez Fail2ban :

aptitude install fail2ban

L’installation par défaut bloque les tentatives de connexion SSH.

On peut adapter un peu la configuration, ou activer Fail2ban pour d’autres services. Exemple :

vi /etc/fail2ban/jail.conf
bantime  = 86400
maxretry = 10 # pour ssh
enabled  = true # pour vsftpd
maxretry = 10 # pour vsftpd

Ensuite, la commande iptables -L donne les adresses IP qui ont été bannies.

mardi 12 août 2008

Afficher l'empreinte SSH d'un système

Pour afficher l’empreinte digitale (fingerprint) d’un système Unix :

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

Source : http://ubuntuforums.org/showthread....