10.5. Sécurité des fichiers et des systèmes de fichiers

Quelques minutes de préparation et de planification avant de mettre votre système en ligne peut vous aider à le protéger ainsi que les données qu'il contient.

10.5.1. Paramètres umask

La commande umask peut être utilisée pour connaître le mode de création des fichiers par défaut sur votre système. C'est le complément octal du mode du fichier en question. Si les fichiers sont créés sans égard à leurs permissions, l'utilisateur pourrait donner des permissions en lecture ou en écriture par inadvertance à quelqu'un qui ne devrait pas avoir ces permissions. Généralement, les paramètres umask sont 022, 027, ou 077 (qui est le plus restrictif). Normalement, le umask est fixé dans /etc/profile, de sorte qu'il s'applique à tous les utilisateurs du système. le masque de création de fichiers peut être calculé en soustrayant la valeur souhaitée de 777. En d'autres termes, un umask de 777 implique que les fichiers nouvellement créés de contenir des permissions sans lecture, ni écriture, ni exécution pour tout le monde. Un masque de 666 implique que les fichiers nouvellement créés ont un masque de 111. Par exemple, vous pourriez avoir une ligne comme celle-ci :

		# Fixer le umask utilisateur par défaut
		umask 033
Assurez vous d'utiliser un umask pour root's de 077, qui interdira lecture, écriture, et exécution pour les autres utilisateurs a moins que vous ne changiez cela explicitement avec la commande chmod. Dans ce cas, les répertoires nouvellement créés devraient avoir des permissions de 744, obtenues en soustrayant 033 de 777. Les fichiers nouvellement créés avec un umask de 033 devraient avoir des permissions de 644.

Note

Pour Mandrake Linux, il est juste nécessaire d'utiliser un umask de 002. Cela est dû au fait que la configuration de base utilise un groupe par utilisateur.

10.5.2. Permissions des fichiers

Il est important de vous assurer que vos fichiers système ne sont pas ouverts à des modifications accidentelles des utilisateurs et des groupes qui ne devraient pas faire de maintenance système.

UNIX différencie le contrôle d'accès aux fichiers et répertoire selon trois critères : propriétaire, groupe, et autres. Il y a toujours un seul propriétaire, un nombre quelconque de membres du groupe et tous les autres.

Une explication rapide des permissions sous UNIX :

Propriété - Quels utilisateurs et groupes ont le contrôle des paramètres de permission du noeud et du parent du noeud

Permissions - Bits susceptibles d'être mis ou enlevés pour permettre un certain type d'accès. Les permissions pour les répertoires peuvent avoir une signification différente que les mêmes paramètres de permissions sur un fichier.

Lecture:

Écriture:

  • Être capable d'ajouter ou modifier un fichier

  • Être capable de supprimer ou de déplacer des fichiers d'un répertoire

Exécution:

  • Être capable de lancer un programme binaire ou un script shell

  • Être capable de chercher dans un répertoire, en accord avec la permission de lecture

Attribut de sauvegarde du texte : (Pour les répertoires)

Le «  sticky bit   » (bit de conservation) a aussi un comportement différent lorsqu'il est appliqué aux répertoires. Si le bit de conservation est mis sur un répertoire, alors un utilisateur pourra seulement supprimer les fichiers qu'il y possède, ou pour lesquels il a des droits explicites en écriture, même si il a les droits en écriture sur ce répertoire. Cela est conçu pour des répertoires tels que /tmp, qui sont world-writable (écriture par tout le monde), mais où il ne vaut mieux pas que les utilisateurs puissent effacer des fichiers à l'envie. Le sticky bit est vu comme un t dans un listing de répertoire détaillé.

Attribut suid : (Pour les fichiers)

Il s'agit de la permission «  set-user-id   » (utiliser ID utilisateur) sur le fichier. Quand le mode d'utilisation de l'ID utilisateur est mis dans les permissions du propriétaire, et si le fichier est exécutable, les processus qui l'utilisent obtiennent les ressources systèmes de l'utilisateur qui possède le fichier, et non plus de l'utilisateur qui a lancé le processus. Cela est la cause de beaucoup de violations de type «  buffer overflow   » (dépassement de mémoire tampon).

Attribut SGID : (Pour fichiers)

Si utilisé dans les permission du groupe, ce bit contrôle le statut «  set group id   » d'un fichier. Il se comporte comme pour suid, à part que c'est le groupe qui en est bénéficiaire. Le fichier doit être exécutable pour faire effet.

Attribut SGID : (Pour répertoires)

Si vous activez le bitSGID sur un répertoire (avec chmod g+s directory), les fichiers qui y seront créés auront leur groupe mis au groupe du répertoire.

Vous - Le propriétaire du fichier

Groupe - Le groupe auquel vous appartenez

Tous - Quiconque sur le système qui n'est ni propriétaire, ni membre du groupe

Exemple de fichier :

        -rw-r--r--  1 kevin  users         114 Aug 28  1997 .zlogin
        1st bit - répertoire?                 (non)
         2nd bit - lecture propriétaire?       (oui, par kevin)
          3rd bit - écriture par propriétaire?  (oui, par kevin)
           4th bit - exécution propriétaire?     (non)
            5th bit - lecture groupe?             (oui, par users)
             6th bit - écriture groupe?            (non)
              7th bit - exécution groupe?           (non)
               8th bit - lecture tous?               (oui, par tous)
                9th bit - lecture tous?               (non)
                 10th bit - exécution tous?            (non)

Les lignes suivantes sont des exemples d'ensembles de permissions qui sont nécessaires pour avoir l'accès décrit. Vous voudrez sans doute donner plus de permissions que celles données ici, mais on ne décrit ici que l'effet de ces permissions minimales :

-r--------  Autoriser l'accès en lecture au fichier par le propriétaire
--w-------  Autoriser le propriétaire à modifier ou effacer le fichier
            (Notez que quiconque ayant les droits d'écriture sur le répertoire
             dans lequel se trouve le fichier peut l'écraser/effacer)
---x------  Le propriétaire peut exécuter ce programme, mais pas de script shell, 
	     qui de plus nécessite un droit en lecture
---s------  Sera exécuté avec l'UID du propriétaire
--------s-  Sera exécuté avec le GID du groupe
-rw------T  Pas de mise à jour du "last modified time" (Heure de dernière modification).
             Généralement utilisé pour le fichiers d'échange (swap)
---t------  Aucun effet. (anciennement bit de conservation)
Exemple de répertoires :
        drwxr-xr-x  3 kevin  users         512 Sep 19 13:47 .public_html/
        1e bit - répertoire?             (oui, il contient de nombreux fichiers)
         2e bit - lecture propriétaire?   (oui, par kevin)
          3e bit - écriture propriétaire?  (oui, par kevin)
           4e bit - exécution propriétaire? (oui, par kevin)
            5e bit - lecture groupe?         (oui, par users)
             6e bit - écriture groupe?        (non)
              7e bit - exécution groupe?       (oui, par users)
               8e bit - lecture par tous?       (oui, par tous)
                9e bit - écriture par tous?      (non)
                 10e bit - exécution par tous?    (oui, par tous)

Les lignes qui suivent sont des exemples des ensembles de permissions minimums requis pour autoriser l'accès décrit. Vous voudrez sans doute donner plus de permissions que celles données ici, mais on ne décrit ici que l'effet de ces permissions minimales :

dr--------  Le contenu peut être listé, mais l'attribut des fichiers 
             ne peut être lu
d--x------  Le répertoire est accessible, et utilisé comme chemin en 
             exécution complète
dr-x------  Les attributs de fichiers peuvent être lus par le propriétaire
d-wx------  Les fichiers peuvent être créés/effacés, même si le répertoire
             n'est pas le répertoire courant
d------x-t  Empêche l'effacement de fichiers par « tous  » ayant
             un droit d'écriture. Utilisé pour /tmp
d---s--s--  Aucun effet

Les fichiers de configuration système (généralement dans /etc) ont souvent un mode de 640 (-rw-r-----), et possédés par root. Selon les besoins en sécurité de votre site, vous pouvez les ajuster. Ne laissez jamais un fichier système en écriture pour un groupe ou tous. Certains fichiers de configuration, dont /etc/shadow, devraient n'être en lecture que par root, et les répertoires de /etc ne devraient pas être accessibles par tous, au moins.

Scripts shell suid

les scripts shell suid représentent un sérieux risque de sécurité, et pour cette raison, le noyau n'en tiendra pas compte. Quel que soit le degré de sécurité que vous supposez pour ces scripts, ils peuvent être exploités par le cracker pour lui fournir un shell root.

10.5.3. Contrôles d'intégrité

Une autre très bonne manière de détecter des attaques locales (et réseau) sur votre système est de lancer un contrôleur d'intégrité comme Tripwire, Aide ou Osiris. Ces contrôleurs d'intégrité génèrent un certain nombre de sommes de contrôle sur tous vos binaires et fichiers systèmes importants et les comparent à une base de données précédemment générée de valeurs références bien connues. Ainsi, tout changement dans un fichier sera détecté.

C'est un bon réflexe d'installer ce genre de programmes sur une disquette, puis empêcher physiquement l'écriture sur celle-ci. De cette façon. les intrus ne pourront pas altérer le contrôleur d'intégrité lui-même ou modifier sa base de données. Une fois que vous avez une application de ce style configurée, il est conseillé de l'ajouter à vos devoirs d'administrateurs système pour vérifier que rien n'a changé.

Vous pouvez même ajouter un entrée crontab pour lancer le contrôleur depuis votre disquette toute les nuits et vous envoyer un message le matin. Quelque chose comme :
		# set mailto
		MAILTO=kevin
		# run Tripwire
		15 05 * * * root /usr/local/adm/tcheck/tripwire 
Vous enverra un rapport tous les matins à 5H15.

Les contrôleurs d'intégrité peuvent être une aubaine pour détecter des intrusions avant même que vous ne puissiez les remarquer. Comme beaucoup de fichiers changent sur un système moyen, vous devrez faire le discernement entre des activités de cracker et vos propres agissements.

Vous pouvez trouver une version libre et non prise en charge de Tripwire sur le site http://www.tripwire.org, gratuitement. Des manuels et de l'assistance technique peuvent être achetés.

Aide peut être trouvé à http://www.cs.tut.fi/~rammer/aide.html.

Osiris peut être trouvé à http://www.shmoo.com/osiris/.

10.5.4. Chevaux de Troie

Les « Chevaux de Troie  » tirent leur nom du célèbre stratagème décrit dans l'Iliade d'Homère. L'idée est qu'un cracker distribue un programme ou binaire qui semble intéressant, et encourage d'autres personnes à le télécharger et le lancer en tant que root. Alors, le programme peut compromettre leur système pendant qu'ils n'y prêtent attention. Alors qu'ils pensent que le logiciel qu'ils viennent de charger ne fait qu'une seule chose (et parfois très bien), il transige aussi leur sécurité.

Vous devez prendre garde aux programmes que vous installez sur votre machine. MandrakeSoft fournit les sommes de contrôle MD5 et les signatures PGP de chacun des RPM qu'il fournit, de sorte que vous puissiez vérifier que vous installez la bonne chose. Vous ne devriez jamais lancer un binaire que vous ne connaissez pas, pour lequel vous n'avez pas les sources comme root! Peu d'attaquant souhaitent publier leur code source pour sondage public.

Bien que cela puisse être complexe, assurez vous que vous obtenez le code source d'un programme depuis son site réel de distribution. Si le programme doit être lancé par root, assurez vous que vous ou quelqu'un de confiance a regardé les sources et les a vérifiées.