16
0
Fork 0
Mirroir read-only du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) Erreur synchro : ssh://wiki@forge2.evolix.net:/git + git pull export master + merge. 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.
wiki/HowtoSudo.md

127 lines
3.6 KiB

6 years ago
---
title: Howto sudo
categories: système
...
6 years ago
* Documentation : <https://www.sudo.ws/readme.html>
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.
6 years ago
## 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 -z sudo-1
6 years ago
$ 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
6 years ago
<https://manpages.debian.org/jessie/sudo/sudoers.5.en.html>
La configuration de _sudo_ se passe dans le fichier `/etc/sudoers`
Voici la configuration par défaut :
~~~
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
~~~
On peut ainsi ajouter une autorisation complète à utilisateur en l'ajoutant au groupe _sudo_ :
6 years ago
~~~
# adduser foo sudo
~~~
6 years ago
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 :
~~~
6 years ago
# visudo
~~~
6 years ago
Une autorisation a la forme suivante :
6 years ago
~~~
<user> <serveur> = (<runuser>:<rungroup>) <commande>
~~~
6 years ago
* `<user>` : utilisateur(s)/groupe(s) concernés par l'autorisation
* `<serveur>` : limite l'application de l'autorisation en fonction du hostname ou adresses IP locales (souvent ALL)
* `(<runuser>:<rungroup>)` : paramètre **facultatif** pour autoriser à une lancer une commande avec un utilisateur (`sudo -u`) et/ou un groupe (`sudo -g`)
* `<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
6 years ago
Voici des exemples d'autorisations :
6 years ago
~~~
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
6 years ago
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_.
6 years ago
~~~
jdoe ALL = (ALL) sudoedit /etc/hosts
~~~
## Utilisation
<https://manpages.debian.org/jessie/sudo/sudo.8.en.html>
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:
#
~~~