"Chrooter" tous les Services sous Linux
ArticleCategory:
System Administration
AuthorImage:
![[Photo of the Author]](../../common/images/Mark-Nielsen.jpg)
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]
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 :
- S�curiser vos ports r�seau.
- Ex�cuter tous les services sous un compte qui ne soit pas root.
Tous vos services doivent en plus �tre "chroot�s".
- Transf�rer les logs syst�me sur une autre machine.
- Analyser les fichiers de logs.
- Rechercher les tentatives de d�tection de ports ouverts sur votre
machine.
- Limiter les ressources cpu et m�moire pour un service.
- Activer les quotas pour les comptes utilisateurs.
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 :
- Syslogd sera "chroot�" pour chaque service.
- Apache sera dans /chroot/httpd.
- Ssh sera dans /chroot/sshd.
- PostgreSQL sera dans /chroot/postmaster.
- Sendmail sera "chroot�", mais malheureusement il ne fonctionnera pas sous un
compte non root.
- ntpd sera dans /chroot/ntpd
- named sera dans /chroot/named
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.
- Cr�er le r�pertoire chroot.
mkdir -p /chroot/Config/Backup
- T�l�charger Config_Chroot.pl.txt
dans /chroot/Config_Chroot.pl
- Changer la variable $Home du script perl si vous n'utilisez pas
/chroot comme r�pertoire home.
- 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 :
- "Chrootez" syslogd pour chaque service. J'ai test�, et j'ai bien obtenu des
logs. Ca ne me pla�t pas puisque j'ai un service fonctionnant sous root.
- Voyons si nous pouvons nous connecter sur un site externe capable de nous
fournir des logs.
- Envoyez les logs vers un fichier au lieu d'utiliser le d�mon syslogd. C'est
probablement la meilleure option du point de vue de la s�curit�, toutefois, si
un intrus p�n�tre votre syst�me, rien ne l'emp�che de "jouer" avec les logs.
- Configurez le syslogd principal pour qu'il cherche � diff�rents endroits
l'ensemble des services. Pour cela, appliquez l'option -a � syslogd.
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 :
-
Tout devrait �tre "chroot�", y compris sendmail, ssh, apache,
postgresql, syslog, et tous les services actifs sur l'ordinateur.
- 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.
- Les logs devraient �tre envoy�s � l'ext�rieur.
- 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.
- 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
- Utiliser deux logins pour ssh et pr�voir deux d�mons sshd actifs.
- Trouver comment ex�cuter sendmail ou d'autres programmes de courrier sous
des comptes non root.
- Supprimer les biblioth�ques inutiles dans /lib. J'ai tout copi� par paresse.
Vous n'avez pas besoin de la plupart.
- Traiter les logs de syslogd en externe et voir si on peut lier syslogd
� un port r�seau et faire que tous les services se connectent � ce port r�seau
par l'interface loopback. Voir s'il est possible d'ex�cuter syslogd sous un
compte non root.
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
-
Si cet article change, il sera disponible sur
http://www.gnujobs.com/Articles/23/chroot.html