"Chrooter" tous les Services sous Linux

ArticleCategory:

System Administration

AuthorImage:

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Mark Nielsen

en to fr Georges Tarbouriech 

AboutTheAuthor:

Mark travaille comme consultant ind�pendant et donne de son temps � des causes telles que GNUJobs.com, l'�criture d'articles, la cr�ation de logiciel libre, et le b�n�volat pour eastmont.net.

Abstract:

NDT : Ne cherchez pas le verbe "chrooter" (compos� � partir de la commande Unix "chroot") dans le Petit Robert ou le Petit Larousse : il n'y est pas ! Pourtant, vous le trouverez conjugu� tout au long de cet article. C'est un choix d�lib�r� pour faciliter la compr�hension mais je reconnais que c'est tr�s laid. Je r�clame donc l'indulgence du lecteur pour cet horrible anglicisme. Pour me faire pardonner, il sera toujours mis entre guillemets.

Les services "chroot�s" am�liorent la s�curit� en limitant les dommages que pourrait causer un intrus ayant p�n�tr� votre syst�me.

ArticleIllustration:[This is the title picture for your article]

[illustration]

ArticleBody:

Introduction

Qu'est-ce que chroot ? Chroot red�finit l'univers de fonctionnement d'un programme. Plus pr�cis�ment, il d�termine un nouveau r�pertoire "ROOT" ou "/" pour un programme ou une session. Sch�matiquement, tout ce qui est � l'ext�rieur du r�pertoire "chroot�" n'existe pas pour un programme ou un shell.

Pourquoi est-ce utile ? Si quelqu'un s'introduit dans votre ordinateur, il ne pourra pas voir la totalit� des fichiers de votre syst�me. Le fait de ne pas voir vos fichiers limite les commandes qu'il peut lancer et ne lui donne pas la possibilit� d'exploiter des fichiers qui seraient vuln�rables. L'inconv�nient majeur, c'est que �a n'emp�che pas l'analyse des connexions r�seau ou autre. Ainsi, vous devrez faire bien d'autres choses qui n'entrent pas vraiment dans le cadre de cet article :

La raison pour laquelle je consid�re chroot (pour un service non root) comme une ligne de d�fense vient du fait que si quelqu'un s'introduit dans votre machine sous un compte non root et si aucun fichier n'est disponible lui permettant de passer root, les dommages pouvant �tre caus�s, seront limit�s � la zone dans laquelle il a pu p�n�trer. De m�me, si le compte root est essentiellement propri�taire de la zone dans laquelle il s'introduit, les options d'attaque sont moindres. Il est �vident que vous avez un s�rieux probl�me si un intrus peut entrer dans votre machine, mais ce n'est pas si mal de pouvoir limiter les d�g�ts qu'il est susceptible de causer.

RAPPELEZ-VOUS que ma mani�re de proc�der n'est certainement pas pr�cise � 100%. Il s'agit de ma premi�re tentative et si tout semble bien fonctionner s�par�ment, il devrait �tre facile d'affiner l'ensemble. Ce n'est que l'�bauche d'un HOWTO que je souhaite cr�er sur chroot.

Comment allons-nous tout "chrooter" ?

Eh bien, nous cr�ons un r�pertoire, "/chroot" et nous y mettons tous les services de la mani�re suivante : Chaque service devrait se retrouver totalement isol�.

Mon script Perl pour cr�er des environnements "chroot�s".

Config_Chroot.pl.txt doit �tre renomm� Config_Chroot.pl apr�s t�l�chargement. Ce script perl vous permet de lister les services en cours d'installation, de visualiser les fichiers de configuration, de configurer un service, et de d�marrer ou d'arr�ter les services. Voici la marche � suivre.
  1. Cr�er le r�pertoire chroot.
    mkdir -p /chroot/Config/Backup
  2. T�l�charger Config_Chroot.pl.txt dans /chroot/Config_Chroot.pl
  3. Changer la variable $Home du script perl si vous n'utilisez pas /chroot comme r�pertoire home.
  4. T�l�charger mes fichiers de configuration.
Une remarque importante : Je n'ai test� que sur RedHat 7.2 et RedHat 6.2.

Modifiez le script perl en fonction de votre distribution.

Je me suis retrouv� en train d'�crire un article gigantesque sur chroot, mais gr�ce au script Perl il est devenu beaucoup plus court. En gros, apr�s avoir "chroot�" de nombreux services, j'ai remarqu� qu'ils avaient des fichiers et des configurations semblables devant �galement �tre "chroot�s". Le meilleur moyen de savoir quels sont les fichiers � copier pour un service donn� consiste � lire la page de manuel et de taper "ldd /usr/bin/file" pour les programmes utilisant des biblioth�ques. Vous pouvez aussi "chrooter" le service que vous installez et le d�marrer manuellement pour visualiser les erreurs �ventuelles ou analyser ses fichiers de log.

En g�n�ral, pour installer un service tapez ceci :

cd /chroot
./Config_Chroot.pl config  SERVICE
./Config_Chroot.pl install SERVICE
./Config_Chroot.pl start   SERVICE

"Chrooter" Ntpd

Ntpd est un simple service de distribution d'heure qui permet de synchroniser tous vos ordinateurs. Il a �t� tr�s facile � "chrooter".
cd /chroot
# Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
#./Config_Chroot.pl config  ntpd
./Config_Chroot.pl install ntpd
./Config_Chroot.pl start   ntpd

"Chrooter" DNS ou named

C'est d�j� fait, v�rifiez sur
http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html
ou
http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html

Ou, si vous voulez utiliser mon script,

cd /chroot
 # Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
#./Config_Chroot.pl config  named
./Config_Chroot.pl install named
./Config_Chroot.pl start   named

"Chrooter" Syslog et les services... et mes dol�ances.

Je veux "chrooter" syslogd. Mon probl�me c'est que syslogd utilise /dev/log par d�faut, ce qui n'est pas vu par des services "chroot�s". Par cons�quent, il n'est pas facile d'obtenir des logs. Voici quelques solutions : Mon unique solution a �t� de v�rifier que syslogd �tait bien "chroot�" pour chaque service. J'aimerais trouver un moyen d'�crire des logs dans un compte non root qui aurait son propre environnement "chroot�", comme peut-�tre un port r�seau. C'est sans doute r�alisable, mais je vais m'arr�ter o� j'en suis et essayer de trouver une meilleure solution ult�rieurement.

Si vous ne voulez pas d'un d�mon syslogd pour chaque service, alors ajoutez les commandes suivantes au d�mon principal lors de son lancement :

syslogd -a /chroot/SERVICE/dev/log
Si ssh et dns �taient actifs, �a devrait ressembler � ceci :
syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log

Derni�re chose concernant syslogd, j'aimerais pouvoir l'ex�cuter sous un compte non root. J'ai essay� quelques trucs simples, mais �a n'a pas fonctionn� et j'ai laiss� tomber. Si je pouvais ex�cuter syslogd sous un compte non root pour chaque service, mes besoins en s�curit� seraient combl�s. Une solution de log externe est peut-�tre envisageable.

"Chrooter" Apache

Ce fut tr�s facile � faire. Une fois r�alis�, j'ai pu ex�cuter des scripts Perl. Maintenant, mon fichier de configuration est plut�t long puisque j'ai d� inclure les biblioth�ques Perl et PostgreSQL dans la zone "chroot�e". Une chose � noter, si vous vous connectez � une base de donn�es, v�rifiez que le service est fourni sur l'interface loopback 127.0.0.1 et que cet h�te est bien sp�cifi� dans vos scripts Perl pour le module DBI. Voici comment contacter une base de donn�es en utilisant les connexions permanentes d'Apache :
$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0});

if ($dbh ) {$dbh->{PrintError} = 1;}
else 
  {$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1',"","",
      {PrintError=>1});}

Source: http://httpd.apache.org/dist/httpd/

Compilez et installez apache sur votre syst�me dans /usr/local/apache. Utilisez ensuite le script perl.

cd /chroot
# Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
 # ./Config_Chroot.pl config  httpd
./Config_Chroot.pl install httpd
./Config_Chroot.pl start   httpd
J'ai modifi� mon fichier de configuration httpd.conf de la fa�on suivante :
ExtendedStatus On

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Ensuite, avec votre navigateur allez sur
http://127.0.0.1/server-status
ou
http://127.0.0.1/server-info
et v�rifiez le r�sultat !

"Chrooter" Ssh

Tout d'abord, l'id�al serait de rediriger le port 22 de ssh sur le port 2222. Ensuite, au lancement de ssh, faites-lui �couter le port 2222 sous un compte non root. Pour la connexion ssh initiale, nous voulons des comptes s�curis�s par mots de passe pour laisser aux utilisateurs la possibilit� de se connecter et rien d'autre. Apr�s leur authentification, utilisez une seconde instance de ssh sur le port 127.0.0.1:2322 qui leur permette de se connecter r�ellement au syst�me -- le second ssh NE doit �tre � l'�coute que de l'interface loopback. Voici maintenant ce que vous devriez faire, mais nous ne le ferons pas. La seule chose que nous allons effectuer consiste � "chrooter" ssh pour cet exemple. Les exercices laiss�s au lecteur concernent le lancement d'un d�mon sshd sous un compte non root et l'installation d'un second d�mon sshd � l'�coute de l'interface loopback permettant aux utilisateurs d'acc�der au syst�me.

Encore une fois, nous n'allons que "chrooter" ssh et vous laisser r�fl�chir aux cons�quences que �a implique (vous ne verrez plus la totalit� du syst�me si vous vous contentez de cette �tape). Id�alement, ce serait tr�s bien de pr�voir d'enregistrer les logs de mani�re externe. Enfin, nous devrions utiliser OpenSSH alors que je me sers du SSH commercial pour des raisons de simplicit� (ce qui n'est pas une bonne excuse).

Source: http://www.ssh.com/products/ssh/download.cfm

Installez ssh dans /usr/local/ssh_chroot. Utilisez ensuite le script Perl.

cd /chroot
# Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
 # ./Config_Chroot.pl config  sshd
./Config_Chroot.pl install sshd
./Config_Chroot.pl start   sshd
Je pense que l'une des tr�s bonnes raisons de mettre ssh dans un environnement "chroot�" vient du fait que si vous souhaitez remplacer un serveur ftp, les visiteurs auront un acc�s limit� � cette zone. Rsync et SCP fonctionnent tr�s bien ensemble afin de permettre aux utilisateurs de charger des fichiers. Je n'aime pas trop l'id�e d'un serveur ftp permettant d'entrer dans le syst�me. De nombreux serveurs ftp sont "chroot�s" mais ils transmettent encore les mots de passe en clair, ce que je n'aime pas vraiment.

"Chrooter" PostgreSQL

Ce fut aussi simple que pour Perl, sauf que davantage de biblioth�ques ont �t� requises. Dans l'ensemble, ce n'�tait vraiment pas difficile � faire. J'ai d� ouvrir PostgreSQL au r�seau, mais seulement sur l'interface loopback. Comme il �tait "chroot�", les autres services "chroot�s" n'y avaient pas acc�s, comme par exemple le serveur apache. J'ai compil� Perl dans PostgreSQL et j'ai d� ainsi ajouter beaucoup de choses concernant Perl dans mon fichier de configuration.

Source: ftp://ftp.us.postgresql.org/source/v7.1.3/postgresql-7.1.3.tar.gz

Compilez et installez postgres sur votre syst�me dans /usr/local/postgres. Utilisez ensuite le script Perl.

cd /chroot
 # Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
 # ./Config_Chroot.pl config  postgres
./Config_Chroot.pl install postgres
./Config_Chroot.pl start   postgres

"Chrooter" Sendmail

Ex�cutez mon script.
cd /chroot
# Supprimez le commentaire de la ligne suivante si vous n'utilisez pas mon
fichier de configuration.
 # ./Config_Chroot.pl config  sendmail
./Config_Chroot.pl install sendmail
./Config_Chroot.pl start   sendmail
Maintenant, est-ce qu'il reste des inconv�nients ? Oui. Il fonctionne toujours en tant que root. Mal�diction ! De plus, certains fichiers sont recr��s par /etc/rc.d/init.d/sendmail lorsqu'il est d�marr�. Mon script ne g�re pas cela. Chaque fois que vous modifiez sendmail dans /etc/mail, copiez les modifications dans /chroot/sendmail/etc. De m�me /var/spool/mail devra pointer vers /chroot/sendmail/var/spool/mail de fa�on � ce que sendmail et les utilisateurs (quand ils se connectent) puissent voir les m�mes fichiers.

Le bon c�t� c'est que vous pouvez toujours envoyer du courrier, ce n'est que la r�ception qui pose un probl�me. Ainsi, j'ai pu installer sendmail avec apache sans difficult�. Certains de mes scripts Perl exp�dient du courrier et j'avais donc besoin que les fichiers sendmail soient copi�s dans la zone "chroot�e" d'apache.

D'autres choses � "chrooter".

Voici ma philosophie :
  1. Tout devrait �tre "chroot�", y compris sendmail, ssh, apache, postgresql, syslog, et tous les services actifs sur l'ordinateur.
  2. Tout devrait se trouver sous un compte non root (il est possible que vous soyez oblig� de rediriger des ports prot�g�s vers un port non prot�g�). C'est d'ailleurs valable pour sendmail et syslog.
  3. Les logs devraient �tre envoy�s � l'ext�rieur.
  4. Une partition devrait �tre d�finie pour chaque service pour limiter l'espace disque qu'un pirate est susceptible d'utiliser s'il d�cide d'y �crire. Vous pourriez utiliser une interface loopback pour monter des fichiers en tant que syst�me de fichier pour certains de ces services en cas d'insuffisance du nombre de partitions.
  5. Root devrait �tre propri�taire des fichiers qui ne changent pas.
Pour ce qui concerne sendmail et syslogd, je persiste � croire qu'il pourrait �tre ex�cut�s sous un compte non root. Pour sendmail, ce devrait �tre possible mais j'ai trouv� extr�mement difficile de l'ex�cuter sous un compte non root. Je n'y suis pas parvenu et je pense que c'est une grave erreur de ne pas pouvoir y arriver. Je sais que �a pose des probl�mes, mais je crois qu'il faudrait penser � les r�soudre. Puisqu'il est possible de g�rer les permissions je ne vois pas pourquoi sendmail doit �tre ex�cut� en tant que root. Il y a sans doute des raisons que je ne per�ois pas, mais je doute qu'on ne puisse pas surmonter les obstacles.

Pour syslog, je n'ai m�me pas essay�, mais je dirais que ces logs devraient �tre poss�d�s par un compte non root et je ne vois pas pourquoi ce ne serait pas possible. Au moins, j'ai r�ussi � ce que syslog soit "chroot�" pour chaque service.

Tous les services devraient �tre install�s sous des comptes non root. M�me NFS. Tout.

Suggestions

Conclusion

Je pense que chroot est une bonne chose pour tous les services. Je crois que c'est une grave erreur de ne pas "chrooter" tous les services sous des comptes non root. J'aimerais que les distributions majeures le proposent, ou une distribution moins connue : n'importe laquelle. Mandrake a commenc� en am�liorant des choses de RedHat, peut-�tre que d'autres pourraient prendre des choses � Mandrake et am�liorer chroot. Rien n'emp�che quelqu'un de refaire le travail de quelqu'un d'autre dans le monde GNU/Linux, donc ce doit �tre r�alisable. Si une soci�t� se d�cidait � tout "chrooter" et � cr�er un environnement simple permettant aux utilisateurs de g�rer leurs services "chroot�s", elle aurait une distribution fantastique ! Maintenant que Linux se r�pand, les gens ne veulent plus voir la ligne de commande, donc si tout est fait du c�t� de l'interface, ils n'ont plus � voir les entrailles et n'ont plus besoin de savoir ce qu'il se passe -- ils ont seulement besoin de configurer l'ensemble et de savoir que �a fonctionne !

Je suis � 100% pour l'id�e que tous les services devraient �tre "chroot�s" sous des comptes non root et qu'une distribution qui ne propose pas cette possibilit� est impropre � l'utilisation dans un environnement de production. Je vais "chrooter" tout, autant que possible -- j'y arriverai peut-�tre.

J'envisage de cr�er un HOWTO sur "chroot". J'aimerais que quelqu'un m'aide � convertir cet article au format LyX pour pouvoir l'int�grer dans les HOWTO pour Linux.

R�f�rences

  1. Si cet article change, il sera disponible sur http://www.gnujobs.com/Articles/23/chroot.html