diff --git a/HowtoSudo.md b/HowtoSudo.md index eb6c974c..e7ccd9f7 100644 --- a/HowtoSudo.md +++ b/HowtoSudo.md @@ -1,27 +1,126 @@ -**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** +--- +title: Howto sudo +categories: système +... -# Howto Sudo +* Documentation : + +[sudo](https://www.sudo.ws/) est un programme permettant d'accorder des droits à certains utilisateurs pour lancer des commandes en tant que _root_ ou un utilisateur différent. + + +## Installation + +Sous Debian : + +~~~ +# apt install sudo + +$ sudo -V +Sudo version 1.8.10p3 +Sudoers policy plugin version 1.8.10p3 +Sudoers file grammar version 43 +Sudoers I/O plugin version 1.8.10p3 +~~~ + +Sous OpenBSD : + +~~~ +# pkg_add sudo-1.8.17.1 + +$ sudo -V +Sudo version 1.8.17p1 +Sudoers policy plugin version 1.8.17p1 +Sudoers file grammar version 45 +Sudoers I/O plugin version 1.8.17p1 +~~~ ## Configuration -La configuration de sudo se passe dans le fichier _/etc/sudoers_ qu'il est conseillé d'éditer avec la commande `visudo`. + -### Exemples d'autorisations particulières +La configuration de _sudo_ se passe dans le fichier `/etc/sudoers` -Autoriser l'édition d'un fichier de manière sécurisée et autoriser l'accès à un script d'init : +Voici la configuration par défaut : ~~~ -jdoe ALL = (ALL) sudoedit /path/file -alice ALL = (root) /etc/init.d/apache2 +Defaults env_reset +Defaults mail_badpass +Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +root ALL=(ALL:ALL) ALL +%sudo ALL=(ALL:ALL) ALL ~~~ -`sudoedit` utilise par défaut l'éditeur par défaut pour autoriser *uniquement* l'édition du fichier en question. Tout autres actions (exécution d'un shell à l'intérieur de celui-ci, ouverture d'autres fichiers…) se feront avec les droits de l'utilisateur ayant exécuté sudo et non en tant que root. +On peut ainsi ajouter une autorisation complète à utilisateur en l'ajoutant au groupe _sudo_ : -### Lister les autorisations +~~~ +# adduser foo sudo +~~~ -Pour afficher les actions autorisées pour l'utilisateur courant par sudo, utiliser l'option "-l". +Pour ajouter des autorisations spécifiques, on conseille d'utiliser la commande `visudo` qui édite `/etc/sudoers` et vérifie la syntaxe des autorisations afin d'éviter une erreur : -## Passer en root +~~~ +# visudo +~~~ -On recommande sudo -i, plutôt que sudo su. +Une autorisation a la forme suivante : + +~~~ + = (:) +~~~ + +* `` : utilisateur(s)/groupe(s) concernés par l'autorisation +* `` : limite l'application de l'autorisation en fonction du hostname ou adresses IP locales (souvent ALL) +* `(:)` : paramètre **facultatif** pour autoriser à une lancer une commande avec un utilisateur (`sudo -u`) et/ou un groupe (`sudo -g`) +* `` : commande(s) autorisée(s), éventuellement précédées par `NOPASSWD:` si l'on veut pas demander à l'utilisateur d'entrer son mot de passe + +Voici des exemples d'autorisations : + +~~~ +jdoe ALL = ALL +jdoe ALL = NOPASSWD: ALL +jdoe ALL = /usr/sbin/tcpdump +jdoe ALL = (foo) /bin/kill +~~~ + +On peut également utiliser des alias : + +~~~ +Cmnd_Alias MAINT = /usr/share/scripts/evomaintenance.sh, /usr/share/scripts/listupgrade.sh, /usr/bin/apt, /bin/mount +User_Alias ADMINS = jdoe, foo +ADMINS ALL = NOPASSWD: MAINT +~~~ + +### sudoedit + +Si l'on veut autoriser l'édition d'un fichier de manière sécurisée, il ne faut pas autoriser les éditeurs comme _vi_, _less_… car ils permettent l'exécution d'autres actions, ce qui peut revenir à donner une autorisation complète. Il faut plutôt utiliser la commande spéciale `sudoedit` qui permet uniquement l'édition du fichier indiquée : toutes autres actions ((exécution d'un shell, ouverture d'autres fichiers…) se feront avec les droits de l'utilisateur ayant exécuté sudo et non en tant que _root_. + +~~~ +jdoe ALL = (ALL) sudoedit /etc/hosts +~~~ + + +## Utilisation + + + +On peut afficher les actions autorisées avec l'option `-l` : + +~~~ +$ sudo -l + +Matching Defaults entries for foo on serveur: + env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, umask=0077 +User foo may run the following commands on serveur: + (ALL : ALL) ALL + (root) NOPASSWD: /usr/share/scripts/evomaintenance.sh, /usr/share/scripts/listupgrade.sh, /usr/bin/apt, /bin/mount +~~~ + + +Pour passer en root, on recommande `sudo -i` plutôt que `sudo su` . + +~~~ +$ sudo -i +[sudo] password for foo: +# +~~~