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 !
“En tant que geeks nous devons nous lever et protester contre ces atteintes à la liberté d’expression sur Internet.”
s/geeks/citoyens
Ce serait dommage que la liberté d’expression sur Internet ne concerne que les geeks.
Super article 🙂
Pourquoi ne pas le diffuser sur le planet-libre? 🙂
@matttbe Petit oubli corrigé 🙂
plus besoin de remplacer
Subsystem sftp /usr/lib/openssh/sftp-server
par
Subsystem sftp internal-sftp -l VERBOSE
?
après avoir suivi le tuto en faisant le test du rsync j’ai un “no such file or directory”, any idea?
—
tieum$ rsync -ave ssh level3.c wikileaks@monserveur.com:/www
/bin/dummyshell: No such file or directory
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
—
dans mon auth.log j’ai des pb de reverse mapping mais je ne crois pas que ce soit bloquant
—
sshd[28387]: reverse mapping checking getaddrinfo for xxxx [xx.x.xxx.xx] failed – POSSIBLE BREAK-IN ATTEMPT!
Cette solution “Sans risque” preserve-t-elle d’une failel dans le kernel permettant à un utilisateur de devenir root comme ç’est déja arrivé plusieurs fois ces dernières années?
bon c’est bon pour moi, c’est mon chroot qui était ko, mon bash avait une dépendance vers lib64/ld-linux-x86-64.so.2 que j’avais zappé..
Merci pour le tuto 😉
très bon tuto merci, on vous a mis en lien.
@tieum Ca n’a que peu d’importance puisque nous ne limitons plus l’accès au SFTP seulement.
@tieum Heureux que tu aies pu résoudre ton problème avant que je ne passe 😀
@Tuxicoman Je pense bien oui : la seule chose permise sur ce compte SSH est de lancer la commande “rsync –server” sans autre argument. Une élévation de privilèges requièrerait d’abord de trouver une faille dans Rsync ou bash le permettant.
Très intéressant ! Quel volume de données représente Wikileaks une fois le miroir actif ?
@Nicolargo De l’ordre de 50Mo pour l’instant il me semble.
Super article, il va falloir que je mettes un peu à jour mon mirroir (et mon serveur tout cours) en prenant en compte les pistes de cet article.
@tito : si ça peux t’intéresser j’avais fait un petit article sur le chroot jail avec OpenSSH – http://www.prometee-creation.com/tutoriels/openssh-server-avec-chroot-jail.html
@Nicolargo 70Mo pour l’instant
@prometee Lien très intéressant pour ceux qui veulent élargir les possibilités du SSH limité
@Nicolargo A prévoir: 2 gigas si tous les câbles sortent ou que WL remet à dispo le fichier “insurance” crypté de 1,2Go
Plus d’info & petit débat sur linuxFR :
http://linuxfr.org/~geb/30533.html
Très intéressant, merci pour ce tuto,
Par contre j’ai le même problème que tieum en #5, sauf que j’ai vérifié et que je n’ai oublié de copier aucune des dépendances…
@Dr Emixam As-tu relancé SSHd ?
Oui bien sur j’ai relancé sshd.
Juste pour être sur au niveau des propriétaires des fichiers
/home/wikileaks/
/home/wikileaks/bin/*
et /home/wikileaks/lib/*
doivent appartenir à root et le reste du contenu de /home/wikileaks appartient à l’utilisateur ?
Ok, j’ai trouvé le problème, sur un système 64bits il faut copier les libs qui sont dans /lib64 dans un dossier lib64 et pas dans lib
@Dr Emixam Génial, je corrige l’article.
Très très bon tuto. Ca ouvre d’autres perspectives :). Merci
J’ai un léger doute sur l’absolute path dans le formulaire de wikileaks.
Si je me connecte sous l’utilisateur wikileaks en faisant un #su wikileaks puis un touch /www/test il tente de créé le fichier dans le sous-dossier www de la racine du serveur (la vraie).
Des infos ? J’ai surement du rater quelque chose.
Have Fun
PS: Merci pour le tuto
Bonjour,
D’abord merci pour le tuto.
Ensuite, j’aimerais savoir si c’est pas possible de faire des liens symboliques vers les binaires/librairies plutôt que de les copier. Ça ferait de la place…
@rOOT Oui c’est normal, le chroot n’est effectué que si tu te connectes en SSH.
@She0gorath : Non les liens symboliques ne fonctionneraient pas dans l’environnement chrooté. En même temps on parle de 3Mo de fichiers copiés hein…
@Tito no comment,
/hide
Dépôt effectué durant la journée pour un total de 80Mo.
Dec 8 10:17:48 ** sshd[24248]: Accepted publickey for wikileaks from 90.61.49.177 port 57932ssh2
Dec 8 10:54:38 ** sshd[25457]: Accepted publickey for wikileaks from 90.61.49.177 port 35930ssh2
J’ai également copiée les fichier relatif à bash (~/.profile, ~/.bashrc), j’ai donc un .bash_history
En fait ça dépend de ta distrib :
* Sur la famille RPM, /lib et /usr/lib sont toujours 32 bits, y compris sur un système 64 bits
* Sur la famille DEB, /lib et /usr/lib hébergent les librairies natives du système.
Salut à tous,
j’ai vraiment l’intuition que votre site est super (malheureusement innaccessible à la débutante que je suis) plein de mots que je pige pas (chrooter, openSSH….)
alors en attendant de devenir une pure Geek, je vais copier cette page et voir si je trouve un pote capable de la décripter pour moi et surtout de m’aider à installer le miroir…
s’il y a un volontaire parmis vous , je suis preneuse ^^
en tous cas je vous ai glissé dans mes favoris
merci pour ce partage
@chamane76 N’hésite pas à passer sur notre channel IRC si tu as besoin d’assistance : #geekfault sur irc.geeknode.org
Merci, je vais passer mon dimanche à paramétrer tout ça.
L’information indépendante est la première des libertés… Elle garantie une vraie démocratie et assure donc le pouvoir au peuple.
Vouloir interdire Wikileaks (prétexte de sécurité d’État et de liberté) est une aberration, surtout dans un pays comme la France qui paraît-il est le pays des droits de l’homme.
Quels sont les chances qu’un agent secret du FBI des usa débarque chez moi?? :\ Je ne veux pas passer le reste de ma vie à avoir peur et devoir me cacher dans mon abris anti-atomique … 🙂
Super tuto !! Qui peut très bien servir pour d’autres usages ^^
Par contre, pour que le dummyshell fonctionne, j’ai dû également le copier dans le /bin du système en plus de /home/wikileaks/bin chrooté.
Effectivement, sous Debian 5, il faut aussi faire:
ln -s /home/wikileaks/bin/dummyshell /bin/.
Afin que “ssh” voit aussi “/bin/dummyshell” comme un shell valide (avant de chrooter)
A+ et Vive l’Anarchie!
Ça parait logique mais au cas où je préfère préciser que la manip’ nécessaire sous Debian s’applique bien évidemment sous Ubuntu aussi.
Le lien manquant est une petite coquille qui s’est glissée lors de la dernière édition de l’article (il y était à l’origine). Le tuto est corrigé 😉
Salut,
combien de temps pour que le miroir se remplisse ?
le fichier de test a été déposé il y a presque 48h maintenant et rien pour l’instant
sinon, j’ai établi un quota de 200Mo pour mon miroir, ca devrait passer au vu des commentaires précédents.
Je ne sais pas combien de temps ils mettent maintenant qu’ils ont près de 2000 miroirs… A mon époque (dans les 100 premiers) c’était 2-3 heures.
Pour le moment le miroir occupe 120Mo mais ça va sûrement dépasser les 200Mo que tu as fixés puisqu’il leur reste 99,47% des cables à publier 😀
Salut à tous !
Il est impossible de soumettre mon miroir à Wikileaks, pourquoi ?
Quand je clique sur ” Ok, Please add my server” Le lien est brisé.
Comment je peu faire ?
a+
Salut les gens !
Je me suis loué un dédié depuis peu avec un pote, pour pouvoir bidouiller, et aussi apporter la touche à l’édifice qu’est wikileaks !!
Malheureusement, on arrive pas à correctement suivre le tutoriel, ya toujours quelque chose qui chie, en l’occurrence, la demande d’un mot de passe par l’user wikileaks …
Rassurez vous, je suis pas novice, je programme déja à la base (dev flash et tout ce qui tourne autour).
Quelqu’un serait il motivé pour une session chat ? Pour m’aider à monter tout ça, yen aurait pas pour longtemps 🙂
Normalement il ne demande pas de mot de passe si tu as bien configuré OpenSSH (au tout début du tuto) et utilise une clé publique (la seule méthode que Wikileaks autorise en SSH) comme expliqué dans http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/
Si tu as besoin d’aide n’hésite pas à passer sur notre chat IRC : #geekfault sur irc.geeknode.org il y a toujours des gens pour aider 😉
en cas d’erreur :
fatal: bad ownership or modes for chroot directory component “/home”
faire
chmod 755 /home
(trouvé ici http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny#comment-11657)
Pourquoi s’emmerder, il y a rssh : http://www.pizzashack.org/rssh/
N’oubliez pas mes amis, la journée du 24 février 2011 c’est le jour des révélations en Algérie (Bouteflika, Benboubouzid, Ghoumam Allah, Khalida toumi et Ouyahia sont concernés… ils ont sucé le sang du peuple algérien des milliards détournés, cachés, transférés vers des banques étrangères en secret… ) soyez au rendez-vous mes amis Wikileaks a déjà révélé 60% de ce dossier très lourd…