Renforcement de la sécurité grâce aux utilisateurs multiples
Avertissement: L’utilisation des méthodes exposées nécessite une certaine maîtrise et une certaine compréhension du fonctionnement du système. Bien entendu elles sont livrées sans garantie et l’auteur décline toute responsabilité quant à leur usage…
Introduction
Sous GNU/Linux et les systèmes UNIX, il est un fait connu et établi que le système multi-utilisateurs (à condition d’être bien paramétré) apporte une sécurité supplémentaire à la machine.
D’une manière générale (en oubliant entre autres quelques failles occasionnelles et vite corrigées dans le noyau), chaque utilisateur ne peut faire que ce que le système lui permet de faire, et peut difficilement nuire plus aux autres utilisateurs. Cela signifie aussi que si un compte utilisateur est compromis (virus (rare), utilisation d’une faille de sécurité d’un executable lancé, etc…), les conséquences s’arrêtent souvent à ce seul compte utilisateur…
Jusque là, rien de nouveau si ce n’est des généralités très connues de nombreux Linuxiens… Pourtant une chose moins utilisée est l’utilisation de comptes multiples de façon simultané par un seul utilisateur physique.À quoi bon cela peut il servir? Non pas à gérer d’éventuels doublements de personnalité (ce n’est pas à un programme informatique de gérer cela, pas même à Emacs…), mais à diminuer l’impact éventuel d’une brèche de sécurité.
Exemple typique de l’utilité des comptes multiples
Supposons que vous surfez sur le web (quoi de plus anodin?) à l’aide de votre navigateur préféré (par exemple firefox). Supposons que votre navigateur est affecté par une faille permettant l’exécution non désirée de code arbitraire (autrement dit une faille sévère, observez par exemple les notes concernant les différences de version entre firefox 2.0.15 et firefox 2.0.16). Vous ne voudriez pas que toutes vos données personnelles (éventuellement confidentielles, numéro de CB et tout…) et vos fichiers (votre travail d’un mois que certes vous n’aurez pas manqué de sauvegarder) puissent être modifiées ou lus sans votre accord?
Eh bien c’est là que l’on peut profiter d’une sécurité accrue, par exemple si firefox est lancé par un utilisateur qui ne sert que pour ce programme et qui n’a que des droits d’accès restreint aux données des autres utilisateurs. Certes le nombre de données confiées à un navigateur peut être grand (voire immense), néanmoins quand on peut limiter les dégâts autant ne pas s’en priver…
Bref, vous l’aurez compris, utiliser des comptes supplémentaires pour certaines applications peut aider beaucoup…
Quels comptes créer? Quelques éléments de réponse…
Sans tomber dans la philosophie “un compte pour une application” (quoique d’après ce que j’ai compris ce principe pourrait avoir un écho non négigeable dans le futur), il est possible de renforcer facilement la sécurité en créant quelques comptes pour des usages spécifiques…
Bien que ceci n’est pas un guide, voici quelques idées possibles de comptes supplémentaires à créer pour un utilisateur physique régulier de la machine:
- Un compte rien que pour firefox: programme très soumis à des données extérieures (donc données échappant à tout contrôle total). C’est aussi un programme complexe et donc il reste “normal” que malgré la grande qualité de son code on puisse trouver de temps en temps des failles critiques. “Isoler” spécifiquement ce programme peut être un bon choix stratégique.
- Un compte pour la plupart des autres programmes traitant des données provenant du web (mais facilement isolables de l’activité de navigation) par exemple votre client IRC et quelques autres trucs…
- Vous aurez probablement votre sorte de “compte principal” qui cumulera la plupart de vos usages…
- Vous aurez peut être aussi un compte éventuel pour protéger vos données ultra-confidentielles (le cas échéant), ce qui concerne votre job, etc…
Bref, le choix des différents comptes n’est pas forcément facile, et tout ne se fait pas forcément sans complication… (La philosophie “le compte unique + le compte root” n’est pas forcément toujours critiquable…)
En résumé: c’est à vous de bien réfléchir à vos besoins…
Utiliser plusieurs comptes, pour une seule personne… Donc souvent en même temps!
Si vous utilisez différents comptes pour différentes personnes, ouvrir/fermer/suspendre des sessions (graphiques) est souvent assez facilement gérable… Maintenant si vous avez plusieurs comptes pour vous, il y a déjà plus de chances pour que vous ressentiez un besoin un peu plus accru de les utiliser en même temps…
En mode texte c’est généralement assez facile (et connu). En mode graphique, ça se complique (un tout petit peu) mais la situation reste tout à fait gérable. Je vais donc vous apporter quelques pistes à ce sujet:
Supposons que vous avez un utilisateur principal “NomUtilisateurPrincipal” (session graphique sous X ouverte) et que vous souhaitez faire quelques activités avec l’utilisateur secondaire “NomUtilisateurSecondaire“, la méthode est en général assez simple. Ici un scénario parmi tant d’autres pour vous familiariser:
- lancez un terminal (avec “NomUtilisateurPrincipal“)
- dans ce terminal tapez
kdesu -u "NomUtilisateurSecondaire" konsole(il vous faut les programmes nécessaires, et il y a bien sûr d’autres scénarios possibles) - le nouveau terminal lancé (il peut éventuellement mettre du temps à apparaitre…), possède les droits de “NomUtilisateurSecondaire“, il en est de même des programmes qu’il servira à lancer…
- essayez de lancer un ou deux programmes depuis cette nouvelle konsole, et profitez en pour tester un peu…
Notes diverses
- À chaque fois que mozilla firefox vous lancerez, l’option “-no-remote” vous prendrez soin d’utiliser, ou alors du multi-utilisateurs simultanés vous vous abstiendrez! (Plus sérieusement sinon vous risquez quelques petites surprises…)
- Sinon si vous lancez un programme depuis un terminal, pensez à faire attention avant de fermer le terminal… (Surtout si vous n’avez pas utilisé “nohup”…)

Bonjour.
Pour que NomUtilisateurSecondaire puisse utiliser un programme graphique [1] dans la session X de NomUtilisateurPrincipal, il faut que NomUtilisateurPrincipal tape la commande suivante :
xhost local:
Ne pas oublier les 2 points à la fin de la commande !
[1] un programme graphique, c’est-à-dire un programme utilisant une session graphique X
@Sylvain:
Bonjour et désolé pour la réponse tardive.
Le “xhost” est en effet pertinent à mentionner.
Les méthodes ne sont pas tout à fait pareilles: le “kdesu” ne lance qu’une seule commande (qui peut elle même servir à relancer d’autres commandes), tandis que la méthode que vous indiquez avec xhost autorise (jusqu’à désactivation par un “xhost -local:”) tous les autres utilisateurs à lancer des commandes sous le serveur X.
Cela représente à mon goût un risque (certes assez théorique mais réel) de “phishing” (ici pas par des pages webs mais par des applications) encore plus accru.
Cependant cette méthode du xhost à l’avantage de rendre pas mal de choses simples (au moins en apparence).
Merci pour avoir pensé à cette indication.
David