visualight
18/11/2006, 19h44
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.
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é.
script Perl pour créer des environnements "chrootés".
Télécharger le script & fichiers de config (http://www.linuxfocus.org/common/src/article225/)
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 les 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
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é.
script Perl pour créer des environnements "chrootés".
Télécharger le script & fichiers de config (http://www.linuxfocus.org/common/src/article225/)
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 les 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