[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]


Manuel de sécurisation de Debian
Chapitre 3 - Avant et pendant l'installation


3.1 Choisir un mot de passe pour le BIOS

Avant d'installer un système d'exploitation sur votre ordinateur, créez un mot de passe pour le BIOS. Après l'installation (une fois que vous avez rendu possible un démarrage à partir du disque dur), retournez dans le BIOS et changez la séquence de démarrage afin de rendre impossible le démarrage à partir d'une disquette, d'un cdrom ou de tout autre périphérique. Sinon un pirate n'a besoin que d'un accès physique et d'une disquette de démarrage pour accéder au système complet.

Désactiver le démarrage sans mot de passe est une solution encore meilleure. Ceci peut être très efficace pour un serveur car il n'est pas redémarré très souvent. L'inconvénient de cette méthode est que le redémarrage nécessite l'intervention d'une personne, ce qui peut poser des problèmes si la machine n'est pas facilement accessible.

Remarque : certains BIOS ont des mots de passe par défaut bien connus et des applications existent également pour récupérer les mots de passe du BIOS. Corollaire : ne dépendez pas de cette mesure pour sécuriser l'accès console du système.


3.2 Partitionner le système


3.2.1 Choisir un schéma de partitionnement intelligent

Un schéma de partitionnement intelligent dépend de l'utilisation de la machine. Une bonne règle est d'être assez large avec vos partitions et de faire attention aux facteurs suivants :

Dans le cas d'un serveur de courriers, il est important d'avoir une partition séparée pour le répertoire des courriers (spool). Les utilisateurs distants (soit consciemment, soit inconsciemment) peuvent remplir le répertoire des courriers (/var/mail ou /var/spool/mail). Si le répertoire est sur une partition séparée, cette situation ne rendra pas le système inutilisable. Sinon (si le répertoire est sur la même partition que /var), le système pourrait avoir d'importants problèmes : les entrées des journaux ne seront pas créées, aucun paquet ne pourra plus être installé et certains programmes pourraient même avoir des problèmes à être exécutés (s'ils utilisent /var/run).

Pour les partitions pour lesquelles vous ne pouvez pas être certain de la place nécessaire, installez Logical Volume Manager (lvm-common et les binaires nécessaires pour votre noyau qui peuvent être soit lvm10, soit lvm6 ou encore lvm5). En utilisant lvm, vous pouvez créer des groupes de volumes répartis sur plusieurs volumes physiques.


3.2.1.1 Choisir les systèmes de fichiers appropriés

Pendant le partitionnement du système, vous devez également décider du système de fichiers à utiliser. Le système de fichiers choisi par défaut pendant l'installation de Debian pour les partitions Linux est ext2. Cependant, il vous est recommandé de choisir un système de fichiers journalisé comme ext3, reiserfs, jfs ou xfs pour réduire les problèmes découlant d'un plantage système dans les cas suivants :

En laissant de côté les problèmes de performance concernant les systèmes de fichiers journalisés (ceci pouvant parfois tourner à la guerre de religion), il est habituellement mieux d'utiliser le système de fichiers ext3. La raison pour cela est qu'il est rétro-compatible avec ext2, donc s'il y a un quelconque problème avec la journalisation, vous pouvez la désactiver et toujours avoir un système de fichiers fonctionnel. Également, si vous avez besoin de récupérer le système avec une disquette d'amorçage (ou un cédérom), vous n'avez pas besoin d'un noyau personnalisé. Si le noyau est en version 2.4, le support ext3 est déjà disponible, s'il s'agit d'un noyau 2.2, vous pourrez amorcer le système de fichiers même si vous n'aurez plus la capacité de journalisation. Si vous utilisez d'autres systèmes de fichiers, vous trouverez que vous ne pourrez pas effectuer de récupération à moins d'avoir un noyau 2.4 avec les modules nécessaires inclus dans le noyau. Si vous êtes bloqué avec un noyau 2.2 sur la disquette de sauvegarde, cela pourrait même être encore plus difficile d'accéder à des partitions reiserfs ou xfs.

Dans tous les cas, il est possible que l'intégrité des données soit meilleure avec ext3 car il fait de la journalisation des données par fichier alors que les autres ne font que de la journalisation par méta-données, voir http://lwn.net/2001/0802/a/ext3-modes.php3.


3.3 Ne pas se connecter à l'Internet tant que tout n'est pas prêt

Le système ne devrait pas être connecté à l'Internet pendant l'installation. Ceci peut paraître stupide mais il faut savoir que l'installation par le réseau est une méthode d'installation habituelle. Étant donné que le système va installer et activer les services immédiatement, si le système est connecté à Internet et que les services ne sont pas configurés correctement, vous les exposez à des attaques.

Il faut noter également que certains services peuvent avoir des trous de sécurité qui n'ont pas encore été corrigés dans les paquets que vous utilisez pour l'installation. C'est généralement vrai si vous installez depuis de vieux médias (comme des cédéroms). Dans ce cas, il se peut que votre système soit compromis avant même la fin de l'installation !

Étant donné que l'installation et les mises à jours peuvent être faites par Internet, vous pourriez penser que c'est une bonne idée d'utiliser cette caractéristique lors de l'installation. Si le système va être connecté directement à l'Internet (et pas protégé par un pare-feu ou un NAT), il est plus judicieux de l'installer sans connexion à Internet et d'utiliser un miroir local de paquets contenant à la fois les paquets sources et les mises à jour de sécurité. Vous pouvez mettre en place des miroirs de paquets en utilisant un autre système connecté à l'Internet et des outils spécifiques à Debian (si c'est un système Debian) tels que apt-move ou apt-proxy ou tout autre outil de miroir pour fournir l'archive aux systèmes installés. Si vous ne pouvez pas faire cela, vous pouvez mettre en place des règles de pare-feu pour limiter l'accès au système pendant la mise à jour (voir Mise à jour de sécurité protégée par un pare-feu, Annexe F).


3.4 Définir un mot de passe root

Définir un bon mot de passe est la condition de base pour avoir un système sécurisé. Consultez passwd(1) pour quelques conseils pour créer de bons mots de passe. Vous pouvez également utiliser un générateur automatique de mots de passe pour faire cela pour vous (voir Générer des mots de passe utilisateur, Section 4.10.13).

Beaucoup d'informations sur le choix de bons mots de passe peuvent être trouvées sur l'Internet ; deux URL qui fournissent un bon résumé et une argumentation sont les How to: Pick a Safe Password de Eric Wolfram et Unix Password Security de Walter Belgers.


3.5 Activer les mots de passe masqués et les mots de passe MD5

À la fin de l'installation, il vous sera demandé si les mots de passe masqués doivent être activés. Répondez oui à cette question ; ainsi les mots de passe seront stockés dans le fichier /etc/shadow. Seul l'utilisateur root et le groupe shadow peuvent lire ce fichier, ainsi aucun utilisateur ne sera en mesure de récupérer une copie de ce fichier afin de le passer par un programme craqueur de mots de passe. Vous pouvez basculer entre les mots de passe masqués et les mots de passes normaux à n'importe quel moment en utilisant shadowconfig.

Vous pouvez en lire davantage sur les mots de passes masqués dans le Shadow Password (/usr/share/doc/HOWTO/en-txt/Shadow-Password.txt.gz).

De plus, l'installation utilise des mots de passe hachés avec MD5 par défaut. C'est généralement une bonne idée étant donné que cela permet des mots de passe plus longs et un meilleur chiffrement. MD5 permet des mots de passe de plus de 8 caractères. Cela peut, si c'est utilisé à bon escient, rendre plus difficiles les attaques par la force brute sur les mots de passe système. Concernant les mots de passe MD5, il s'agit de l'option par défaut quand vous installez le paquet passwd. Vous pouvez reconnaître les mots de passe MD5 dans le fichier /etc/shadow par leur préfixe $1$.

Cela modifie tous les fichiers sous /etc/pam.d en modifiant la ligne password en insérant md5 dans celle-ci :

           password required pam_unix.so md5 nullok obscure min=6 max=16

Si max n'est pas positionné à plus de 8, la modification ne sera pas utile du tout. Pour plus d'informations sur cela, lisez Authentification utilisateur : PAM, Section 4.10.1.

Remarque : même quand les mots de passe MD5 sont activés, la configuration par défaut dans Debian ne modifie pas la valeur précédemment positionnée de max.


3.6 Administrer le nombre minimum de services nécessaires

Les services sont des programmes tels que les serveurs ftp et les serveurs web. Puisqu'ils doivent écouter les connexions entrantes qui demandent le service, des ordinateurs externes peuvent se connecter au vôtre. Les services sont parfois vulnérables (entendez par là qu'ils peuvent être compromis par certaines attaques) : ils créent des risques pour la sécurité.

Vous ne devriez pas installer les services dont vous n'avez pas besoin sur votre machine. Chaque service installé peut introduire de nouveaux trous de sécurité, peu évidents ou inconnus, sur votre ordinateur.

Comme vous le savez sans doute déjà, lorsque vous installez un service, le comportement par défaut est de l'activer. Dans une installation Debian par défaut, sans services installés, le nombre de services actifs est assez faible et il est même plus faible quand on parle de services réseau. Dans une installation standard de Debian 3.1, les seuls services activés par défaut sont OpenSSH, Exim (selon la façon dont vous l'avez configuré) et le portmapper RPC comme services réseau[3]. Si vous n'avez pas choisi l'installation standard, mais que vous avez sélectionné l'intallation en mode expert, vous obtiendrez une installation avec aucun service réseau actif. Le portmapper RPC est installé par défaut car il est nécessaire pour beaucoup de services, par exemple NFS. Cependant, il peut facilement être retiré, voir Sécurisation des services RPC, Section 5.13 pour plus d'informations sur la façon de sécuriser ou de désactiver les services RPC.

Lorsque vous installez un nouveau service réseau (démon) sur votre système Debian GNU/Linux, il peut être activé de deux façons : via le super démon inetd (une ligne sera ajoutée à /etc/inetd.conf) ou via un programme qui s'attache lui-même aux interfaces réseaux. Ces programmes sont contrôlés via les fichiers /etc/init.d qui sont appelés lors du démarrage au moyen du mécanisme System V (ou un autre) en utilisant des liens symboliques dans /etc/rc?.d/* (pour plus d'informations sur la manière dont cela est fait, lire /usr/share/doc/sysvinit/README.runlevels.gz).

Si vous voulez garder certains services tout en les utilisant rarement, utilisez les commandes update, par exemple « update-inetd » et « update-rc.d » pour les supprimer du processus de démarrage. Pour plus d'information sur la façon de désactiver des services réseau, veuillez lire Désactivation de services démon, Section 3.6.1. Si vous voulez changer le comportement par défaut de démarrage des services à l'installation de leur paquet associé[4], utilisez policy-rc.d, veuillez lire /usr/share/doc/sysv-rcREADME.policy-rc.d.gz pour plus d'informations.


3.6.1 Désactivation de services démon

La désactivation d'un service démon est relativement simple. Vous pouvez soit supprimer le paquet fournissant le programme pour ce service, soit supprimer ou renommer les liens de démarrage sous /etc/rc${runlevel}.d/. Si vous les renommez, assurez-vous qu'ils ne commencent pas avec un « S » pour qu'ils ne soient pas démarrés par /etc/init.d/rc. Ne supprimez pas tous les liens disponibles ou le système de gestion des paquets les régénérera lors des mises à jour du paquet, assurez-vous de laisser au moins un lien (typiquement, un lien « K », « kill »).

Vous pouvez supprimer ces liens manuellement ou en utilisant update-rc.d (voir update-rc.d(8)). Vous pouvez, par exemple, désactiver un service pour les niveaux d'exécution multi-utilisateurs en faisant :

       update-rc.d stop nom_service XX 2 3 4 5 .

Avec XX un nombre qui détermine quand l'action d'arrêt pour ce service sera exécutée. Veuillez noter que, si vous n'utilisez pas file-rc, update-rc.d -f service remove ne fonctionnera pas correctement car tous les liens sont supprimés, lors d'une réinstallation ou d'une mise à jour du paquet, ces liens seront régénrés (ce qui n'est probablement pas ce que vous voulez). Si vous pensez que cela n'est pas intuitif, vous avez probablement raison (voir le bogue 67095). D'après les pages de manuel :

       Quand des fichiers /etc/rcrunlevel.d/[SK]??nom existent déjà,
       alors update-rc.d ne fait rien. C'est ainsi fait pour que
       l'administrateur système puisse réarranger les liens -- à condition
       qu'il en reste au moins un -- sans que sa configuration ne soit
       réécrite.

Si vous utilisez file-rc, toutes les informations concernant le démarrage des services sont gérées par un fichier de configuration commun et sont conservées même si les paquets sont retirés du système.

Vous pouvez utiliser l'interface texte (TUI, Text User Interface) fournie par sysv-rc-conf pour faire tous ces changements facilement (sysv-rc-conf fonctionne pour file-rc ainsi que pour les niveaux d'exécution normaux de type System V). Vous pouvez également trouver des interfaces graphiques similaires pour les systèmes de bureau.

D'autres méthodes (non recommandées) pour désactiver les services sont :

Cependant, les fichiers sous /etc/init.d sont des fichiers de configuration et ne devraient pas être écrasés lors des mises à jour de paquet si vous y avez fait des modifications locales.

Contrairement à d'autres systèmes d'exploitation (UNIX), les services dans Debian ne peuvent pas être désactivés en modifiant les fichiers dans /etc/default/nom_service.

FIXME : Ajouter des informations sur la gestion des démons par file-rc


3.6.2 Désactivation d'inetd ou de ses services

Vous devriez vérifier si vous avez vraiment besoin du démon inetd de nos jours. Inetd a toujours été un moyen de compenser des déficiences du noyau, mais celles-ci ont été corrigés dans les noyaux Linux modernes. Des possibilités de déni de service existent avec inetd (qui peut augmenter énormément la charge de la machine) et de nombreuses personnes préfèrent utiliser des démons indépendants au lieu d'appeler des services via inetd. Si vous voulez toujours exécuter un service du genre d'inetd, tournez-vous plutôt vers un démon inetd plus configurable comme xinetd, rlinetd ou openbsd-inetd.

Vous devriez arrêter tous les services Inetd non nécessaires sur votre système, comme echo, chargen, discard, daytime, time, talk, ntalk et les r-services (services à distance) (rsh, rlogin et rcp) qui sont considérés comme EXTRÊMEMENT dangereux (utilisez ssh à la place).

Vous pouvez désactiver les services en modifiant directement /etc/inetd.conf, mais Debian offre un meilleur moyen : update-inetd (qui commente les services de manière à ce qu'ils puissent être facilement réactivés). Vous pouvez supprimer le démon telnet en exécutant cette commande pour changer le fichier de configuration et redémarrer le démon (dans ce cas le service est désactivé) :

     /usr/sbin/update-inetd --disable telnet

Si vous désirez des services en attente, mais qui n'écoutent pas toutes les adresses IP de votre hôte, vous voudrez peut-être utiliser des fonctions non documentées de inetd (remplacez des noms de service avec la syntaxe service@ip) ou utilisez un autre démon tel que xinetd.


3.7 Installer le minimum de logiciels nécessaires

Debian est fournie avec une grande quantité de logiciels, par exemple, Debian 3.0 Woody inclut 6 ou 7 (selon les architectures) cédéroms de logiciels et des milliers de paquets et la version 3.1 fournit environ 13 cédéroms de logiciels. Avec autant de logiciels et même si l'installation du système de base est assez réduite [5] vous pourriez vous laisser entraîner et installer plus de logiciels qu'il n'est vraiment nécessaire sur votre système.

Comme vous connaissez déjà l'utilité de votre système (n'est-ce pas ?), vous ne devez installer que les logiciels qui sont vraiment nécessaires pour qu'il fonctionne. Tout outil non nécessaire qui est installé pourrait être utilisé par un utilisateur qui voudrait compromettre le système ou par un intrus externe qui aurait obtenu un accès shell (ou par exécution de code à distance grâce à un service exploitable).

La présence, par exemple, d'outils de développement (un compilateur C) ou de langages interprétés (comme perl – mais voir ci-dessous –, python, tcl, etc.) pourrait aider un attaquant à compromettre le système un peu plus :

Bien sûr, un intrus ayant un accès shell local peut télécharger son propre jeu d'outils et les exécuter et le shell lui-même peut être utilisé pour créer des programmes complexes. Supprimer les logiciels non nécessaires ne va pas aider à prévenir le problème, mais cela rendra la tâche un peu plus difficile pour un attaquant (et certains pourraient abandonner dans cette situation et aller chercher des cibles plus faciles). Ainsi, si vous laissez des outils sur un système de production qui peuvent être utilisés pour attaquer des systèmes à distance (voir Outils d'évaluation des vulnérabilités à distances, Section 8.1), vous pouvez vous attendre à ce qu'un intrus les utilise également s'ils sont disponibles.

Veuillez noter qu'une installation par défaut de Debian Sarge (i.e. une installation pour laquelle aucun paquet individuel n'est sélectionné) installera un certain nombre d'outils de développement qui ne sont habituellement pas nécessaires. Ceci résulte du fait que certains paquets de développement sont de priorité Standard. Si vous ne comptez pas faire de développement, vous pouvez supprimer ces paquets de votre système sans inquiétude, ce qui devrait également aider à libérer de la place :

     Paquet                    Taille
     ------------------------+--------
     gdb                     2,766,822
     gcc-3.3                 1,570,284
     dpkg-dev                  166,800
     libc6-dev               2,531,564
     cpp-3.3                 1,391,346
     manpages-dev            1,081,408
     flex                      257,678
     g++                         1,384 (Note : paquet virtuel)
     linux-kernel-headers    1,377,022
     bin86                      82,090
     cpp                        29,446
     gcc                         4,896 (Note : paquet virtuel)
     g++-3.3                 1,778,880
     bison                     702,830
     make                      366,138
     libstdc++5-3.3-dev        774,982

Ce problème sera probablement corrigé dans les versions après Sarge, voir le bogue n°\|[nbsp ]\|301273 et le bogue n°\|[nbsp ]\|301138 pour consulter l'état actuel de ce problème. À cause d'un bogue dans le système d'installation, cela ne se produisait pas lors de l'installation de Debian 3.0 Woody.


3.7.1 Supprimer Perl

Vous devez prendre en compte qu'enlever perl peut ne pas être très simple (en fait, cela peut être assez difficile) sur un système Debian car il est utilisé par beaucoup d'outils système. Le paquet perl-base est également Priority: required (ce qui veut tout dire). C'est tout de même faisable, mais vous ne pourrez pas exécuter d'applications perl sur le système ; vous devrez également tromper le système de gestion des paquets pour lui faire croire que le paquet perl-base est installé même si ce n'est pas le cas. [7]

Quels outils utilisent perl ? Vous pouvez vous en rendre compte vous-même :

       $ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
       type=`file $i | grep -il perl`; [ -n "$type" ] && echo $i; }; done

Ceux-ci incluent les outils suivants des paquets de priorité requis ou important :

Donc, sans Perl et à moins que vous ne réécriviez ces outils en script shell, vous ne pourrez probablement pas gérer de paquets (vous ne pourrez donc pas mettre à jour le système, ce qui n'est pas une Bonne Chose).

Si vous êtes déterminé à enlever Perl du système de base Debian et si vous avez du temps libre, créez des rapports de bogue sur les paquets précédents en incluant un remplacement (sous forme de correctif) écrit en script shell aux outils ci-dessus.

Si vous désirez vérifier quels paquets Debian dépendent de Perl, vous pouvez utiliser :

     $ grep-available -s Package,Priority -F Depends perl

3.8 Lire les listes de discussions Debian sur la sécurité

Cela ne fait pas de mal de jeter un œil à la liste de discussion debian-security-announce, où des alertes et des solutions pour les paquets sont annoncés par l'équipe sécurité de Debian, ou sur la liste mailto:debian-security@lists.debian.org, où vous pouvez participer aux discussions à propos de différentes choses liées à la sécurité Debian.

De façon à recevoir les alertes importantes concernant les mises à jour liées à la sécurité, envoyez un courriel à debian-security-announce-request@lists.debian.org avec le mot « subscribe » dans le sujet du courrier. Vous pouvez également vous inscrire à cette liste via la page web sur http://www.debian.org/MailingLists/subscribe

Cette liste de discussion a très peu de trafic, et en vous inscrivant vous serez tenu au courant des mises à jour pour la distribution Debian. Cela vous permet de télécharger rapidement les nouveaux paquets sans les bogues, ce qui est relativement important dans le maintien d'un système sécurisé. (Voir Faire une mise à jour de sécurité, Section 4.2 pour les détails.)


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]


Manuel de sécurisation de Debian

Version: 3.4, Sun, 06 Nov 2005 22:34:04 +0100

Javier Fernández-Sanguino Peña jfs@debian.org
Auteurs, Section 1.1

version française par Frédéric Bothamy (traducteur actuel)
Pierre Machard et Arnaud Assad (anciens traducteurs)
et les membres de la liste debian-l10n-french@lists.debian.org