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
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 visudo
qui 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.
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 sudo
Dans 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.