Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Sécuriser la Slackware


Sommaire

[modifier] Sécuriser la Slackware

Installer Slackware et la rendre sûre
traduit par GEDsismik

d'après un document de Cezary M Kruk

Installer Slackware et la rendre sûre..

Cet article a été traduit du polonais vers l'anglais pour linuxgazette.com. L'original (polonais) a été publié dans une issue de printemps de CHIP Special Linux. Il a été ensuite traduit de l'anglais au français par GEDsismik (sorry, je connais pas le polonais).


A chaque fois qu'une nouvelle version de votre distribution préférée arrive, vous avez toujours le même dilemme : installer tout en partant de rien, essayer de mettre à jour le système ou continuer avec quelque chose dont vous avez l'habitude ?

Laissez-nous prendre les deux cas extrêmes en considération : installer et configurer un système en partant de rien vous laisse découvrir et utiliser toutes les nouvelles propriétés, alors que rester juste avec ce que vous avez déjà vous donne la certitude que vous pouvez continuer vos projets sans quelconque obstacle. Vous êtes face à une confrontation classique entre innovation et stabilité.

La configuration de base du système n'est pas difficile. Mais plus vous avez besoin d'en avoir, plus vous devez fournir d'effort pour l'obtenir. Est-ce possible de simplifier l'installation et la configuration du système pour le rendre plus facile ? Une base complète et propre contenant les informations à propos des changement que vous avez introduit en travaillant sur la précédente version du système rendra le "tuning" de la nouvelle version bien plus facile. Cette méthode n'est pas bien compliquée quand vous collectez des informations mais demande plus de travail lors de la restauration de la configuration. Comment peut-on l'automatiser et la simplifier ?

Heureusement, Linux mémorise les informations de configuration de chaque service individuellement dans un fichier texte. De plus, il vous apporte un ensemble de très bons outils pour traiter de tels fichiers. Aussi, il serait bon de préparer des scripts et les utiliser quand vous avez besoin d'installer le système encore une fois.

[modifier] De l'installation à la sécurité

Cet article décrit deux groupes de scripts : le premier est utilisé pour installer et enlever individuellement les paquetages, et le second est utilisé pour sécuriser le système contre des agressions potentielles. Les deux sont conçus pour Slackware Linux. Les outils pour installer et désinstaller les paquetages ne sont pas aussi sophistiqués que SlackPkg ou les paquetages Packware, mais ils offrent le plein contrôle du système en contrepartie. Il en est de même pour les outils pour sécuriser le système. Ils effectuent seulement des opérations élementaires. Les deux installent des outils que nous récupérons dans l'ensembe slack*more.

L'ayant comme modèle, vous pouvez préparer d'autres outils pour automatiser le processus de configuration des services ou programmes. Si vous décidez de ne pas "tuner" le système tout manuellement mais compléter le script approprié avec la procédure consécutive à la place, vous gagnerez bientôt votre propre kit de programme de configuration système. De plus, parce que vous aurez préparé ces scripts vous-même, ils satisferont parfaitement à vos besoins.

Nous avons choisi d'utiliser l'exemple de Slackware Linux parce que cette distribution a une compétence naturelle à faire interférer les utilisateurs directement avec les fichiers de configuration. Les autres Linux offrent des programmes complexes qui ont pour but de séparer les utilisateurs des fichiers contenant les informations sur la configuration. Ainsi de tels programmes vous rendent oisif ou vous forcent à faire des investigations poussées pour savoir quoi et où a été réellement changé dans le système par ces programmes aussi appellés amicals [NDT: traduction littérale].

Slack*more [NDT: http://c.kruk.webpark.pl/#slack*more] est divisé en deux partie. L'archive INSTALL.tgz contient les outils pour l'installation, la désinstallation et la mise à jour des programmes, et l'archive SECURE.tgz -- les outils pour la sécurité préliminaire du système.

Kruk fr-d-mini.png

Figure 1. Grâce au script SCRIPT.sh du répertoire ./Slackware-9.0, vous pourrez générer un ensemble de listes claires des paquetages par groupe individuel. La capture montre la liste des paquetages du groupe d (developpement)

[modifier] Installer et enlever des paquetages

Le plus important composant du paquetage INSTALL.tgz est le script INSTALL.sh et le répertoire ./Slackware-9.0, contenant le script SCRIPT.sh et le fichier Slackware.

Pour initialiser ces outils, vous avez besoin de monter dans le répertoire /mnt/cdrom le répertoire d'installation de la version de Slackware, et alors de lancer SCRIPT.sh à partir du répertoire ./Slackware-9.0. Le script va parcourir les répertoires du CD-ROM, et, guidé par des fichiers tag placés dedans, il créera les fichiers contenant les informations sur les paquets. Chaque fichier aura le nom correspondant au nom donné au groupe. Par exemple, dans le fichier e, répertoriant les paquets relatifs à Emacs, vous trouverez, entre autres, les lignes suivantes :

emacs: ADD
emacs-misc: REC
emacs-nox: OPT

Les utilisateurs qui connaissent Slackware Linux savent que la catégorie ADD désigne les paquels essentiels pour le programme donné, la catégorie REC signifie paquets recommandés, et la catégorie OPT signifie ceux qui sont optionnels.

Si vous avez de telles informations de base sur les paquets, vous pourez décider quels composants vous voulez et lesquels sont inutiles pour vous. Aussi, si vous modifiez le contenu du fichier e mentionné ci-dessus comme suivant :

emacs: ADD
#emacs-misc: REC
 !emacs-nox: OPT

le paquet emacs sera expected pour être installer, le paquet emacs-misc sera ignoré et le paquet emacs-nox ne sera pas seulement ignoré, mais en plus, si il est déjà installé dans le système, il sera désinstallé.

Dans le fichier Slackware du répertoire ./Slackware-9.0, il y a des informations concernant les groupes individuels des paquets.

a
ap
d
e
f
...

En se basant dessus, le script décidera quels groupes de paquets doivent être pris en compte. Si vous personnalisez ce fichier de la manière suivante :

a
ap
#d
 !e
f
...

le groupe d sera ignoré, et chaque paquet du groupe e installé sur le système sera desinstallé.

Ainsi, si vous précedez les noms du paquet ou du groupe par dièse (#), ils seront omis, et si vous les précédez par un point d'exclamation (!), les composants correspondants seront enlevés du système. Si un paquet ou un groupe de paquet n'a pas encore été isntallé, les signes # et ! sont équivalents. Le contenu des fichiers contenant le nom des groupes est prioritaire sur le contenu des fichiers contenant les noms des paquets. Aussi, si vous décidez d'ignorer un groupe entier ou de supprimer tous les paquets qu'il contient, le script ne regardera pas les informations écrites dans les fichiers contenant les noms des paquets individuels.

Quand vous avez préparé le fichier Slackware et les fichiers des paquets individuels, vous pouvez lancer le script INSTALL.sh. Ce script ajoutera ou enlevera les composants correspondant du système. Si c'est une installation préliminaire de Slackware, et si le système n'a pas encore été "tuné", c'est une bonne idée pour optimisier le travail fait pour la plateforme d'une nouvelle distribution. Vous pouvez utiliser pour ça un des scripts INSTALL.hda ou INSTALL.hdb. Grâce à eux, le processus d'installation ou de désinstallation des paquets sera plus rapide.

INSTALL.sh est destiné à de multiples usages. Si il n'y a rien à faire, il ne fera rien. En utilisant ça, vous pouvez améliorer l'installation de base de Slackware. C'est suffisant pour installer le paquet du groupe a d'abord en utilisant le programme d'installation de Slackware et ensuite de mettre le script dans le système, de commenter le nom du paquet ou groupe dont vous n'avez pas besoin et d'installer le reste en appelant INSTALL.sh.

[modifier] Informations sur les paquets

Dans le répertoire ./Packages, il y a un autre script SCRIPT.sh. Si vous monter le CD-ROM Slackware, et lancer ce script, il créera la structure des répertoires contenant les fichiers avec les informations sur les paquets individuels du système. Une telle base de donnée de réference à propos des paquetages est un avantage parce que vous n'aurez pas à monter le disque d'installation chaque fois que vous voulez vérifier le paquetage sélectionné. Construire une base comme ça n'est utile seulement si vous n'avez pas décidé d'installer Slackware Linux en entier. Sinon, vous trouverez des informations sur tous ces paquetages dans le répertoire /var/log/packages.

[modifier] Les patches

Le répertoire ./Patches contient deux scripts. Si vous voulez les utiliser, lancez 0.check d'abord. Il vérifiera le serveur sunsite.icm.edu.pl pour les mises-à-jour disponibles de Slackware 9.0 et créera le fichier Packages.html avec les informations sur les mises-à-jour et le fichier Packages.txt avec le nom de ces paquets :

mutt-1.4.1i-i386-1
sendmail-8.12.9-i386-1
sendmail-cf-8.12.9-noarch-1

Le script 1.get utilisera le dernier fichier pour obtenir les paquetagess, le fichier .txt approprié, et les fichiers .tgz.asc. Pour ce faire, le script utilise la commande wget -c -t0, aussi, il n'y a aucun risque que vous récupereriez les mêmes fichiers récursivement. D'autre part, vérifiez si le fichier donné est déjà got takes some time. Aussi, ça peut être bénefique de parcourir le fichier Packages.txt avant de commencez 1.get, et de lui enlever les noms des paquetages que vous avez déjà ou dont vous n'avez pas besoin. Mais ce n'est pas nécessaire.

Vous pouvez changer la commande de réception des fichiers par wget -c -t0 -b. Alors, tous les fichiers seront prit du serveur en même temps, en tâche de fond. Mais tous les serveurs ne vous autorise pas à établir de telles connexions simultanées. Si le serveur sunsite.icm.edu.pl ne convient pas à vos besoins, vous pouvez enregistrer dans les fichiers 0.check et 1.get un autre hôte. De plus, vous pourrez personnaliser le contenu de la commande de génération du fichier Packages.txt vers le fichier Packages.html. Initialement, cette commande est :
cat Packages.html | grep ".tgz.asc" | sed 's/.tgz.asc//g' | sed \ 's/.*A HREF="//' | sed 's/">.*//' > Packages.txt

Le script 1.get enregistre les informations sur les paquetages occasionnels uniquement. Les grands groupes de mises-à-jour pour Slackware sont placés dans des répertoires séparés (kde, kdei, etc.). Si vous voulez les prendre, vous aurez à le faire manuellement ou à modifier le script original convenablement.

[modifier] Le répertoire ./usr/local/bin

Dans le répertoire ./usr/local/bin, il y a le script catpkg qui passe en revue les fichiers disponbiles dans le répertoire /var/log/packages pour une information sur les paquetages installés sur le système plus facile. INSTALL.sh copie le contenu entier du répertoire local ./usr/local/bin vers son équivalent système. Aussi, vous pouvez placer ici différents scripts que vous voulez utilisez durant le travail initial avec le système.

Kruk fr-nosuid-mini.png

Figure 2. le script SECURE.sh prend les octets SUID et SGID bits venant des fichiers sélectionnés et affiche des informations dessus

[modifier] Sécurité

Le principal script de l'archve SECURE.tgz est SECURE.sh. Il excécute les tâches suivantes :

  • Initialiser dans le fichier /etc/login.defs la variable PASS_MAX_DAYS à 182. Grâce à ça, la temps de validité des mots de passe des nouvels utilisateurs sera limité à six mois.
  • Initialiser dans /etc/profile file la variable HISTFILESIZE à 100. Grâce à ca, le fichier de l'historique des commandes sera limité à 100 lignes.
  • initialiser dans /root/.bashrc la variable TMOUT à 900. Grâce à ça, une session du root inactive pendant plus de 50 minutes sera tuée.
  • Commenter dans le fichier /etc/inetd.conf tous les services réseau non commentés mais potentiellement dangereux.
  • Mettre dans le fichier /etc/hosts.deny l'entrée ALL: ALL@ALL, pour bloquer tout accès extérieur à la machine.
  • Mettre dans le fichier /etc/hosts.allow l'entrée ALL: ALL@127.0.0.1 : ALLOW, donnant accès aux resources à la machine locale.
  • Changer dans le fichier /etc/host.conf l'ordre des hôtes, bind sequence into the more secure order bind, hosts and adds the nospoof on sequence.
  • Bloquer dans le fichier /etc/securetty l'accès comme root à toutes les consoles exceptés /dev/tty1.
  • Enlever du fichier /etc/group file les groupes news et uucp superflus dans la plupart des cas. Cela équivaut aux commandes groupdel news et groupdel uucp.
  • Enlever du fichier /etc/passwd les utilisateurs news, uucp, operator, sync, et shutdown. Cela est équivalent à la suite consécutive de commande userdel appellés avec les paramètres appropriés.
  • Excécuter les actions en parallèle avec les réferences du fichier /etc/shadow.
  • Commenter, dans le fichier /etc/inittab la ligne commençant par ca::ctrlaltdel:/sbin/shutdown. Grâce à ça, le raccourci Ctrl-Alt-Delete arrête de provoquer le redémarrage de la machine.
  • Retire de tous les scripts du répertoire /etc/rc.d les droits de lecture ou excécution par le groupe ou les autres utilisateurs.
  • Ajouter au fichier /etc/rc.d/rc.local quelques commandes d'extinction ou de démarrage de différents services. Pour faire ces commandes, vous devriez ajouter au noyau le module "IP: TCP syncookie support".
  • Tester quelques douzaines programmes sensibles et leur prendre l'octet SUID. Ca enregistre les informations sur les modifications des fichiers log (Figure 2.).
  • Faire l'action similaire avec une douzaine de programmes ou plus, prenant leurs bits SUID et SGID.
  • Mettre dans le fichier de configuration /etc/mail/sendmail.cf les entrées O PrivacyOptions=noexpn et O PrivacyOptions=novrfy. Cela prévient le système des vérifications à distances des comptes.
  • Copier du répertoire /etc/cron.daily les scripts de désinstallation. Ils sont utilisés pour supprimer automatiquement différents fichiers et répertoire temporaire du système.
  • Copier du répertoire /root/bin quelques scripts très utiles.

Ces actions augmentent la sécurité du système de manière significative, bien que ce ne soit juste le début de la protection contre d'eventuelle attaque. Le script SECURE.sh a été écrit de manière à pouvoir être lancé de façon répétée. Aussi, vous pouvez ajouter ces procédures dans un script et les appliquer sans aucun problème.

Le script modifie différents services, mais ne les surcharges pas. Pour réécrire dans /etc/inetd.conf, utilisez la commande killall -HUP inetd. Pour excécuter les changements dans /etc/inittab, lancez la commande init q. Pour redémarrer sendmail, utilisez la commande /etc/rc.d/rc.sendmail restart ou kill -HUP `head -1 /var/run/sendmail.pid`.

Vous pouvez inclure ces commandes dans le script, mais cela implique un risque potentiel que vous devez prendre en compte. Si vous faites la moindre erreur dans un appel du programme sed, à la place de modifier le fichier /etc/inittab, vous pouvez rester avec un fichier vide. Ce qui aura pour conséquence qu'après le redémarrage de init, vous aurez perdu l'accès au système, et vous serez forcé de restorer /etc/inittab d'une copie, en utilisant un système Linux d'une autre partition ou d'un autre disque. Ce n'est pas très agréable, particulièrement si vous n'avez pas d'autres partitions avec Linux.

Kruk fr-huge-mini.png

Figure 3. La liste des fichiers de grandes tailles. Comme vous pouvez le voir, la place la plus importante a été prise là par les fichiers de la suite OpenOffice.org suite installés dans le répertoire /opt, ainsi que RealPlayer et les fichiers Pingus

[modifier] Les tests

Le script TEST-SECURE.sh cherche dans le système ces types de fichiers :

  • Les fichiers qui ont un octet SUID ou SGID.
  • Les gros ou vieux fichier (les fichiers de plus d' 1 Mo, modifié ou utilisé pour la dernière fois trois mois auparavant).
  • Exclusivement les gros fichiers (Figure 3.).
  • Les fichiers sans association aux utilisateurs ou groupes existants dans le système.

Les informations sur chacun de ces types de fichiers sont enregistrées dans des fichiers log séparés. De plus, TEST-SECURE.sh utilise les résultats du travail du script SECURE.sh, montrant le contennu des fichier log avec des informations sur les programmes sans octet SUID ou SGID.

Parce que vous ne voulez pas forcement excecuter tous ces tests ensemble, dans le répertoire /root/bin, vous trouverez 1.suid, 2.huge+old, 3.huge, et 4.nobody, scripts exécutant un test particulier seulement.

[modifier] Et ainsi de suite...

Ca vaut la peine d'étendre le script SECURE.sh avec d'autres procédures qui seront responsables de la configuration et de l'installation de protections plus poussées. En suivant ces procédures utilisés dans les scripts, vous serez capable d'élaborer les prochains scripts pour accorder d'autres services : configuration des comptes des utilisateurs, installation du réseau, des services et clients E-Mail et WWW, de l'environement X-Window, etc... La seule limitation est votre imagination parce que dans ce cas, Linux vous autorise à contrôler à peu près tout. Aussi, quand vous aurez fini de créer ces scripts, vous serez capable de configurer le système entier exactement comme vous le voulez, juste en appuyant sur le bouton entrée et en attendant quelques temps.




@ Retour à la rubrique Installation

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par GEDsismik le 18/01/2004.

[modifier] Copyright

Copyright © 18/01/2004, GEDsismik

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA