Sécuriser Linux
Parti I: Sécurisation de base
EDIT: Cela viendra par bout désolé
Même si la station Linux est réputée plus sécurisée que d'autres environnements de type win32, il convient de procéder à quelques modifications pour que la sécurité de votre poste et de vos données soit optimun.
1° Sécurité physique
-Le BIOS (Basic Input/Output System)
Cette démarche constitue donc la première étape pour la sécurisation de votre système. La première chose est de s'assurer qu'aucune autre personne ne pourra changer les paramètres du BIOS et que le mot de passe soit obligatoirement au démarrage de la machine.
Pour activer ces protections, il suffit simplement de se rendre dans les paramètres de configuration de votre BIOS. Il n'y a pas à proprement parler une technique qui permet d'y arriver tant le nombre de configuration est diversifié. Pour y accéder, il suffit d'appuyer sur la touche correspondante au message d'accueil inscrit au démarrage de votre machine :
DEL to enter SETUP,
SUPPR to enter SETUP,
INS to enter SETUP,
F1 to enter SETUP,
ALT+F1 for SETUP, ALT+F2 for FLASH,
jusqu'à l'apparition du menu de configuration de votre BIOS. La configuration des mots de passe pour le changement des données du BIOS ou le démarrage se font généralement dans les sous-menus: BIOS Setup, Security Setup ou General Setup. Une fois les mots de passe entrés, sauvegarder votre BIOS (touche F10) et redémarrez. La protection par mot de passe est activée.
Attention de ne pas les oublier! Sans eux, vous n'aurez plus la possibilité de démarrer votre pc ;) .
Processus d'amorçage
-LILO (Linux Loader)
Une des fonctionnalités offerte par LILO est la possibilité de passer des arguments au noyau LINUX lors du démarrage de celui-ci.
Cette option peut se révéler particulièrement utile si vous avez besoin de procéder à des opérations de maintenance ou s'il est impossible d'amorcer le système de manière normale (suite à des coupures de courants ou de pertes de données par exemple). Pour démarrer LINUX en mode maintenance, il suffit d'indiquer l'argument "single" à l'invite boot:
LILO boot: Linux single
Cet argument charge le noyau LINUX dans un mode d'administration, accessible seulement au root. Le danger ici est que le fonctionnement normal du système, tel que vous l'aviez défini, n'est plus valable et qu'à la place il reste simplement une invite login root. Mais plus terrible encore est l'argument "init". Celui-ci permet de charger LINUX sans aucune de ses fonctionnalités, services et paramètres. C'est-à-dire que n'importe qui passant cet argument se voit attribué un shell root sur la machine sans qu'aucun mot de passe ne lui est été demandé:
LILO boot: linux init=/bin/bash
Il paraît donc évident que des mesures pour sécuriser LILO doivent être prises rapidement ! Je ne rentrerais pas dans une explication détaillée du fichier de configuration /etc/lilo.conf car ce n'est pas l'objectif de ce post. Je vous donne simplement les lignes à ajouter à celui-ci pour le rendre un peu plus sécurisé. Pour éditer ce fichier, vous devez être en root (la commande su fait très bien l'affaire):
[user@bdm ~]$ su
Password:"votre_mot_de_passe"
[root@bdm ~]# vi /etc/lilo.conf
Pour s'assurer que personne ne pourra passer d'arguments au noyau sans mot de passe, il suffit d'ajouter les deux lignes en gras dans le fichier de configuration:
# exemple de fichier de configuration /etc/lilo.conf
boot=/dev/hda
map=boot/map
default=linux
prompt
timeout=200
password="insérez_votre_mot_de_passe_ici"
restricted
image=/boot/vmlinuz
label=linux
root=/dev/hdbl
initrd=/boot/initrd.img
append="quiet devfs=mount hdd=ide-scsi"
vga=normal
read-only
other=/dev/hda1
label=NT
table=/dev/hda
Cette configuration permettra à toutes les images présentes dans le fichier d'être amorçages sans mot de passe à moins que des arguments n'aient été fournis au noyau. Si un utilisateur souhaitant passer des arguments au noyau, celui-ci devra d'abord saisir le mot de passe associé. Pour enregistrer vos modification et que celles-ci soient actives au prochain redémarrage, vous devez taper à l'invite de commande (toujours en root) : lilo. La configuration est alors sauvegardée. Pour finir avec LILO, il convient de changer les permissions d'accès en lecture sur le fichier. Et oui, sinon tout le monde peut éditer celle-ci et y lire en clair votre mot de passe et passer à nouveau des paramètres au noyau. Pour cela, il suffit d'interdire la lecture ou l'écriture du fichier au non root:
chmod 600 /etc/lilo.conf
LILO est maintenant un peu plus sécuriser.
-Le fichier /etc/inittab
Pour mémoire, initab est le fichier de configuration responsable des services et fonctionnalités chargés lors du démarrage de LINUX.
Il existe deux modifications simples qui peuvent être apportées au fichier /etc/inittab pour rendre les paramètres par défaut d'init un peu moins vulnérables. La première est la modification du niveau d'exécution par défaut du système et la seconde est la suppression de la combinaison Ctrl+Alt+Suppr pour réinitialiser le système.
Typiquement, le niveau d'exécution par défaut pour les distributions disposant d'une interface graphique d'installation (Mandrake, RedHat...) est de 5. Ce qui signifie que le système démarre automatiquement l'interface graphique au démarrage de la machine et vous propose une invite de login X. Cette fonctionnalité pose des problème de sécurité. Il est conseillé d'utiliser un niveau d'exécution par défaut en mode console de 3. Cela ne vous empêchera pas de lancer ultérieurement X en tapant à l'invite de commande: startx.
Pour changer le niveau d'exécution, éditer votre fichier /etc/initab en root. Trouver la ligne correspondante à celle ci-dessous (normalement la première hors commentaire) et remplacer le 5 par 3:
# Default runlevel.
# id:5:initdefault:
id:3:initdefault:
Pour désactiver la combinaison des trois touches, il suffit de mettre la ligne contenant "ctrlaltdel" en commentaire en plaçant un # au début de la ligne comme l'exemple ci-dessous:
# TRAP CTRL-ALT-DELETE
# ca: :ctrlaltdel:/sbin/shutdown -t3 -r now
-Le fichier /etc/securetty
Une étape importante et souvent oubliée dans la sécurisation des postes de travail est le fichier /etc/securetty qui énumère les tty sur lesquels le login root peut arriver. Si vous utiliser Telnet par exemple pour l'administration de votre poste, il se pet que cela pose des problèmes. Il est conseillé de mettre en commentaire toutes les entrées de ce fichier et n'y laisser que un ou deux périphériques vc. Le format du fichier est simple et ne devrait pas vous poser de problème:
#tty1
#tty2
#tty3
#tty4
#tty5
#tty6
vc/1
vc/2
Ainsi toutes les tentatives de connexions root distantes sur les tty seront rejetées. Ouf ;-). Maintenant que tout semble dans l'ordre, attaquons-nous au coeur de LINUX: le système et les utilisateurs.
2° Le système et les utilisateurs
Dans cette partie, je ne m'attarderais pas à expliquer le fonctionnement de init, des services et leurs configurations. Je vais simplement vous indiquer comment vérifier les processus qui sont lancés au démarrage de votre machine et comment les stopper. Nous verrons ensuite comment appliquer une politique de gestion des mots de passe utilisateurs.
-Trouver et arrêter les services inutiles
Si vous avez bien suivis ce qui a été dit précédemment, alors le niveau d'exécution par défaut de votre LINUX devrait être 3. C'est-à-dire en mode console, multi-utilisateur et avec le réseau activé. Pour neutraliser un service inutile, rien de plus simple. Nous allons déplacer son lien symbolique dans un répertoire temporaire. Généralement, les liens vers les scripts d'initialisation des services se trouvent dans le répertoire /etc/rc.d/. Par exemple, si vous souhaitez arrêter le service de police xfs du niveau d'exécution 5, il suffit de retirer le lien symbolique du répertoire qui y est lié:
[root@bdm ~]# cd /etc/rc.d/rc5.d
(se rendre au répertoire des scripts de niveau 5)
[root@bdm ~]# mkdir temporaire
(créer un dossier nommé temporaire)
[root@bdm ~]# mv S90xfs temporaire
(déplacer le script S90xfs dans le répertoire temporaire)
Le nom des fichiers est à adapter à votre système, mais le principe est le même. Dès lors, que vous relancerez LINUX, celui-ci ne chargera pas le service pour le niveau d'exécution choisi. Pour réactiver le service, redéplacer le script vers son répertoire original:
[root@bdm ~]# cd /etc/rc.d/rc5.d/temporaire
[root@bdm temporaire]# mv S90xfs ../
Connaître tous les services utiles sur sa machine n'est pas une mince affaire et dans ce domaine pas de magie. Il faut tester et retester, encore et encore, jusqu'à avoir une configuration qui vous convienne avec les services souhaités.
-Shadow est-il activé?
Une bonne chose à faire est de vérifier que les mots de passe shadow /etc/shadow sont bien installés sur votre système. Normalement, toutes les distributions récentes l'incluent automatiquement. En effet, sans cette précaution, n'importe qui serait à même de récupérer votre fichier de mot de passe /etc/passwd et d'utiliser un cracker brute force (du type: John The Ripper), afin de récupérer vos login et compte root. Shadow est un fichier lisible uniquement par root qui contient votre password de manière cryptée. Pour vérifier la présence de ce fichier sur votre LINUX, tapez à l'invite de commande sous votre compte utilisateur (non root):
[user@bdm ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
Si vous obtenez un autre message que celui-ci ou qu'il n'y a pas le fichier, alors c'est que shadow n'est pas installé sur votre système ou pas correctement. Pour remédier à ce défaut, de sécurité, installé le package shadow depuis le cd de votre distribution ou de son site FTP.
3° Sécurisez votre accès au réseau
Dans le cadre de la sécurité d'un poste de travail GNU/Linux connecté à un réseau local ou internet, c'est l'étape obligatoire. Vous possédez une connexion haut débit par ADSL ou câble ? Imaginez que votre machine est une voiture ! Si vous ne prenez pas les précautions nécessaires, c'est un peu comme si vous la laissiez bien garée devant chez vous tous les soirs, portières ouvertes et clé sur le contact... A bon entendeur ;)
-Le Demon Internet inetd, votre pire cauchemar
Dans un grand nombre de distribution, (ex: Mandrake), le service inetd a été remplacé par xinetd. Néanmoins, certaines l'utilisent encore et ce point ne devrait pas être évité (ex: Debian). Sur les machines de type Unix, la plupart des services réseaux sont associés à un demon spécifique qui a pour mission de prendre en charge les requêtes de connexions distantes. A chaque service son demon associé. Par exemple, les requêtes Telnet seront prisent en charges par in.telnetd, les requêtes FTP par in.ftpd, etc.
Dès lors il convient de s'assurer que ces demandes de connexions soient bien gérées par le système. Le fichier de configuration de inetd : /etc/inetd.conf est assez simple à comprendre. Il sera lu par le demon à chaque fois que celui-ci est lancé ou redémarré. Pour désactiver un service, il suffit simplement de mettre un # au début de la ligne pour la passer en commentaire. Dans l'exemple ci-dessous j'ai gardé la possibilité d'accepter les connexions FTP, en refusant les autres :
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#shell stream tcp nowait root /usr/sbin/tcpd in.rshd
#talk stream tcp nowait root /usr/sbin/tcpd in.talkd
Comme vous pouvez le constater votre fichier devrait être plus important que celui-ci. En cas de doute sur tel ou tel service, il est conseillé de placer une ligne de commentaire. pour réactiver le service, il suffira d'enlever le # et de redémarrer le demon. Pour activer ces modifications sans relancer votre machine : killall -HUP inetd
Original topic by Dragooon74
Aucun commentaire:
Enregistrer un commentaire