Linux Fu : la cause profonde

Il fut un temps où les vrais administrateurs système se connectaient simplement aux systèmes Unix en tant que root. Mais comme nous le savons tous, un grand pouvoir implique de grandes responsabilités. Il est trop facile de faire des choses terribles alors que vous essayez simplement de faire un travail normal, et, en plus de cela, des logiciels ou des scripts malveillants peuvent faire des choses coquines sans que vous vous en rendiez compte. La pratique courante a donc rapidement changé : un administrateur disposait d'un compte personnel, mais disposait ensuite d'un moyen d'exécuter certains programmes « en tant que root », ce qui signifiait que vous deviez délibérément décider d'exercer votre pouvoir.

Bientôt, les gens ont réalisé que vous n'aviez même pas besoin d'un compte de connexion root. De cette façon, un attaquant ne peut pas du tout essayer de se connecter à root. Bien sûr, ils pourraient toujours compromettre votre compte, mais un pirate informatique aléatoire sait que vous pourriez avoir un utilisateur root, mais il est plus difficile de deviner que votre identifiant de connexion est JTKirkJr ou autre.

Il existe d'autres moyens de contrôler ce que les utilisateurs peuvent faire, mais de nombreuses installations Linux et Unix utilisent encore ce modèle. La racine peut tout faire sauf se connecter, et des utilisateurs spécifiques ont le privilège de faire certaines choses.

sudo

XKCD #149 (CC par SA 2.5)

Dans le monde Linux, sudo est très courant. C'est un peu difficile à configurer, mais une fois configuré, c'est assez simple du point de vue de l'utilisateur. Si vous souhaitez, par exemple, copier un fichier dans un répertoire système, vous préfixez la commande avec sudo:

sudo cp x.txt /usr/share/wherever

Le sudo Le programme validera votre mot de passe (pas le mot de passe root) ou vous connectera d'une autre manière (par exemple, en utilisant un appareil photo ou une clé intelligente ou tout ce que vous avez configuré pour PAM). Une fois validé, vous resterez validé pendant une courte période afin de ne pas avoir à vous connecter à chaque fois, bien que la période de temps soit réglable et puisse être désactivée.

Là où cela n’est pas simple, c’est lorsqu’on souhaite utiliser la redirection. Par exemple, une erreur courante est d’écrire :

sudo echo y >/sys/option/made-up-option

Cela échoue parce que sudo ne fonctionne que echo comme racine. Votre shell, le programme qui interprète la redirection, n'est toujours que vous et vous ne pouvez pas écrire dans le/sys/option annuaire. Il existe de nombreuses solutions de contournement pour cela. Par exemple:

echo y | sudo tee /sys/option/made-up-option

Il existe quelques options sudo que vous n'utilisez pas souvent, mais que vous devriez probablement :

  • -l — Liste. Montre ce que vous pouvez faire
  • -v — Valider. Cela actualise le délai d'expiration sans exécuter de commande.
  • -k — Tuer. Met fin à la période de validation maintenant, vous devrez donc vous authentifier à nouveau lorsque vous utiliserez sudo.
  • -u — Utilisateur. Normalement root, mais vous pouvez usurper l'identité d'autres utilisateurs avec cette option.
  • -i — Interactif. Exécutez un shell comme si vous étiez connecté en tant qu'utilisateur.
  • -e — Modifier. Modifiez un fichier en tant qu'utilisateur spécifié.
  • -g — Groupe. Courez en groupe.

La configuration est un peu délicate. De plus, si vous vous trompez trop, vous pourriez vous empêcher d'exécuter des commandes root, ce qui est désastreux. Pour cette raison, vous ne devriez pas modifier le /etc/sudoers fichier directement. Au lieu de cela, vous devriez utiliser visudoqui vérifie l'intégrité avant d'écraser votre fichier d'origine.

Ce n'est pas une mauvaise idée d'ouvrir un shell root (sudo -i) avant d'apporter des modifications dans un autre shell. Vous pouvez également faire une sauvegarde de sudoers jusqu'à ce que vous soyez sûr que vos modifications fonctionnent.

Rarement, vous aurez envie de changer /etc/sudo.conf, qui permet aux plugins de modifier le fonctionnement de sudo. Mais, généralement, la valeur par défaut de votre distribution correspond à ce que vous souhaitez, et toutes les modifications que vous souhaitez apporter sont dans /etc/sudoers.

Le sudoers Le fichier comporte une série de sections, dont beaucoup définissent des options ou des alias. Les lignes qui vous intéressent le plus ressemblent à ceci :

JTKirkJr ALL = (root) /usr/bin/ls

Cela signifie que l'utilisateur JTKirkJr sur n'importe quel hôte (TOUS) peut exécuter /usr/bin/ls en tant qu'utilisateur root. Une façon de penser à la structure est la suivante :

<who> <where> = <as_user[:as_group]><program...>

Parfois, vous voulez que la partie « qui » soit un groupe. C'est facile:

%sudo ALL=(ALL:ALL) ALL

Cela signifie que n'importe qui dans le groupe sudo sur n'importe quel hôte peut usurper l'identité de n'importe quel utilisateur ou groupe pour toutes les commandes. Facile! Parfois, vous souhaitez exécuter un programme de confiance en tant que root sans vous authentifier. C'est très dangereux, alors réfléchissez bien avant de faire quelque chose comme ceci :

JTKirtJr ALL=(root) NOPASSWD: /usr/bin/smidump

Vous pourrez peut-être ajouter des fragments aux fichiers à l'intérieur /etc/sudoers.d, en fonction de votre distribution. Vous pouvez trouver le manuel complet pour sudo en ligne.

XKCD #838 (CC par SA 2.5)

Si vous essayez de faire quelque chose pour lequel vous n’êtes pas approuvé, « l’incident est signalé ». Contrairement aux idées reçues, l'alerte ne va pas au pôle Nord, mais elle est connectée /var/log/auth.log.

su

Historiquement, de nombreuses personnes utilisaient su (ce qui peut signifier un utilisateur de remplacement, un changement d'utilisateur ou un super-utilisateur) pour obtenir un shell en tant qu'autre utilisateur (y compris root). Cela fonctionne, mais il n'a pas autant de contrôle que sudo. Vous recevez une coquille, ou vous ne l'obtenez pas. Et si vous le faites, vous pouvez tout faire.

Une différence entre su et sudo est-ce sudo veut votre mot de passe. Le su La commande veut le mot de passe de l'utilisateur que vous souhaitez être.

run0/systemd-run

Bien sûr, systemd veut parvenir à la domination mondiale, il a donc un moyen de faire la même chose. Initialement appelé systemd-run et, à partir de, systemd v256, invocable en tant que run0 pour économiser un peu de saisie et définir certaines options par défaut pour que cela fonctionne davantage comme sudo. Cependant, en interne, il est différent et exploite bien sûr des éléments comme polkit et systemd.

pkexec

En parlant de polkit, il dispose également d’un moyen – rarement utilisé – de faire un travail similaire. Le pkexec La commande vous permet d'exécuter du code en tant qu'autre utilisateur. Comme pour tous ces programmes, il existe un risque que le fait de permettre aux utilisateurs d'exécuter des programmes comme d'autres utilisateurs puisse ouvrir des failles de sécurité. Bien entendu, votre configuration est une source de ces vulnérabilités, mais dans certains cas, des bugs dans le programme peuvent créer de graves failles de sécurité.

L'utilisation principale de pkexec est de permettre à certains programmes GUI d'obtenir des privilèges plus élevés en cas de besoin. Avant ça, kdesu et gksu cependant, vous constaterez peut-être que ces programmes sont encore utilisés sur des systèmes plus anciens. Il existe également des wrappers sudo comme kdesudo. Cependant, vous ne voyez aucun de ces éléments dans la plupart des distributions les plus récentes.

faire comme

Si tu n'aimes pas sudoDans le fichier de configuration de, vous souhaiterez peut-être emprunter un programme à FreeBSD appelé doas. Il dispose également d'un fichier de configuration, mais il est beaucoup plus facile à utiliser. Le fichier à constituer est /etc/doas.conf. Certaines distributions incluent vidoas pour aider au montage.

Le format des règles est simple. Les lignes commencent par autoriser ou refuser, selon ce que vous souhaitez accomplir. Ensuite, vous pouvez nommer un utilisateur ou un groupe (avec un préfixe deux-points). Vous pouvez ajouter une clause « as » pour spécifier un utilisateur cible et un mot-clé cmd pour spécifier une commande spécifique.

Par exemple, pour permettre à n'importe quel membre du groupe sudo de faire n'importe quoi :

permit :sudo

C'est ça. Vous pouvez utiliser des options telles que nopass, persist et autres pour manipuler l'environnement. Donc, pour obtenir le mot de passe persistant, vous préférerez peut-être écrire

permit persist :sudo as root

L'enraciner

Vous devez être très prudent en modifiant tout ce qui concerne la façon dont les utilisateurs normaux peuvent exécuter des programmes en tant que root. Le risque de mauvais comportement est élevé. Cependant, il faut avoir quelque chose. Depuis run0 n'est pas encore vraiment largement disponible, nous ne sommes pas sûrs de son utilité. On voit rarement pkexec dans la nature. Alors que sudo est incroyablement flexible, nous apprécions la simplicité de doas.

En fin de compte, ils font tous le même travail. Comme d'habitude avec Linux, le choix vous appartient.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.