Comment contrôler l’accès sudo sur Linux

La commande sudo vous permet d’exécuter des commandes sous Linux comme si vous étiez quelqu’un d’autre, comme root. sudo vous permet également de contrôler qui peut accéder aux capacités de root, avec une granularité. Donnez aux utilisateurs un accès complet ou laissez-les utiliser un petit sous-ensemble de commandes. Nous vous montrons comment.

sudo et autorisations racine

Nous avons tous entendu (la simplification excessive) que tout dans Linux est un fichier. En vérité, pratiquement tout dans le système d’exploitation, depuis les processus, les fichiers, les répertoires, les sockets et les tuyaux, communique avec le noyau via un descripteur de fichier. Ainsi, bien que tout ne soit pas un fichier, la plupart des objets du système d’exploitation sont traités comme s’ils l’étaient. Dans la mesure du possible, la conception des systèmes d’exploitation de type Linux et Unix adhère à ce principe.

Le concept de «tout est un fichier» a une grande portée sous Linux. Il est alors facile de voir comment les autorisations de fichiers sous Linux sont devenues l’un des piliers des privilèges et droits des utilisateurs. Si vous possédez un fichier ou un répertoire (un type spécial de fichier), vous pouvez faire ce que vous voulez, y compris le modifier, le renommer, le déplacer et le supprimer. Vous pouvez également définir les autorisations sur le fichier afin que d’autres utilisateurs ou groupes d’utilisateurs puissent lire, modifier ou exécuter le fichier. Tout le monde est régi par ces autorisations.

Tous ceux qui, à l’exception du superutilisateur, sont connus sous le nom de root. Le compte root est un compte spécialement privilégié. Il n’est lié par les autorisations sur aucun des objets du système d’exploitation. L’utilisateur root peut faire n’importe quoi à n’importe quoi et, à peu près, à tout moment.

Bien sûr, toute personne ayant accès au mot de passe root peut faire de même. Ils pourraient faire des ravages soit par malveillance, soit accidentellement. En fait, l’utilisateur root peut aussi faire des ravages en faisant une erreur. Personne n’est infaillible. C’est des trucs dangereux.

C’est pourquoi il est désormais recommandé de ne pas se connecter du tout en tant que root. Connectez-vous avec un compte utilisateur régulier et utilisez sudo pour élevez vos privilèges pour la courte durée vous en avez besoin. Souvent, il s’agit simplement d’émettre une seule commande.

La liste des sudoers

sudo était déjà installé sur les ordinateurs Ubuntu 18.04.3, Manjaro 18.1.0 et Fedora 31 utilisés pour rechercher cet article. Ce n’est pas une surprise. sudo existe depuis le début des années 1980 et est devenu le moyen standard de fonctionnement des super-utilisateurs pour presque toutes les distributions.

Lorsque vous installez une distribution moderne, l’utilisateur que vous créez lors de l’installation est ajouté à une liste d’utilisateurs appelée sudoers. Ce sont les utilisateurs qui peuvent utiliser la commande sudo. Parce que vous avez des pouvoirs sudo, vous pouvez les utiliser pour ajouter d’autres utilisateurs à la liste des sudoers.

Bien sûr, il est imprudent de donner le statut de super-utilisateur complet bon gré mal gré, ou à quiconque n’a qu’un besoin partiel ou spécifique. La liste sudoers vous permet de spécifier les commandes avec lesquelles les différents utilisateurs sont autorisés à utiliser sudo. De cette façon, vous ne leur donnez pas les clés du royaume, mais ils peuvent toujours accomplir ce dont ils ont besoin.

  Voici quelques améliorations de sécurité dans Android 5.0 Lollipop

Exécution d’une commande en tant qu’autre utilisateur

À l’origine, cela s’appelait «super-utilisateur», car vous pouviez faire des choses en tant que super-utilisateur. Sa portée a été élargie maintenant et vous pouvez utiliser sudo pour exécuter une commande comme si vous étiez n’importe quel utilisateur. Il a été renommé pour refléter cette nouvelle fonctionnalité. Il s’appelle désormais «utilisateur de remplacement».

Pour utiliser sudo pour exécuter une commande en tant qu’autre utilisateur, nous devons utiliser l’option -u (utilisateur). Ici, nous allons exécuter le qui suis je commande comme l’utilisateur mary. Si vous utilisez la commande sudo sans l’option -u, vous exécuterez la commande en tant que root.

Et bien sûr, parce que vous utilisez sudo, vous serez invité à entrer votre mot de passe.

sudo -u mary whoami

sudo -u whoami dans une fenêtre de terminal

La réponse de whoami nous dit que le compte utilisateur exécutant la commande est mary.

Vous pouvez utiliser la commande sudo pour vous connecter en tant qu’autre utilisateur sans connaître son mot de passe. Vous serez invité à entrer votre propre mot de passe. Nous devons utiliser l’option -i (login).

sudo -i -u mary
pwd
whoami
ls -hl
exit

sudo -i -u mary dans une fenêtre de terminal

Vous êtes connecté en tant que mary. Les fichiers «.bashrc», «.bash_aliases» et «.profile» du compte utilisateur mary sont traités exactement comme si le propriétaire du compte utilisateur mary s’était connecté.

L’invite de commande change pour refléter ceci est une session pour le compte d’utilisateur mary.
La pwdcommand vous rappelle que vous êtes maintenant dans Mary répertoire personnel.
whoami nous dit que vous utilisez le compte utilisateur mary.
Les fichiers du répertoire appartiennent au compte utilisateur mary.
La commande exit vous ramène à votre session de compte utilisateur normale.

Modification du fichier sudoers

Pour ajouter des utilisateurs à la liste des personnes pouvant utiliser sudo, vous devez modifier le fichier sudoers. Il est extrêmement important de ne le faire qu’en utilisant la commande visudo. La commande visudo empêche plusieurs personnes d’essayer de modifier le fichier sudoers à la fois. Ça aussi vérifie et analyse la syntaxe sur le contenu du fichier lorsque vous les enregistrez.

Si vos modifications ne réussissent pas les tests, le fichier n’est pas enregistré à l’aveugle. Vous obtenez des options. Vous pouvez annuler et abandonner les modifications, revenir en arrière et modifier à nouveau les modifications ou forcer l’enregistrement des modifications incorrectes. La dernière option est une très mauvaise idée. Ne soyez pas tenté de faire ça. Vous pouvez vous retrouver dans une situation où tout le monde est accidentellement empêché d’utiliser sudo.

Bien que vous démarriez le processus d’édition à l’aide de la commande visudo, visudo n’est pas un éditeur. Il appelle l’un de vos éditeurs existants pour effectuer les modifications de fichiers. Sur Manjaro et Ubuntu, la commande visudo est lancée l’éditeur simple nano. Sur Fedora, visudo a lancé le plus performant –mais moins intuitif-vigueur.

Si vous préférez utiliser nano sur Fedora, vous pouvez le faire facilement. Tout d’abord, installez nano:

sudo dnf installer nano

sudo dnf installer nano dans une fenêtre de terminal

Et puis visudo a dû être invoqué avec cette commande:

sudo EDITOR=nano visudo

sudo EDITOR = nano visudo dans une fenêtre de terminal

Cela ressemble à un bon candidat pour un alias. L’éditeur nano est ouvert avec le fichier sudoers chargé.

éditeur nano avec le fichier sudoers chargé dedans

Ajout d’utilisateurs au groupe sudo

Utilisez visudo pour ouvrir le fichier sudoers. Utilisez soit cette commande, soit celle décrite ci-dessus pour spécifier l’éditeur de votre choix:

sudo visudo

sudo visudo dans une fenêtre de terminal

Faites défiler le fichier sudoers jusqu’à ce que vous voyiez la définition de l’entrée% sudo.

  Comment utiliser at et batch sur Linux pour planifier des commandes

Le fichier sudoers avec la ligne% sudo en surbrillance

Le signe de pourcentage indique qu’il s’agit d’une définition de groupe et non d’une définition d’utilisateur. Sur certaines distributions, la ligne% sudo a un hash # au début de la ligne. Cela fait de la ligne un commentaire. Si tel est le cas, supprimez le hachage et enregistrez le fichier.

La ligne% sudo se décompose comme ceci:

% sudo: le nom du groupe.
ALL =: Cette règle s’applique à tous les hôtes de ce réseau.
(TOUS: TOUS): les membres de ce groupe peuvent exécuter des commandes comme tous les utilisateurs et tous les groupes.
Tous: les membres de ce groupe peuvent exécuter toutes les commandes.

Pour reformuler légèrement cela, les membres de ce groupe peuvent exécuter n’importe quelle commande, comme n’importe quel utilisateur ou groupe, sur cet ordinateur ou sur tout autre hôte de ce réseau. Donc, un moyen simple de donner à quelqu’un les privilèges root et la possibilité d’utiliser sudo est de les ajouter au groupe sudo.

Nous avons deux utilisateurs, Tom et Mary, avec respectivement les comptes utilisateur Tom et Mary. Nous ajouterons le compte utilisateur tom au groupe sudo avec la commande usermod. L’option -G (groupes) spécifie le groupe auquel nous allons ajouter le compte tom. L’option -a (ajouter) ajoute ce groupe à la liste des groupes dans lesquels le compte utilisateur tom est déjà. Sans cette option, le compte utilisateur tom serait placé dans le nouveau groupe mais supprimé de tout autre groupe.

sudo usermod -a -G sudo tom

sudo usermod -a -G sudo tom dans une fenêtre de terminal

Vérifions dans quels groupes Mary appartient:

groups

groupes dans une fenêtre de terminal

Le compte utilisateur mary appartient uniquement au groupe mary.

Vérifions avec Tom:

groups

groupes dans une fenêtre de terminal

Le compte utilisateur tom – et donc Tom – se trouve dans les groupes tom et sudo.

Essayons d’amener Mary à faire quelque chose qui nécessite des privilèges sudo.

sudo less /etc/shadow

sudo less / etc / shadow dans une fenêtre de terminal

Mary ne peut pas regarder à l’intérieur du fichier restreint «/ etc / shadow». Elle reçoit un léger reproche pour avoir essayé d’utiliser sudo sans permission. Voyons comment Tom s’en sort:

sudo less /etc/shadow

sudo less / etc / shadow dans une fenêtre de terminal

Dès que Tom entre son mot de passe, on lui montre le fichier / etc / shadow.

le fichier / etc / shadow en less dans une fenêtre de terminal

Juste en l’ajoutant au groupe sudo, il a été élevé au rang d’élite de ceux qui peuvent utiliser sudo. Complètement illimité.

Donner aux utilisateurs des droits sudo restreints

Tom a reçu tous les droits sudo. Il peut faire tout ce que root – ou n’importe qui d’autre dans le groupe sudo – peut faire. Cela pourrait lui donner plus de pouvoir que vous ne le souhaitez. Parfois, il est nécessaire qu’un utilisateur exécute une fonction qui nécessite des privilèges root, mais il n’y a pas de cas justifié pour qu’ils aient un accès sudo complet. Vous pouvez atteindre cet équilibre en les ajoutant au fichier sudoers et en répertoriant les commandes qu’ils peuvent utiliser.

Rencontrons Harry, propriétaire du compte utilisateur harry. Il n’est pas dans le groupe sudo et il n’a pas de privilèges sudo.

groups

groupes dans une fenêtre de terminal

Il est utile pour Harry de pouvoir installer un logiciel, mais nous ne voulons pas qu’il ait tous les droits sudo. OK, pas de problème. lançons visudo:

sudo visudo

sudo visudo dans une fenêtre de terminal

Faites défiler le fichier jusqu’à ce que vous dépassiez les définitions de groupe. Nous allons ajouter une ligne pour Harry. Comme il s’agit d’une définition d’utilisateur et non d’une définition de groupe, nous n’avons pas besoin de commencer la ligne par un signe de pourcentage.

entrée de fichier sudoer pour harry

L’entrée pour le compte utilisateur harry est:

harry    ALL=/usr/bin/apt-get

Notez qu’il y a un onglet entre «harry» et «ALL =».

  Comment supprimer l'icône du centre de téléchargement Microsoft Office dans Windows 10

Cela se lit comme le compte d’utilisateur harry peut utiliser les commandes répertoriées sur tous les hôtes connectés à ce réseau. Il y a une commande répertoriée, qui est «/ usr / bin / apt-get». Nous pouvons accorder à Harry l’accès à plus d’une commande en les ajoutant à la liste des commandes, séparées par des virgules.

Ajoutez la ligne au fichier sudoers et enregistrez le fichier. Si vous souhaitez vérifier que la ligne est syntaxiquement correcte, nous pouvons demander à visudo de scanner le fichier et de vérifier la syntaxe pour nous, en utilisant l’option -c (vérifier uniquement):

sudo visudo -c

sudo visudo -c dans une fenêtre de terminal

Les contrôles ont lieu et visudo rapporte que tout va bien. Harry devrait maintenant pouvoir utiliser apt-get pour installer le logiciel mais devrait être refusé s’il essaie d’utiliser toute autre commande nécessitant sudo.

sudo apt-get install finger

sudo apt-get install finger dans une fenêtre de terminal

Les droits sudo appropriés ont été accordés à Harry et il est en mesure d’installer le logiciel.

Que se passe-t-il si Harry essaie d’utiliser une commande différente qui nécessite sudo?

sudo shutdown now

arrêt sudo maintenant dans une fenêtre de terminal

Harry est empêché d’exécuter la commande. Nous lui avons accordé avec succès un accès spécifique et restreint. Il peut utiliser la commande désignée et rien d’autre.

Utilisation des alias d’utilisateurs sudoers

Si nous voulons donner à Mary les mêmes privilèges, nous pourrions ajouter une ligne dans le fichier sudoers pour le compte utilisateur mary exactement de la même manière que nous l’avons fait avec Harry. Un autre moyen, plus efficace, de réaliser la même chose consiste à utiliser un User_Alias.

dans le fichier sudoers, un User_Alias ​​contient une liste de noms de compte utilisateur. Le nom de User_Alias ​​peut ensuite être utilisé dans une définition pour représenter tous ces comptes d’utilisateurs. Si vous souhaitez modifier les privilèges de ces comptes d’utilisateurs, vous n’avez qu’une seule ligne à modifier.

Créons un User_Alias ​​et utilisons-le dans notre fichier sudoers.

sudo visudo

sudo visudo dans une fenêtre de terminal

Scroll down in the file until you come to the User_Alias specification line.

Fichier sudoers avec Users_Alias ​​ajouté

Ajoutez User_Alias ​​en tapant:

User_Alias INSTALLERS = harry, mary

Chaque élément est séparé par un espace et non par une tabulation. La logique se décompose comme suit:

User_Alias: Cela indique à visudo que ce sera un User_Alias.
INSTALLATEURS: Il s’agit d’un nom arbitraire pour cet alias.
= harry, mary: la liste des utilisateurs à inclure dans cet alias.

Nous allons maintenant modifier la ligne que nous avons ajoutée précédemment pour le compte utilisateur harry:

harry    ALL=/usr/bin/apt-get

Modifiez-le pour qu’il se lit comme suit:

INSTALLERS    ALL=/usr/bin/apt-get

Cela dit que tous les comptes utilisateurs contenus dans la définition de User_Alias ​​«INSTALLATEURS» peuvent exécuter la commande apt-get. Nous pouvons tester cela avec Mary, qui devrait maintenant pouvoir installer le logiciel.

sudo apt-get install colordiff

sudo apt-get installer colordiff dans une fenêtre de terminal

Mary est en mesure d’installer le logiciel car elle se trouve dans User_Alias ​​«INSTALLERS» et que User_Alias ​​a obtenu ces droits.

Trois astuces sudo rapides

Lorsque vous oubliez d’ajouter sudo à une commande, tapez

sudo !!

Et la dernière commande sera répétée avec sudo ajouté au début de la ligne.

Une fois que vous avez utilisé sudo et authentifié avec votre mot de passe, vous n’aurez plus à utiliser votre mot de passe avec d’autres commandes sudo pendant 15 minutes. Si vous souhaitez que votre authentification soit immédiatement oubliée, utilisez:

sudo -k

Vous êtes-vous déjà demandé où vous pouvez voir les tentatives de commande sudo échouées? Ils vont dans le fichier «/var/log/auth.log». Vous pouvez le visualiser avec:

less /var/log/auth.log

Le fichier /var/log/auth.log dans une fenêtre de terminal

Nous pouvons voir l’entrée du compte utilisateur Mary qui était connectée à TTY pts / 1 lorsqu’elle a essayé d’exécuter la commande d’arrêt en tant qu’utilisateur «root».

Avec une grande puissance…

… Vient la capacité d’en déléguer une partie à d’autres. Vous savez maintenant comment responsabiliser les autres utilisateurs de manière sélective.