Devenez miroir de Wikileaks sans risque (corrigé)
Bon, d’habitude on se refuse de parler politique sur Geekfault… Mais on ne peut pas se taire plus longtemps sur ce qui se passe du côté de Wikileaks. En tant que geeks nous devons nous lever et protester contre ces atteintes à la liberté d’expression sur Internet.
Wikileaks a aujourd’hui publié sa solution à la censure : le mirroring. Si Wikileaks est consultable sur des centaines de noms de domaine et des centaines d’IPs, il sera d’autant plus difficile de tous les faire taire.
A noter que cet article, bien qu’entièrement orienté autour de ce sujet, s’applique aussi si vous souhaitez offrir à quelqu’un un accès SSH chrooté et aux commandes limitées.
Mise à jour : Mes mesures de sécurité étaient trop optimistes : Rsync n’utilise pas du SFTP mais doit pouvoir lancer un serveur Rsync sur sa destination en SSH. Voici donc une nouvelle version de cet article, testé et approuvé.
Le problème
Pour décentraliser la chose, les administrateurs de Wikileaks demande à tous les volontaires de leur offrir un accès en SSH à leur serveur pour pouvoir y pousser un miroir de Wikileaks et le garder à jour grâce à Rsync.
Ca qui m’a dérangé c’est le fait de donner un accès SSH à des inconnus sur mon serveur. Mais la solution existe : CHROOTER ce compte à un endroit où il ne peut faire aucun mal au système. Voici comment faire.
Attention : cet article ne porte bien évidemment pas sur la sécurisation de votre serveur. Il présente juste une manière d’éviter que les administrateurs de Wikileaks (que vous ne connaissez pas) aient trop de libertés sur votre serveur (et, oui, je suis paranoïaque sur le coup).
NB : Si vous souhaitez devenir très simplement un miroir Wikileaks et que vous leur faites entièrement confiance, les étapes “Créer l’utilisateur“, “Configurer un nom de domaine et un VirtualHost” et “Soumettre votre miroir à Wikileaks” sont suffisantes.
Sécuriser OpenSSH
On va donner à Wikileaks (ou toute personne ayant leur clé RSA privée) un accès SSH sur notre serveur. Mais on ne veut prendre aucun risque : cet accès n’aura aucune autre possibilité que de déposer des fichiers là où on l’y autorise, c’est-à-dire dans sa home.
Pour cela, modifiez votre fichier /etc/ssh/sshd_config. Vérifiez d’abord que vous avez ces trois lignes qui autorisent la connexion avec une clé publique RSA.
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Dernièrement, à la fin du fichier créez une nouvelle règle d’override telle que celle-ci :
ChrootDirectory /home/wikileaks
X11Forwarding no
AllowTcpForwarding no
Cette règle est assez explicite et fait simplement en sorte que l’utilisateur wikileaks soit Chrooté dans sa home. Redémarrez SSHd.
Créer l’utilisateur
Rien de bien sorcier :
# useradd -d /home/wikileaks -s /bin/bash wikileaks
# chown wikileaks:wikileaks /home/wikileaks
Ensuite autorisons la connexion des administrateurs de Wikileaks :
$ mkdir ~/.ssh
$ wget http://wikileaks.ch/id_rsa.pub -O ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
Pour finir, n’oublions pas de créer le répertoire où sera hébergé le miroir :
Créer l’environnement chroot
Pour qu’un chroot fonctionne correctement, il faut que sa racine appartienne à root. Nous créons aussi les deux répertoires indipensables à l’exécution d’un rsync : /bin et /lib.
# mkdir /home/wikileaks/bin
# mkdir /home/wikileaks/lib
Ensuite copions les binaires nécessaires pour faire un Rsync :
# cp `which rsync` /home/wikileaks/bin/rsync
Pour que ces binaires fonctionnent, il faut aussi copier les librairies nécessaires. Pour lister ces librairies vous pouvez exécuter un ldd puis copiez une à une ces libraires
# cp /lib/libncurses.so.5 /home/wikileaks/lib/
...
Attention : si votre serveur est un système 64bits il faudra créer le dossier /home/wikileaks/lib64/ et le peupler avec les librairies venant de /lib64.
Au final vous devriez arriver à une structure proche de celle-ci :
|- bash
|- rsync
lib
|- ld-linux.so.2
|- libacl.so.1
|- libattr.so.1
|- libc.so.6
|- libdl.so.2
|- libncurses.so.5
|- libpopt.so.0
Dès maintenant, si on se chroote dans /home/wikileaks on n’aura que très très peu de possibilités : les commandes internes à bash et rsync.
Un dummyshell
Oui, je suis d’accord, les commandes internes de bash c’est encore trop! Nous permettons un accès SSH qui pourrait potentiellement lancer une fork bomb par exemple. Nous allons donc créer un shell stupide qui ne permet que de lancer un serveur Rsync. Créez le fichier /home/wikileaks/bin/dummyshell :
if (( $# == 0 )); then
printf "%s\n" "shell access is disabled. sorry."
exit 1
elif (( $# == 2 )) && [[ $1 == "-c" && $2 == "rsync --server"* ]]; then
exec $2
fi
Il faut ensuite le rendre exécutable et utilisé comme shell par défaut de l’utilisateur :
# ln -s /home/wikileaks/bin/dummyshell /bin/dummyshell
# usermod -s /bin/dummyshell wikileaks
C’est maintenant officiel, l’utilisateur wikileaks ne peut rien faire de plus que lancer un serveur Rsync ! Et il y a aussi la sécurité du Chroot.
Test
Je vous recommande de tester le tout, pour être sûr que Wikileaks pourra uploader son site sur votre serveur. Pour cela ajoutez votre propre clé RSA dans une nouvelle ligne de /home/wikileaks/.ssh/authorized_keys et tentez d’envoyer un fichier :
Vous pouvez également éprouver la sécurité en tentant de vous connecter en SSH ou d’exécuter une commande en SSH -t.
Configurer un nom de domaine et un VirtualHost
Je suppose que vous vous en sortirez sur ce point-là : créez un nom de domaine (ou un sous-domaine) pour votre miroir et configurez votre serveur web en conséquence.
Le DocumentRoot à spécifier est bien /home/wikileaks/www
Profitez-en pour empêcher l’exécution de scripts sur le répertoire :
AllowOverride None
Options -ExecCGI
</Directory>
Soumettre votre miroir à Wikileaks
Rendez-vous sur http://46.59.1.2/mass-mirror.html et soumettez votre miroir !
Sous “absolute path where we should upload the html data” mettez simplement “/www/”.
Normalement Wikileaks pushera l’entièreté du site sur votre serveur. Félicitations, vous défendez la liberté d’expression sans risque majeur pour votre serveur !
Très très bon billet, très utile, merci !
fb10oi