2. Utilisateurs, mots de passes, et authentification

Une bonne politique d'acompte est primordiale, et constitue un élément de base d'un système.

a. Login avec utilisateurs et mots de passe

Toute personne utilisant une machine Gnu/Linux devrait avoir son propre compte utilisateur sur le système, et être ainsi identifié sur celle ci par un numéro d'authentification unique (UID, user identification, identifiant utilisateur en français). De cette manière, toute action sur la machine peut être tracée, et on a un moyen de savoir qui a fait quoi. Ce login est appelé identifiant utilisateur et sert à savoir qui vous êtes, tandis que le mot de passe associé est appelé « authentificator », et sert à prouver que ce compte est bien le votre. L'identifiant doit bien sûr être unique, et peut se baser sur beaucoup d'éléments, tels le nom ou le prénom de la personne, son métier, sa localisation, ou une combinaison de ces éléments et d'autres. Une machine sous Gnu/Linux possède un certain nombr /e de compte particuliers, qui ne doivent par conséquent pas être utilisés par des utilisateurs.


Le mot de passe est un élément secret partagé entre un utilisateur et une machine, il est utilisé comme on l'a vu pour prouver à une machine que vous êtes bien qui vous prétendez être. Les mots de passes ne devraient jamais être vides, et devraient systématiquement respecter une politique de complexité. Les systèmes Gnu/Linux respectent la casse, et à ce titre les bon mots de passes doivent en tirer partie, en mélangeant minuscules, majuscules, caractères alpha-numériques, et caractères spéciaux. De la même manière, ils ne devraient pas être en dessous d'une taille minimale (huit caractères est généralement pris comme un bon chiffre, mais toutefois j'ai personnellement pour habitude d'utiliser des mots de passes d'au moins dix caractères). La complexité des mots de passes doit être forcée, de manière à ne pas permettre à un utilisateur d'utiliser un mot de passe trop simple ou facile à trouver. Il convient également de ne pas utiliser de mots de passes faciles à retrouver (dates marquantes de la vie d'une personne, éléments se rapportant à une passion, un mot issu d'un dictionnaire...). Un mauvais mot de passe est comme une porte qui serait fermée mais dont on n'aurait pas tourné la clé : inutile en cas de tentative d'intrusion. Un élément à ne pas négliger est la manière dont les personnes stockent leurs mots de passe, il faut éviter de le noter, et essayer de l'apprendre. Egalement, il convient de ne le fournir à personne, sous quelque prétexte que ce soit. La solution que je préconise est l'utilisation de générateurs aléatoires de mots de passe, qui permettra de produire de réels mots de passes, bien que plus difficiles à retenir, ce qui va dans le sens de la sécurisation de l'accès à une machine.


Des utilitaires permettent de tester le degré de validité des mots de passe, comme John The Ripper par exemple (disponible sur le site http://www.openwall.com ), que l'on pourra appelé régulièrement sur les nouveaux comptes d'une machine, et qui tente de trouver les mots de passes en procédant à une attaque dite de force br /ute, seule attaque réelle utilisable à l'heure actuelle, en essayant toutes les possibilités. Les mots de passes ne sont pas réversibles.


Il convient de bloquer les comptes systèmes ou ne devant pas ouvrir de session. Pour cela, on va utiliser un shell alternatif pour ces utilisateurs. Sous Debian, on pourra spécifier la commande /bin/false comme commande de shell à utiliser, à la fin de la ligne concernant l'utilisateur dans le fichier /etc/passwd.


b. Utilisateurs et groupes

Chaque utilisateur d'un système Gnu/Linux a donc un identifiant utilisateur unique, mais il fait aussi parti d'au moins un groupe. Ces groupes peuvent améliorer grandement la sécurité, car c'est en jouant avec ceux-ci que l'on va permettre le partage de ressources et de fichiers, chaque élément du système Gnu/Linux étant vu comme un fichier, dans la mesure où les droits sur ceux ci sont définis en fonction de trois éléments : l'utilisateur, le groupe de l'utilisateur, les autres groupes.


c. Pam

Pam signifie « Pluggable Authentication Modules », et c'est une interface de d'authentification système permettant d'interagir avec différents systèmes d'authentification, tels passwd, NIS, LDAP, Kerberos, ou d'autres encore. Cela permet d'offrir une couche d'abstraction et donc de s'identifier de manière unique. D'une manière générale, les système Gnu/Linux propose par défaut une authentification par le fichier /etc/passwd, auquel il convient si on décide d'en garder l'utilisation d'ajouter le mécanisme « Shadow », qui stocke les mots de passes et des données temporelles relatives aux comptes dans un fichier séparé, lisible uniquement par le super-utilisateur (root). L'intérêt de PAM est aussi de proposer une gestion fine des mécanismes de sessions utilisateurs, grâce aux quatre phases de son processus d'accès :


_ Vérification que le compte utilisé existe, et est autorisé à se connecter au moment désiré, depuis l'endroit désiré

_ Authentification de l'utilisateur (grâce au mot de passe, ou à d'autres moyens, tels qu'une clé publique, mais nous y reviendrons lorsque nous parlerons de SSH

_ Mise à jour des mots de passes si besoin, et des jetons d'authentification

_ Mise en place et fermeture de la session utilisateur, ce qui peut inclure des mécanismes d'audit, et une limitation de l'accès aux ressources


Tous ces éléments sont configurables via le fichier /etc/pam.conf, et on peut appliquer la règle déjà vue du « tout ce qui n est pas autorisé est interdit ».


d. Le Super utilisateur

Un utilisateur particulier des systèmes Gnu/Linux possède un UID égal à zéro. Son nom est généralement root (racine en anglais). Les distributions Gnu/Linux utilisent elles-mêmes cet utilisateur pour effectuer leur tâches bas-niveau, telles que les entrées et sorties (IO) système par exemple. Cet utilisateur a un contrôle proche du maximum sur la machine, c'est le compte le plus critique, qui a tous les droits, aux limitations physiques ou imposées par le noyau par exemple.


Le problème avec cet utilisateur est qu'il représente la principale faiblesse des systèmes Gnu/Linux. Parce qu'il peut tout faire, si une personne arrive à récupérer les privilèges du super-utilisateur, elle peut virtuellement faire ce que bon lui semble. Dans ce cas, tous les systèmes de sécurités deviennent inutiles. Différentes techniques permettent de minimiser l'impact d'une telle compromission :


_ Stocker les données sur des média amovibles, et laisser ces média en sûreté, ou plus simplement démontés tant qu'elles ne sont pas requises.

_ Chiffrer les données sensibles. En effet, être super-utilisateur ne permet évidemment pas de casser les codes.

_ Monter les disques en lecture seule quand cela s'avère possible possible.

_ Garder des copies de sauvegardes saines du système, de manière à pouvoir revenir sur une compromission.


On peut limiter les pseudo-terminaux sur lesquels l'utilisateur peut se connecter, grâce au fichier /etc/securetty. Une configuration idéale pour la sécurité serait d'empêcher la connexion du super utilisateur par le réseau, et d'obliger le login en utilisant un autre compte, et en devenant root par la suite avec la commande « su », qui permet de changer d'identité.


Ce super utilisateur est donc un compte à utiliser avec parcimonie, tout en restant conscient de la dangerosité représentée par ce compte. Des tentatives de compartimentation du système ont été tentés sur des dérivés d'Unix, mais ceux ci ont échoués à cause du fait que certains privilèges pouvait servir à en gagner d'autres, comme par exemple le compte avec les droits sur les IO peut modifier la base de données définissant les droits, et s'accorder tout privilèges.



1. Police de sécurité
Sommaire
3. Systèmes de fichiers