Installer le core MLDonkey dans un chroot
Auteur : Olivier BOYER - oboyer () ajoute ! org
Mots clés
OpenBSD, chroot, MLDonkey core, mlnet
Introduction
Ce document décrit comment installer la partie “core” du logiciel d'échange de pair à pair MLDonkey dans un “environnement à racine déplacé” (aussi appelé cage ou chroot) sous OpenBSD.
Il existe de nombreux logiciels d'échanges de pair à pair (“peer to peer” en Anglais). L'architecture de MLDonkey a un avantage certain sur les autres : le moteur d'échange (MLDonkey core ou mlnet) de fichiers est séparé de l'interface utilisateur (Interface Homme Machine, ou Graphical User Interface). Ainsi il est possible d'exécuter le moteur d'échange de fichiers sur une machine, et l'interface utilisateur sur une autre.
MLDonkey est utilisé ici en version 2.9.5, disponible à l'url : http://www.mldonkey.org.
La partie core de MLDonkey (appelée mlnet) est compilée statiquement pour faciliter l'installation dans un environnement à racine déplacé.
Présentation de la maquette
MLDonkey core(=mlnet) s'exécute sur une machine fonctionnant sous OpenBSD 4.3- L'interface utilisateur s'exécute sur une autre machine du réseau local, ici sous Linux Ubuntu
mlnetest compilé de manière statiquemlnets'exécute dans unchroot, ici/spacemlnets'exécute sous l'identité d'un utilisateur dédié, ici_donkey.
Note
Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.
Pré-requis
- Le système d'exploitation OpenBSD de la machine serveur doit être installé et fonctionnel.
MLDonkeyest écrit enObjectivCaml, avec certaines parties en langageCet enAssembleur. Il faut donc qu'ObjectivCamlsoit installé sur le système.- Pour la compilation de
MLDonkey, il faut que leGNU make,autoconf,automakesoient installés.
Installer ObjectivCaml
Sur OpenBSD 4.3, procédez comme suit :
# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/" # pkg_add ocaml # pkg_add bzip2
Télécharger et compiler mlnet
Toutes les commandes présentées ici peuvent être exécutées en tant qu'utilisateur non privilégié.
Pour faciliter les opérations, positionner comme suit la variable d'environnement :
$ export VER="2.9.5"
Télécharger MLDonkey
La version utilisée ici est la 2.9.5 de Mai 2008.
Procédez comme suit :
$ cd /tmp
$ ftp http://ovh.dl.sourceforge.net/sourceforge/mldonkey/mldonkey-${VER}.tar.bz2
$ bunzip2 mldonkey-${VER}.tar.bz2
$ tar xf mldonkey-${VER}.tar
$ cd mldonkey-${VER}
Compiler mlnet
La compilation du produit se fait de manière statique pour faciliter l'installation de la partie core dans un environnement à racine déplacé.
Procédez comme suit :
$ cd /tmp/mldonkey-${VER}
$ ./configure
[...]
Si ObjectivCaml n'est pas installé dans votre environnement, le script configure vous propose de le télécharger, et compiler dans le répertoire courant. Pour l'installer répondez y si la question vous est posée. Dans ce document, ObjectivCaml a été installé via les ports d'OpenBSD.
A la fin de la configuration, le résumé suivant s'affiche :
Configuring MLDonkey 2.9.5 completed. Network modules: - eDonkey enabled (eMule SUI enabled) - BitTorrent enabled - FileTP (aka wget) enabled - Fasttrack enabled - Gnutella disabled - unmaintained - Gnutella2 disabled - unmaintained - Direct Connect enabled - Open Napster disabled - currently not usable - Soulseek disabled - currently not usable - OpenFT disabled - currently not usable Core features: - zlib (required) enabled - threads enabled - bzip2 enabled - iconv enabled - libmagic disabled - graphical stats enabled - png support enabled - jpg support enabled Compilers: - Ocaml version 3.09.3 - gcc version 3.3.5 - g++ version 3.3.5 Now execute 'gmake' to start compiling. Good luck! To compile a static code execute: gmake mlnet.static To produce a release tarball execute: gmake release.mlnet.static To clean the build directory execute: gmake maintainerclean Compiling CryptoPP.cc can take several minutes, on slow machines up to half an hour.
Comme suggéré, pour compiler mlnet statiquement, exécutez la commande suivante :
$ gmake mlnet.static [...]
A la fin de la compilation le binaire mlnet.static est généré à la racine du répertoire courant.
Pour vérifier que le binaire est bien compilé statiquement, exécutez les commandes suivantes :
$ file mlnet.static mlnet.static: ELF 32-bit LSB executable, Intel 80386, version 1, for OpenBSD, statically linked, not stripped $ $ ldd mlnet.static mlnet.static: ldd: mlnet.static: not a dynamic executable
MLDonkey core aka mlnet est maintenant compilé, prêt à être exécuté dans un environnement à racine déplacé.
Installer mlnet
L'installation de MLDonkey core consiste simplement à copier le binaire dans le répertoire cible, ici /space.
Ce binaire s'exécutera sous l'identité d'un utilisateur dédié, pour minimiser l'impact en cas de problème de sécurité.
L'exécution de mlnet se 'effectuera dans un système à racine déplacé (chroot(4)). Il faut créer cette nouvelle racine et configurer son contenu.
Pour faciliter les opérations, positionner comme suit la variable d'environnement :
# export VER="2.9.5" # export DIR="/space"
Créer un utilisateur dédié
Pour créer un utilisateur dédié, procédez comme suit :
# groupadd -g 604 _donkey # useradd -d /nonexistent -s /sbin/nologin -c "MLDonkey Core Daemon" \ -u 604 -g 604 _donkey
Créer la cage de mlnet
Créer les répertoires
Procédez comme suit :
# mkdir -p ${DIR}/{dev,etc,log,mldonkey,tmp}
#
# chown -R root:wheel ${DIR}
# chmod -R 751 ${DIR}
#
# chown root:_donkey ${DIR}/bin
# chmod 710 ${DIR}/bin
#
# chown _donkey:wheel ${DIR}/{log,mldonkey,tmp}
# chmod 750 ${DIR}/{log,mldonkey,tmp}
Créer les fichiers de périphériques
# cd ${DIR}/dev
# sh /dev/MAKEDEV random
# mknod null c 2 2
Copier les fichiers "standards" de /etc
# cp /etc/{resolv.conf,localtime} ${DIR}/etc
Créer le fichier etc/passwd
Le daemon mlnet a besoin de connaître les utilisateurs root et _donkey.
# echo "root:*:0:0::0:0::/noexistent:/sbin/nologin" > ${DIR}/etc/master.passwd
# grep '^_donkey' /etc/master.passwd >> ${DIR}/etc/master.passwd
#
# chown root:wheel ${DIR}/etc/master.passwd
# chmod 600 ${DIR}/etc/master.passwd
Créez la base des mots de passe à partir de ce nouveau fichier :
# /usr/sbin/pwd_mkdb -p -d ${DIR}/etc ${DIR}/etc/master.passwd
Créer le fichier etc/group
Créer une copie du fichier /etc/group :
# egrep '^wheel|^_shadow|^_donkey' /etc/group \
|awk -F: '{printf "%s:%s:%s:\n",$1,$2,$3}' > ${DIR}/etc/group
Installer mlnet
Les commandes suivantes vont copier le binaire static mlnet dans le répertoire ${DIR}/bin, le “striper”, et fixer ses permissions.
# cp /tmp/mldonkey-${VER}/mlnet.static ${DIR}/bin/mlnet
# strip ${DIR}/bin/mlnet
#
# chown root:_donkey ${DIR}/bin/mlnet
# chmod 110 ${DIR}/bin/mlnet
Tester mlnet
Pour tester que le binaire s'exécute bien, procédez comme suit :
# env MLDONKEY_DIR=/mldonkey LC_ALL=C LANG=C \
/usr/sbin/chroot -u _donkey -g _donkey ${DIR} /bin/mlnet -run_as_user _donkey
2008/05/16 17:04:23 Starting MLDonkey 2.9.5 ...
2008/05/16 17:04:23 Language C, locale ASCII, ulimit for open files 128
2008/05/16 17:04:23 MLDonkey is working in /mldonkey
2008/05/16 17:04:23 ulimit for open files is set to 128, at least 150 is required, exiting...
Le message d'erreur indique que le nombre maximal de fichiers ouvrables est fixé à 128 et que mlnet a besoin que ce nombre soit, au moins, porté à 150.
Pour modifier ce nombre, il existe deux possibilités :
- utiliser la commande
ulimit -n 200, mais son effet n'est valable que pour la session courante. - créer une nouvelle classe d'utilisateur dans le fichier
/etc/login.confet modifier les paramètres de l'utilisateur_donkeypourqu'il appartienne à cette classe (plutôt qu'à celle par défaut).
Ce document utilise la première méthode.
Intégrer le service mlnet au système
Créer un script de démarrage
Pour arrêter et redémarrer mlnet de manière simple, créez un script de démarrage.
Pour ce faire, créez le répertoire /etc/rc.d comme suit :
# mkdir /etc/rc.d # chown root:wheel /etc/rc.d # chmod 750 /etc/rc.d
Puis, créez comme suit, le fichier de démarrage /etc/rc.d/mlnet.
Et enfin, positionnez les permissions :
# chown root:wheel /etc/rc.d/mlnet # chmod 740 /etc/rc.d/mlnet
Modifier le fichier /etc/rc.conf.local
Ajoutez la ligne suivante au fichier /etc/rc.conf.local :
# Start mlnet (MLDonkey core daemon) mlnet_flags=YES
Modifier le fichier /etc/rc.local
Ajoutez la ligne suivante au fichier /etc/rc.local :
# Start mlnet (MLDonkey core daemon)
if [ -x /etc/rc.d/mlnet ]; then
echo -n ' mlnet'; /etc/rc.d/mlnet start >/dev/null
fi
Modifier le fichier /etc/rc.shutdown
Ajoutez la ligne suivante au fichier /etc/rc.shutdown :
# Stop mlnet (MLDonkey core daemon)
if [ -x /etc/rc.d/mlnet ]; then
echo -n ' mlnet'; /etc/rc.d/mlnet stop >/dev/null
fi
Modifier le fichier /etc/changelist
OpenBSD offre la fonctionnalité de sauvegarde et de suivi des fichiers de configuration. Pour cela, le système s'appuie sur le fichier /etc/changelist, voir changelist(5), qui est lu par le script /etc/daily(8).
Pour suivre les fichiers créés dans ce document, procédez comme suit :
# cat << _INPUT_ >> /etc/changelist
# mlnet (MLDOnkey Core) daemon
/etc/rc.d/mlnet
${DIR}/etc/master.passwd
${DIR}/etc/resolv.conf
_INPUT_
Configurer mlnet
La configuration s'effectue via l'interface telnet en ligne de commande.
Se connecter à l'interface d'administration
Sur le serveur, ouvrez un terminal, et saisissez les commandes suivantes :
# telnet localhost 4000 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Welcome to MLDonkey 2.8.2 Welcome on mldonkey command-line Use ? for help MLdonkey command-line: >
Tous les paramètres saisis sont automatiquement enregistrés.
Changer le mot de passe admin
Les commandes suivantes vont fixer le mot de passe de l'utilisateur admin, puis s'authentifier en tant qu'utilisateur admin.
> useradd admin LeMotDePasseChoisi Password changed > auth LeMotDePasseChoisi Full access enabled > save options and sources saved
Créer un utilisateur standard
> useradd toto leMotDePasseDetoto User added > save options and sources saved
Changer quelques paramètres
> set allow_browse_share 0 option allow_browse_share value changed > set max_hard_upload_rate 20 # 20ko/s d'upload option max_hard_upload_rate value changed > set max_hard_download_rate 200 # 200ko/s de download option max_hard_download_rate value changed > save options and sources saved
Se déconnecter
> quit Connection closed by foreign host.
Sécuriser le fonctionnement de mlnet
/etc/malloc.conf
Créez un lien symbolique dans la cage /etc/malloc.conf qui pointe vers les options d'allocation de la mémoire. Voir la page de manuel malloc(3) pour plus de détails.
Procédez comme suit :
# cd /space/etc # ln -s AFGJ malloc.conf
Autoriser l'accès à votre MLDonkey depuis l'extérieur
Le réseau eDonkey utilise différents ports TCP et UDP pour commmuniquer. Celui qui nous intéresse ici est le port d'échange de client à client (pair à pair), le port TCP 4662.
Pour permettre l'échange de pair à pair sur votre machine, ajoutez la règle suivante pour le filtre de paquets d'OpenBSD pf(4). Consultez la page de manuel pf.conf(5) pour plus de détails :
# { internet } -> edonkey2000 -> [ this host ]
pass in log on egress proto tcp to (egress) port 4662 user _donkey \
flags S/SA modulate state (max-src-states 50)
Sauvez la règle et relancez pf :
# pfctl -Fr -f /etc/pf.conf