Mes premiers pas vers un système sécurisé
Geek
Par djib le mercredi 3 mai 2006, 16:46 - Lien permanent
Introduction, le but de cet article
J'utilise Linux depuis maintenant bien trois ans et j'ai commencé à me poser quelques questions.
Certes Linux a de nombreux atouts qui en font un système d'exploitation résistant, mais mon système résiste-t-il tout seul ou bien dois-je le garder à l'oeil, le surveiller ? Les virus, vers, troyen et autres spywares existent ils sous Linux ? Pourquoi je n'ai pas besoin de pare-feu (firewall) ?
Dans l'article suivant je vais essayer de faire un point sur la sécurité de Linux, et surtout donner quelques bases pour rendre votre système plus sécurisé. Je ne suis pas expert en sécurité, loin s'en faut, mais voici ce que j'ai appris au cours de ces années.
Si les premiers points peuvent vous sembler évidents, je vous recommande au moins la lecture des gros titres.
La sécurité je m'en fous!
La sécurité de votre ordinateur et de vos données c'est votre problème, mais à partir du moment où vous êtes connectés à l'internet, ne pas vous préoccuper un minimum de la sécurité de votre système met en danger tout le reste de la planète. En effet les pirates et autres virus peuvent se servir de votre ordinateur pour en attaquer ou en contaminer d'autres.
Le respect de l'administrateur
C'est quoi ?
J'entends par là que l'administrateur (l'utilisateur root) est fait pour administrer votre système : installer des nouveaux programmes, lancer et arrêter des services, modifier les configurations système, ... Il est impératif que vous n'utilisiez pas le root en permanence. Utilisez un compte séparé pour lire vos courriels, naviguer sur l'internet, écouter de la musique, regarder des vidéos, retoucher vos photos, bref...
Pourquoi ?
Prenons un exemple simple : si l'un des fichiers avec lesquels vous travaillez contient un virus, ce dernier ne pourra pas faire plus de dégâts à votre système que vous pourriez en faire avec l'utilisateur qui accède au fichier. En tant que simple utilisateur vous pouvez changer vos préférences personnelles (affichage, fond d'écran, ...) et supprimer vos documents, c'est tout. En tant que root vous pouvez détruire intégralement votre PC car l'administrateur "peut tout faire".
Que faire ?
Les utilisateurs d'Ubuntu (et dérivés) ne sont pas concernés pas ce problème car par défaut ils ne connaissent pas le mot de passe du compte root. Un autre mécanisme (le sudo[1]) leur permet occasionnellement de lancer une application avec les même droits que l'administrateur. Certaines distributions (Slackware, Gentoo, ...) il n'existe pas de compte pour l'utilisateur par défaut et il faut donc le créer (avec useradd).
Les mises-à-jour régulières
Pourquoi ?
Tout programme informatique contient des bogues. Certains de ces "comportement imprévus" créent des failles de sécurité (c'est-à-dire par exemple peuvent permettre à un pirate informatique ou à un virus d'exécuter d'autres programmes). Contrairement à certains systèmes d'exploitation propriétaires, sur Linux, grâce au principe du logiciel libre (Open Source) mais aussi à des groupes spécialisés dans les analyses de sécurité, ces failles sont souvent (toujours) rapidement corrigées. Pour qu'elles soient effectives sur votre ordinateur il faut donc mettre vos logiciels régulièrement à jour.
Que faire alors ?
Les utilisateurs d'Ubuntu ont la chance d'avoir une jolie appliquette (un applet pour les anglophones
) qui prévient lors de mises-à-jour. Sur Debian et tous ses dérivées (dont Ubuntu, Kubuntu, ...) taper sudo apt-get update puis sudo apt-get upgrade mets le système à jour.
Recevoir les courriers adressés au root
Pourquoi ?
Lorsque votre système détecte certaines erreurs, lorsque certaines modifications sont effectuées, ... le système peut envoyer un courriel au root (administrateur du système) pour le tenir au courant. Il est donc intéressant de lire les courriels adressés à l'administrateur.
Que faire alors ?
Sur Ubuntu par défaut, l'utilisateur reçoit les courriels adressés au root[2], mais encore faut il les lire.
Sur pratiquement toute les autres distributions (dont Debian) il faut configurer cette redirection à la main. La manière la plus simple de procéder est d'ajouter dans le fichier /etc/aliases (ou de créer ce fichier le cas échéant) la ligne root: user (en remplaçant user par votre nom d'utilisateur).
Comment lire vos courriels locaux ? Il existe de nombreuses méthodes (mail ou mutt en console) et je vais présenter une solution pour kmail[3].
Dans le logiciel kmail allez dans Paramètres>Configuration puis dans Comptes. Appuyez sur le bouton Ajouter et choisissez Local Mailbox. Donnez un nom à ce compte. Le fichier local est /var/mail/user (a priori c'est ce qui s'affiche par défaut). Validez et vous allez maintenant recevoir les courriels locaux.[4]
Surveiller les logs du système
C'est quoi ?
Les logs système sont des fichiers dans lesquels sont stockés toute information pertinente concernant le système et en général sa sécurité. À peu près tout ce que le système fait est inscrit dans ces journaux système.
Sous Kubuntu ksystemlog que vous trouverez dans le menu Système vous permet de lire les logs. Sous Ubuntu dans le menu Système vous trouverez aussi un lecteur de logs.
Oulah, je vais devoir lire tout ça moi ?
En théorie, l'idéal serait de le faire, mais je pense pas que beaucoup de monde le fasse. Je n'en vois pas trop l'intérêt non plus. En effet, a moins que vous soyez administrateur système, la majorité de ce qui est écrit dans les logs sera incompréhensible, et les quelques lignes qui relèvent un vrai danger risquent d'être enfouies dans des centaines et des centaines de messages "sans importance". Pourquoi ne pas demander à votre ordinateur de vous faire un résumé des logs pour conserver que ce qui vous, simple utilisateur, vous intéresse ?
Que faire alors ?
logwatch va venir à votre secours. logwatch est un programme écrit en Perl qui va régulièrement analyser les logs de votre système et vous envoyer un courriel à l'administrateur avec un résumé très bien structuré, avec plus ou moins détaillé selon vos préférences. Analyser les logs de mon système était une tâche fatiguante, que je ne prenais presque jamais la peine de faire, alors qu'il s'agit maintenant simplement d'un courriel par jour que je parcours en une minute tout au plus. De plus grâce à logwatch j'ai réalisé que mon serveur SSH subissait des attaques constantes d'ordinateurs, ce dont je n'avais pas la moindre idée.
sshd:
Authentication Failures:
unknown (test7.crickets.com): 30 Time(s)
root (test7.crickets.com): 16 Time(s)
unknown (218.3.120.196): 11 Time(s)
root (83.243.69.66): 7 Time(s)
unknown (111139.ntpu.edu.tw): 5 Time(s)
root (111139.ntpu.edu.tw): 3 Time(s)
guest (test7.crickets.com): 2 Time(s)
guest (111139.ntpu.edu.tw): 1 Time(s)
unknown (83.243.69.66): 1 Time(s)
Invalid Users:
Unknown Account: 47 Time(s)
Pour installer logwatch, sous Ubuntu ou Kubuntu, sudo apt-get install logwatch fera l'affaire. (logwatch est dans le dépôt Universe). Dès l'installation, un fichier nommé 00logwatch vient s'ajouter dans /etc/cron.daily et va donc être exécuté par un cron tous les jours (cf. cet article sur les crons). Vous pouvez adapter le contenu de ce fichier à vos besoins, par exemple en mettant /usr/sbin/logwatch --detail low (reportez vous à l'aide de logwatch en tapant man logwatch). Assurez-vous aussi que vos crons sont exécutés à une heure où votre ordinateur sera allumé (par défaut, les crons sont exécutés vers 6h du matin, et comme je ne suis pas si matinal, je les ai déplacés vers 18h, heure où l'on mange chez nos amis anglais)[5].
Mettre en place un pare-feu (firewall)
Pourquoi un pare-feu ?
Un pare-feu peut avoir plusieurs applications :
- Empêcher à des application d'envoyer des informations sur l'internet,
- Empêcher à des individus de se connecter à votre ordinateur,
- Empêcher à des utilisateur de votre ordinateur d'utiliser certains logiciels (par exemple en bloquant les ports utilisés par les services de peer-to-peer, vous leur empêchez d'utiliser ce genre de logiciels,
- ...
J'ai pas déjà un pare-feu ?
On m'a toujours dit que Linux avait un pare-feu intégré. Il existe effectivement un mécanisme, nommé Netfilter qui traite tous les paquets IP à l'envoi et à la réception (en gros tout ce qui passe par votre réseau). De mécanisme utilise des iptables qui sont des règles qui indiquent comment (entre autres) filter ces paquets.
Donc oui, Linux a un pare-feu intégré, mais encore faut-il le configurer !
Que faire alors ?
En pratique, si vous n'avez pas installé de serveur (SSH, Apache (site web), mysql, ...) sur votre ordinateur, vous n'êtes pas forcés d'installer un pare-feu car vous n'avez a priori pas grand chose de potentiellement dangereux "à cacher". Je vous recommande quand même l'installation d'un pare-feu pour être un peu plus maître de ce qui se passe sur votre ordinateur (c'est-à-dire ne pas se limiter à la configuration par défaut des iptables).
Il existe de nombreux outils pour configurer votre pare-feu. firestarter semble assez prometteur, mais j'ai décidé de parler de guarddog. Pour les utilisateur de Debian ou Ubuntu, sudo apt-get install guarddog vous permet d'installer guarddog (dépôt Universe).
Lancez guarddog avec la commande sudo guarddog. Le programme présente quatre onglets :
- Zone : qui par défaut ne contient que Local et Internet permet de définir des groupes qui auront des autorisations différentes. Par exemple, les adresses IP de l'Université de Cambridge commencent toutes par 131.111 donc je peux créer un groupe appelé Cambridge qui me servira a donner aux utilisateur de mon université plus de droits qu'au reste du monde. Nous utiliseront ces zones dans la deuxième partie.
- Protocole : vous permet de définir quels protocoles sont autorisés entre deux groupes. Si par exemple je veux autoriser toute personne de Cambridge à se connecter à mon serveur SSH, mais pas au reste du monde, je clique sur Local (et non Cambridge, ce qui n'est pas très intuitif) et dans Session Interactive je coche la case en face de SSH (case qui correspond à la colonne Cambridge). Comme par défaut, aucune case est cochée, les utilisateurs du groupe Internet n'ont pas accès à mon serveur SSH.
- Notez que par défaut comme toutes les cases sont décochées, donc si vous activez le pare-feu tel quel, votre utilisateur n'aura plus du tout accès à l'internet. Il vous faut donc sélectionner Internet et cocher les cases des protocoles que vous voulez autoriser (HTTP(S), FTP, SSH, POP, IMAP, SMTP, ...)
- Il y a une différence essentielle entre une case non cochée, et une case barrée. Un paquet bloqué (non coché) est tout simplement arrêté par votre machine, un paquet rejeté (barré) est lui renvoyé à l'expéditeur (qui donc sait que vous lui avez refusé ce protocole).
- Journalisation : sert à enregistrer dans des logs les paquets rejetés, bloqués, ...
- Avancé : sert à ajouter des protocoles qui ne seraient pas prévus par défaut par l'interface. Il sert aussi à désactiver le pare-feu, très utile pendant que vous cherchez à régler le pare-feu, mais aussi lorsque une tâche réseau ne fonctionne pas et que vous suspectez votre pare-feu d'en être la cause. Si une fois le pare-feu désactivé ça marche, c'est qu'il manque une case cochée quelque part
.
Cet article est une introduction très rapide, pour profiter pleinement des possibilités de guarddog consultez la documentation.
Le site GRC (Gibson Research Corporation) et son outil ShieldsUP peut vous servir à tester la configuration de votre pare-feu.
La cerise sur la gâteau : l'antivirus
Pourquoi ?
Y'a pas de virus sous Linux : c'est faux, et ce depuis 1997 avec l'apparition de Bliss !!! Bon, a l'heure actuelle il n'en existe qu'une cinquantaine, ne touchent que les serveurs et concernent à peu près tous des versions périmées de ces serveurs, mais bon, ils sont là.
Certes vous n'avez peut-être pas grand chose à craindre sous Linux, mais pensez à tous les courriels que vous pouvez transférer à des amis qui n'ont pas la chance d'être sous Linux, tous les fichiers que vous passez à vos amis avec votre toute nouvelle clusb, ...
Que faire alors ?
clamav est un antivirus que vous pouvez installer sur votre machine. Pour les utilisateurs de KDE, klamav (qui n'est pas dans Kubuntu Breezy mais qui sera disponible pour Kubuntu Dapper) est une interface graphique pour clamav ma foi très sympathique.
Pour l'instant je n'ai configuré que l'analyse des courriels (dans kmail il y a dans le menu outils un assistant à la configuration de l'antivirus) sur ma Kubuntu, mais sous ma Debian, grâce à klamav, j'analyse aussi en permanence les dossiers /tmp, /medias et /home/user/temp, ce qui ne ralentit pas vraiment mon système mais me rassure grandement.
Seul reproche, clamav est un peu lent pour analyser les dossiers IMAP de mes mails.
N'oubliez pas de sauvegarder toutes vos données
Il est important que vous sauvegardiez régulièrement votre travail, pas seulement sur un disque dur, mais variez les supports : DVDs, clusbs, ... En général les gens réalisent qu'il faut faire une sauvegarde 10 minutes après qu'il soit trop tard. Souriez si vous voulez, mais le jour où cela vous arrivera, vous n'aurez que vous à blâmer. (Je me rappelle encore la tête de papa quand j'ai formaté le disque dur de l'ordinateur étant petit : le PC voulait pas démarrer, m'a demandé le CD d'installation et m'a demandé d'appuyer sur Entrée. Ô combien j'étais fier de savoir réparer tout seul le PC :S )
Conclusion
J'espère que ce article vous a plu et vous a servi de première introduction à la sécurité sous Linux. C'est maintenant à vous de faire quelques efforts pour votre propre sécurité et pour la sécurité des autres.
J'ai pris beaucoup de plaisir à écrire cet article, et c'est avec joie que je lirai vos commentaires, vos remarques, vos astuces, ... Merci.
Notes
[1] C'est la ligne %admin ALL=(ALL) ALL du fichier /etc/sudoers qui donne l'autorisation à tout membre du groupe admin d'exécuter des applications avec les droits de l'utilisateur root
[2] Ceci est très cohérent avec le fait que le compte root n'est pas accessible par défaut sur Ubuntu.
[3] Pour d'autres logiciels référez-vous à la documentation
[4] Dans ma version de kmail (1.9.1), j'ai désactivé le locking car il ne fonctionnait pas. Ce n'est pas un problème puisque je n'accède à mes mails que par kmail et donc qu'il n'y a pas de soucis d'accès concurrent.
[5] Je me pose une question à ce niveau. La seule méthode que j'ai trouvé pour modifier l'heure des crons par défaut est de modifier le fichier /etc/crontab, ce qui n'est pas très propre m'a-t-on toujours dit, mais je n'ai pas trouvé d'autre méthode car crontab -e m'affichait toujours un fichier vide, même en root. Si vous avez une explication, je suis preneur.



Commentaires
Salut, merci pour ce billet tres interessant
Je voudrais savoir si quelqu'un connais un moyen de rapatrier les mails locauxx avec thunderbird ?
@+
Skelettor, merci pour ton commentaire.
Voici une idée pour ton problème (j'en ai aucune idée de si ça peut marcher) :
Regardes dans la configuration de postfix (sudo dpkg-reconfigure postfix et man postfix) si tu peux transférer tous les courriels envoyés au root ou à ton utilisateur vers une adresse externe.
Salut,
Merci pour cet article très intéressant et pratique.
A+
Merci pour ce billet très intéressant, ce problème m'intéresse et tu réponds à plusieurs questions que je me posais
Par contre iptables ne bloques pas par défaut les ports ? J'ai dû installer firestarter (sous Ubuntu) pour ouvrir les ports dont j'avais besoin.
Omnisilver, je ne connais pas la configuration par défaut des iptables. Cela m'étonnerai que par défaut elles bloquent certains ports. Si c'est le cas, je pense qu'alors lorsque tu installes un serveur, ''debconf'' se charge d'ouvrir le port par défaut du serveur.
En effet, avant de connaître quoi que ce soit des iptables j'avais un serveur SSH et un serveur Apache qui tournait sans modification avoir modifié les iptables.
neoraptor, merci !
J'ai voulu voir les mails adressés au root mais mon /var/mail est vide :'(
Une idée ?
Bonjour,
Bonne intiative et interessant !
Suite à la remarque sur ssh, je me permets de rappeler qu'une simple configuration de sshd permet de limiter les attaques :
il suffit d'interdire a root l'autorisation de se connecter, et de spécifier quels sont les utilisateurs qui ont le droit de se connecter en ssh.
dans le fichier /etc/sshd_config les lignes suivantes doivent apparaitre :
PermitRootLogin no
AllowUsers mon_utilisateur
et voila !
zerbro, tout à fait, bonne remarque !
Omnisilver, vide vide ? Pas même un petit fichier user ? Chez moi dans /var/mail/ il y a qu'un fichier djib, ce qui est logique car comme je l'ai dit avec ubuntu tous les courriels pour le root sont automatiquement transférés à l'utilisateur (donc root en fait a jamais reçu de message).
Ton article paraît intéressant et semble jeter les premières bases de l'éducation d'un néophyte à la sécurité. Cependant, je tiens à rassurer certains. Les virus sous Linux n'existent pas (ou du moins pas encore mais si un vrai virus se déclare alors ça risque d'en surprendre plus d'un dont des experts en sécurité)...
Le seul problème rencontré sous Linux est sa sensibilité aux vers qui se propagent sur des systèmes faisant tourner des services vulnérables et non mis à jour. Mais comme maintenant on fait souvent l'amalgame, on dit "Linux a des virus" mais non... Linux a des vers d'où l'importance des mises à jour de sécurité. Voir par exemple l'excellent ouvrage "Halte aux hackers".
Article intéressant.
Cependant, l'argumentaire «Pourquoi ?» pour justifier «Le respect de l'administrateur» ne me parait pas super pertinent. En effet, mon poste linux est un poste de travail, et les seules données sensibles sont celles dans mon répertoire personnel. Que mon système soit affecté, je m'en fiche, je peux le réinstaller à l'identique en pas une heure.
Par contre c'est tout à fait valable dans le cas d'un serveur, ou d'un poste avec plusieurs comptes utilisateur.
zerbro> Tout à fait. Pour est encore plus sûr, j'oblige l'authentification SSH à se faire par clé privée (cf man sshd_config).
Sebastw, je ne savais pas qu'il existait une distinction entre ver et virus... il va falloir que je me renseigne.
bobuse, il y a peut-être d'autre manières de justifier la non utilisation de l'administrateur.
Si toutes tes données sensibles sont au même endroit, tu peux faire une sauvegarde régulière. La réinstallation d'un ordinateur est une histoire que je ne connais plus depuis que j'ai quitté Windows.
Pour que les cron s'exécutent même quand l'ordinateur n'est pas toujours allumé, il existe le paquet anacron qui exécutera les tâches prévues dès que l'ordinateur est allumé.
djib --> rien du tout :'(

Par contre sur mon autre partition qui contient Breezy (euh oui c'est la bazar chez moi) il y a un fichier adrien avec les mails.
Etrange que je n'ai pas sous ma Dapper !
Je vais me renseigner à ce sujet, ne te casses pas la tête dessus
Omnisilver, si tu trouves la réponse ça m'intéresse.
Reivax, je ne savais pas pour anacron ! Merci !
Pour Omnisilver
Le fichier contenant les mails n'est créé que si l'utilisateur à reçu au moins un mail (sytème), ca ne doit pas être le cas chez toi.
Salut djib,
Très bon travail ! Ton billet donne d'excellentes notions de sécurité.
Pour ceux qui ont un système de type Debian (comme Ubuntu par exemple), je vous recommande de lire aussi : www.us.debian.org/doc/use...
Bonne continuation!
c'est normal que mon commentaire ne s'ajoute pas?
Asher, désolé, ton commentaire a été bloqué par le filtre anti-pourriels.
Merci pour ton commentaire.
Je ne sais pas ce qu'il a, ce filtre anti-spam... Même mon blog me bloque parfois
!

C'est sûrement un bug dans spamplemousse :$ ???
Je vais contacter l'auteur du plugin pour voir d'où ça vient...
a+
Merci pour ce très bel article, simple clair et efficace ! Bravissimo !
1/ J'y vais de ma petite remarque : souvent les systèmes sont installés par défaut, et souvent les systèmes par défaut ont what-1000 services inutiles... alors le mieux reste de les désactiver au démarrage.
Dans la console :
- on tape la commande "runlevel" qui donne le mode de démarrage du système
- on file dans le répertoire qui va bien "cd /etc/rc2.d" (dans le cas d'un runlevel=2), dans ce répertoire se trouve des "liens" vers des fichiers de commandes qui eux se trouvent dans /etc/init.d
- perso je crée un répertoire "toto" et je déplace ce qui me paraît inutiles dans ce joli répertoire, en cas de problème je reviens vite fait en arrière, le jugement dernier viendra d'un arrêt du système suivi d'un démarrage "normal", si pas de bétise tout il ira bien... un problème vendra avec le déplacement d'un service utile...
Par inutile j'entend un serveur web, de messagerie, je vois du pcmcia par défaut, ... inutile sera différent pour chacun évidemment...
2/ Un petit plus qui me reste de windows, les habitudes ont la vie dures... c'est de ne pas installer what-1000 programme pour "essayer"... ça allourdi le système et dans le pire des cas cela va ouvrir le système...
Voilà en tout cas un blog que je découvre et qui risque d'être mis dans les favoris...
@+
JeanMarc
Ok Asher.
Merci beaucoup spud.
Je crois qu'il y a des interfaces graphiques pour choisir les services qui sont lancés, mais j'avoue n'avoir jamais touché à ça.
Il m'arrive cependant de désactiver des services en faisant tout simplement un chmod -x nom_du_service dans le /etc/rcX.d correspondant).
Sinon pour ce qui est de l'installation des programmes, je pense que c'est l'un des gros avantages d'Ubuntu, les programmes par défaut sont très bien choisis et pas trop nombreux.
Bien sûr il m'arrive de tester des programmes. Dans ce cas lors de l'installation je copie la liste des paquets qui sont installés dans un fichier, et puis si je ne suis pas content du programme je le désinstalle ainsi que tous les paquets qui ont été installés, et ce en utilisant la commande :
sudo apt-get remove --purge le_programme premiere_dependance ...
Voilà.
Pour plus d'infos sur la sécurisation Debian : linux.developpez.com/cour...
Et si tu souhaites vraiment blinder ton linux il existe divers patchs noyau dont un avec lequel je me suis amusé LIDS. J'ai fais une petite doc sur son installation/config
dab.free.fr/wp/?p=18
Merci, je regarde tout ça tout de suite.