mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.5 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. ---
  2. title: Howto sudo
  3. categories: système
  4. ...
  5. * Documentation : <https://www.sudo.ws/readme.html>
  6. Les systèmes de type Unix octroient à l'utilisateur root les pleins pouvoirs, tandis que les autres utilisateurs ont un droit d'accès minimal. [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.
  7. ## Installation
  8. Sous Debian :
  9. ~~~
  10. # apt install sudo
  11. $ sudo -V
  12. Sudo version 1.8.10p3
  13. Sudoers policy plugin version 1.8.10p3
  14. Sudoers file grammar version 43
  15. Sudoers I/O plugin version 1.8.10p3
  16. ~~~
  17. Sous OpenBSD :
  18. ~~~
  19. # pkg_add -z sudo-1
  20. $ sudo -V
  21. Sudo version 1.8.17p1
  22. Sudoers policy plugin version 1.8.17p1
  23. Sudoers file grammar version 45
  24. Sudoers I/O plugin version 1.8.17p1
  25. ~~~
  26. ## Configuration
  27. <https://manpages.debian.org/jessie/sudo/sudoers.5.en.html>
  28. La configuration de _sudo_ se passe dans le fichier `/etc/sudoers`
  29. Voici la configuration par défaut :
  30. ~~~
  31. Defaults env_reset
  32. Defaults mail_badpass
  33. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  34. root ALL=(ALL:ALL) ALL
  35. %sudo ALL=(ALL:ALL) ALL
  36. ~~~
  37. On peut ainsi ajouter une autorisation complète à utilisateur en l'ajoutant au groupe _sudo_ :
  38. ~~~
  39. # adduser foo sudo
  40. ~~~
  41. 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 :
  42. ~~~
  43. # visudo
  44. ~~~
  45. Une autorisation a la forme suivante :
  46. ~~~
  47. <user> <serveur> = (<runuser>:<rungroup>) <commande>
  48. ~~~
  49. * `<user>` : utilisateur(s)/groupe(s) concernés par l'autorisation
  50. * `<serveur>` : limite l'application de l'autorisation en fonction du hostname ou adresses IP locales (souvent ALL)
  51. * `(<runuser>:<rungroup>)` : paramètre **facultatif** pour autoriser à une lancer une commande avec un utilisateur (`sudo -u`) et/ou un groupe (`sudo -g`)
  52. * `<commande>` : 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
  53. Voici des exemples d'autorisations :
  54. ~~~
  55. jdoe ALL = ALL
  56. jdoe ALL = NOPASSWD: ALL
  57. jdoe ALL = /usr/sbin/tcpdump
  58. jdoe ALL = (foo) /bin/kill
  59. ~~~
  60. On peut également utiliser des alias :
  61. ~~~
  62. Cmnd_Alias MAINT = /usr/share/scripts/evomaintenance.sh, /usr/share/scripts/listupgrade.sh, /usr/bin/apt, /bin/mount
  63. User_Alias ADMINS = jdoe, foo
  64. ADMINS ALL = NOPASSWD: MAINT
  65. ~~~
  66. ### sudoedit
  67. 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é : 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_.
  68. ~~~
  69. jdoe ALL = (ALL) sudoedit /etc/hosts
  70. ~~~
  71. ## Utilisation
  72. <https://manpages.debian.org/jessie/sudo/sudo.8.en.html>
  73. On peut afficher les actions autorisées avec l'option `-l` :
  74. ~~~
  75. $ sudo -l
  76. Matching Defaults entries for foo on serveur:
  77. env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, umask=0077
  78. User foo may run the following commands on serveur:
  79. (ALL : ALL) ALL
  80. (root) NOPASSWD: /usr/share/scripts/evomaintenance.sh, /usr/share/scripts/listupgrade.sh, /usr/bin/apt, /bin/mount
  81. ~~~
  82. Pour passer en root, on recommande `sudo -i` plutôt que `sudo su` .
  83. ~~~
  84. $ sudo -i
  85. [sudo] password for foo:
  86. #
  87. ~~~
  88. ## FAQ
  89. ### À propos des erreurs de syntaxe
  90. En cas d'erreur de syntaxe dans la configuration de Sudo, toutes les autorisations sont désactivées ! Cela peut donc être critique car vous pouvez par exemple perdre l'accès _root_. Afin d'éviter les erreurs de syntaxe, on conseille d'utiliser la commande `visudo` qui vérifie la syntaxe mais attention, cela vérifie uniquement la syntaxe du fichier invoqué : si l'on déporte une partie de la configuration dans un autre fichier `visudo -f /etc/sudoers.d/foo` ne vérifie que ce fichier... notamment si l'on introduit des alias en double (erreur `FOO already defined`), cela casse toute la configuration sans que l'on s'en aperçoive ! On conseille donc d'éviter d'éditer manuellement les fichiers dans `/etc/sudoers.d/` et de réserver ce répertoire uniquement aux configurations automatiques (de façon similaire à `/etc/cron.d/` pour _Cron_).