05/12/2010

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.

RSAAuthentication yes
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 :

Match user wikileaks
         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 :

# mkdir /home/wikileaks
# useradd -d /home/wikileaks -s /bin/bash wikileaks
# chown wikileaks:wikileaks /home/wikileaks

Ensuite autorisons la connexion des administrateurs de Wikileaks :

# su - 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 :

$ mkdir ~/www

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.

# chown root:root /home/wikileaks
# mkdir /home/wikileaks/bin
# mkdir /home/wikileaks/lib

Ensuite copions les binaires nécessaires pour faire un Rsync :

# cp `which bash` /home/wikileaks/bin/bash
# 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

# ldd `which bash` `which rsync`
# 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 :

bin
 |- 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 :

#!/bin/bash
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 :

# chmod +x /home/wikileaks/bin/dummyshell
# 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 :

$ rsync -ave ssh test.html wikileaks@votreServeur:/www

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 :

<Directory "/home/wikileaks/www">
        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 !

  1. | #1

    “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.

  2. | #2

    Super article 🙂

    Pourquoi ne pas le diffuser sur le planet-libre? 🙂

  3. | #3

    @matttbe Petit oubli corrigé 🙂

  4. tieum
    | #4

    plus besoin de remplacer
    Subsystem sftp /usr/lib/openssh/sftp-server
    par
    Subsystem sftp internal-sftp -l VERBOSE
    ?

  5. tieum
    | #5

    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!

  6. | #6

    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?

  7. tieum
    | #7

    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 😉

  8. | #8

    très bon tuto merci, on vous a mis en lien.

  9. | #9

    @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.

  10. | #10

    Très intéressant ! Quel volume de données représente Wikileaks une fois le miroir actif ?

  11. vincent
    | #11

    @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.

  12. | #12

    @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

  13. | #13

    @Nicolargo 70Mo pour l’instant

    @prometee Lien très intéressant pour ceux qui veulent élargir les possibilités du SSH limité

  14. | #14

    @Nicolargo A prévoir: 2 gigas si tous les câbles sortent ou que WL remet à dispo le fichier “insurance” crypté de 1,2Go

  15. | #15

    Plus d’info & petit débat sur linuxFR :

    http://linuxfr.org/~geb/30533.html

  16. | #16

    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…

  17. | #17

    @Dr Emixam As-tu relancé SSHd ?

  18. | #18

    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 ?

  19. | #19

    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

  20. | #20

    @Dr Emixam Génial, je corrige l’article.

  21. MarcSpitz
    | #21

    Très très bon tuto. Ca ouvre d’autres perspectives :). Merci

  22. rOOT
    | #22

    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

  23. She0gorath
    | #23

    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…

  24. | #24

    @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…

  25. rOOT
    | #25

    @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

  26. pini
    | #26

    Dr Emixam :
    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

    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.

  27. chamane76
    | #27

    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

  28. | #28

    @chamane76 N’hésite pas à passer sur notre channel IRC si tu as besoin d’assistance : #geekfault sur irc.geeknode.org

  29. | #29

    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.

  30. Slinky3d
    | #30

    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 … 🙂

  31. | #31

    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é.

  32. | #32

    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!

  33. | #33

    Ç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.

  34. | #34

    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é 😉

  35. | #35

    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.

  36. | #36

    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 😀

  37. yéman
    | #37

    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+

  38. Thomas
    | #38

    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 🙂

  39. | #39

    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 😉

  40. | #40

    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)

  41. de passage
    | #41

    Pourquoi s’emmerder, il y a rssh : http://www.pizzashack.org/rssh/

  42. castro
    | #42

    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…

Page des commentaires
  1. | #1
  2. | #2
  3. | #3
  4. | #4
  5. | #5
  6. | #6
  7. | #7
  8. | #8