====== Commande sudo – Fichier de configuration sudoers ====== Source : https://www.it-connect.fr/commande-sudo-comment-configurer-sudoers-sous-linux Sous Debian. Configurer le **fichier "sudoers"**, permet de déléguer des droits d'accès à un groupe/utilisateur spécifique pour certains fichiers, certaines commandes. **Compte "root"** — le super-utilisateur de la machine, avec tous les droits, il sert à administrer et configurer le système. \\ **Compte "utilisateur"** membre du groupe "sudo" (dépend des distributions et du type d'installation) créé à l'installation. **Commande "sudo"** (Substitute User DO) permet à un utilisateur standard d'exécuter une action en se faisant passer par un autre utilisateur, par défaut "root". **id** —ou— **groups** --- Pour connaître les groupes de l’utilisateur : **id** utilisateur —ou— **groups** utilisateur ===== Droits du groupe "sudo" dans : /etc/sudoers ===== sudo nano /etc/sudoers * # User privilege specification * root    ALL=(ALL:ALL) ALL * # Allow members of group sudo to execute any command * %sudo   ALL=(ALL:ALL) ALL **Éditeur "visudo"** verrouille le fichier pour éviter des modifications de plusieurs utilisateurs simultanément, il vérifie la syntaxe des règles ajoutées ou modifiées. sudo visudo /etc/sudoers La syntaxe est précise : * sudo ALL=(ALL:ALL) ALL * utilisateur/%groupe machines=(utilisateurs:groupes) commandes **1 seul utilisateur ou groupe par ligne.** \\ ➡ __Utilisateur/groupe__ : pour spécifier un utilisateur, on indique simplement son identifiant ; pour un groupe on ajoute le préfixe "%". \\ ➡ __Machines__ : ALL concerne toutes les machines. ➡ __Utilisateurs__ : permet de spécifier l'utilisateur dont on prend les droits. "ALL" englobe tous les utilisateurs, y compris l'utilisateur "root". \\ ➡ __Groupes__ : idem pour les groupes. \\ ➡ __Commandes__ : la ou les commandes que l'utilisateur (ou le groupe) peut exécuter sur la machine. S'il y a plusieurs commandes, il faut utiliser la virgule comme séparateur. \\ **Donner des droits aux groupes et ajouter ensuite le(s) utilisateur(s) à ce groupe.** Ex. : Donner les droits à "utilisateur" pour éditer le fichier /etc/hosts via nano, en ajoutant : * utilisateur ALL=(ALL) /usr/bin/nano /etc/hosts **"which"** --- Pour trouver le chemin vers le binaire, par exemple : which nano "sudoers" supporte l'option "NOPASSWD", qui permet d'indiquer que l'utilisateur peut exécuter cette commande sans devoir saisir son mot de passe. Ce n'est pas recommandé, mais c'est une possibilité. \\ * utilisateur ALL=(ALL) NOPASSWD:/usr/bin/nano /etc/hosts ===== "!" devant la commande pour l'interdire ===== Autoriser "utilisateur" à modifier les mots de passe des utilisateurs, sauf pour l'utilisateur "root". \\ * utilisateur ALL=(ALL) /usr/bin/passwd, !/usr/bin/passwd root ===== Comment utiliser la notion d'alias avec sudoers ===== Ces 3 sections au début du fichier sudoers, permettent de déclarer des alias pour les hôtes, les utilisateurs et les commandes. * # Host alias specification * # User alias specification * # Cmnd_alias specification Ex. : créer un alias d'utilisateurs "ADMINS" et y associer plusieurs utilisateurs. Ensuite, dans les règles on peut utiliser cet alias plutôt que d'appeler les utilisateurs un par un ou de créer un groupe spécifique si l'on veut créer une règle commune à plusieurs utilisateurs. Prenons un exemple... On va créer un alias d'utilisateur nommé "ADMINS", qui va faire référence à deux comptes : utilisateur1 et utilisateur2. Il faut séparer chaque nom par une virgule. Ce qui donne : \\ * User_Alias    ADMINS = utilisateur1, utilisateur2 Ensuite, on déclare un alias de commande nommé "SYSTEM", qui va faire référence à la commande "systemctl", mais il pourrait contenir plusieurs commandes. Ce qui donne : \\ * Cmnd_Alias    SYSTEM = /usr/bin/systemctl Enfin, pour créer une règle qui autorise les ADMINS à utiliser les commandes SYSTEM, cela donnera la règle suivante : \\ * ADMINS ALL=(ALL)   SYSTEM Les utilisateurs "utilisateur1" et "utilisateur2" peuvent désormais exécuter toutes les commandes associées à l'alias "SYSTEM". ===== Dossier "/etc/sudoers.d" ===== **"/etc/sudoers.d"** sert à stocker des fichiers déclaratifs pour sudoers, ils seront lus en complément du fichier sudoers. \\ C'est intéressant pour organiser les règles par fichier plutôt que de tout centraliser dans le même fichier. \\ Le fichier sudoers sera toujours lu, dans tous les cas. \\ Attention, tous les fichiers qui contiennent "~" ou "." dans le nom ne seront pas lus. \\ Pour créer un nouveau fichier nommé "ADMINS", on utilisera : \\ visudo /etc/sudoers.d/ADMINS On pourrait tout à fait inclure nos alias et notre règle créés précédemment au sein de ce fichier ADMINS : \\ * User_Alias ADMINS = itconect,florian * Cmnd_Alias SYSTEM = usrbin/systemctl * ADMINS ALL=(ALL) SYSTEM ===== Modifier le délai d'expiration de la commande sudo dans sudoers ===== En utilisant la commande sudo, l'accès reste déverrouillé pendant X minutes. Ce délai d'expiration (timeout) semble varier en fonction de la distribution utilisée, de 5 à 15 minutes. Dans sudoers, à la suite des autres lignes "Defaults", déclarez la ligne suivante : * Defaults      timestamp_timeout=5 . PS : vous pouvez retrouver d'autres exemples (1) sur cette page : Exemples Sudoers (2). (1) https://www.it-connect.fr/cours-tutoriels/administration-systemes/virtualisation/autres-virtu \\ (2) https://fossies.org/linux/sudo/examples/sudoers