Commandes Linux : sudo

SUDO

Installé avec le paquet sudo
Voir aussi : su et visudo

Rmq :

  • sudo signifie à l’origine superuser do, signification étendue aujourd’hui à substitute user do
  • un mot de passe n’est pas demandé à chaque exécution de la commande sudo. En effet, par défaut, le mot de passe de l’utilisateur qui exécute la commande est demandé toutes les 5 minutes
  • le mot de passe de l’utilisateur vers lequel on souhaite switcher n’est jamais demandé, c’est le fichier /etc/sudoers qui gère les droits d’accès
  • l’option “” permet de “charger” les variables d’environnement de l’utilisateur vers lequel on switche

 

Afficher la version de la commande sudo

sudo --version

ou

apt-cache policy sudo

 

Le fichier sudoers

Ce fichier gère les droits d’accès à certaines commandes par un utilisateur ou groupe spécifique.
Il permet de s’abstraire du mot de passe du super-utilisateur root car ce dernier n’est jamais demandé.
La modification du fichier /etc/sudoers se fait via la commande visudo ou directement par un éditeur :

# visudo

ou

# nano /etc/sudoers

Gérer les droits d’un utilisateur consiste à ajouter une ligne du type :

username   host=(user:group) commands

Gérer les droits d’un groupe consiste à ajouter une ligne du type :

%groupname   host=(user:group) commands

Par exemple, pour la ligne suivante :

adminsys ALL=(ALL:ALL) ALL

autorise l’utilisateur adminsys, sur toutes les machines (c’est généralement toujours le cas), à exécuter, en tant que n’importe quel utilisateur et n’importe quel groupe, toutes les commandes. En d’autres termes adminsys n’a aucune restriction, si ce n’est celle de devoir saisir un mot de passe à l’exécution de la commande sudo. Par défaut, toute commande sudo sera exécutée en tant que root.

%sudo	ALL=(ALL:ALL) ALL

donne tous les droits à l’ensemble des membres du groupe sudo.
ex :

$ sudo mkdir dirtest/

équivaut à :

$ sudo -u root -g root mkdir dirtest/

Le dossier dirtest est créé avec comme propriétaire root et comme groupe root également.

$ sudo -u ftpuser -g root mkdir dirtest/
$ ls -lad dirtest/
drwxr-xr-x 2 ftpuser root 4096 déc.   4 13:44 dirtest/

Ci-dessus l’utilisateur adminsys a pu exécuter la commande mkdir en tant que ftpuser car il est autorisé pour toutes les commandes et en tant que tous les utilisateurs.
Il est toutefois possible de restreindre d’avantage les accès aux commandes. La commande ci-dessus serait par exemple autorisée grâce à la ligne suivante :

adminsys ALL=(ftpuser:root) /bin/mkdir

Si l’on cherche à exécuter une autre commande, elle sera refusée :

$ sudo -u ftpuser -g root touch filetest
Sorry, user adminsys is not allowed to execute '/usr/bin/touch filetest' as ftpuser:root on test.opensharing.priv.

Pour autoriser des commandes sans saisi de mot de passe (en outrepassant les risques de sécurité que cela implique), il suffit d’ajouter, à gauche des commandes autorisées NOPASSWD:, comme ci-dessous :

adminsys ALL=(ALL:ALL) NOPASSWD: ALL

ou encore :

adminsys ALL=(ftpuser:ftpuser) NOPASSWD: /bin/mkdir,/usr/bin/touch,/bin/cp

 

Lister les droits sudo d’un utilisateur

Droits sudo de l’utilisateur connecté
sudo -l
Droits sudo d’un utilisateur spécifique
sudo -l -U username

ex :

# sudo -l -U adminsys
Matching Defaults entries for adminsys on snipeit:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User adminsys may run the following commands on snipeit:
    (ALL : ALL) ALL

 

Réinitialiser le timestamp de la commande sudo

sudo -K

Le timestamp est le temps entre 2 demandes de saisie de mot de passe. Par défaut, sa valeur est de 5 minutes.
Avec cette commande, le mot de passe sera forcément à nouveau demandé lors du prochain appel à sudo.

 

Modifier le timestamp de la commande sudo

visudo

Et ajouter la ligne suivante :

Defaults        timestamp_timeout=XX

où la valeur spécifiée XX est en minutes.
La commande visudo permet d’éditer le fichier /etc/sudoers avec l’éditeur spécifié
ex :

# visudo
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        timestamp_timeout=30

Ci-dessus, le timestamp est passé à 30 minutes, au lieu des 5 minutes par défaut.

 

Afficher un retour visuel lors de la saisie d’un mot de passe

visudo

Et ajouter la ligne suivante :

Defaults        pwfeedback

Par défaut, aucun retour n’est affiché lorsque le mot de passe est saisi :

$ sudo su
[sudo] password for adminsys: 
#

Après modification du fichier /etc/sudoers via la commande visudo, un retour sous forme d’une astérisque par caractère saisi apparait :

$ sudo su
[sudo] password for adminsys: ********
#

ex :

# visudo
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        pwfeedback

 

Afficher les “remontrances” du système en cas de mauvais mot de passe saisi

visudo

Et ajouter la ligne suivante :

Defaults        insults

Après modification du fichier /etc/sudoers via la commande visudo, un message d’insulte ou d’humour apparait lorsqu’un mauvais mot de passe est saisi :

$ sudo su
[sudo] password for adminsys: 
BOB says:  You seem to have forgotten your passwd, enter another!
[sudo] password for adminsys: 
Just what do you think you're doing Dave?
[sudo] password for adminsys: 
You silly, twisted boy you.
sudo: 3 incorrect password attempts
$

ex :

# visudo
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        insults

 

Exécuter une commande en tant qu’un utilisateur particulier

sudo -u username command

Le mot de passe requis est celui de l’utilisateur qui exécute la commande sudo, et non celui vers lequel on souhaite switcher, après vérification des droits requis dans le fichier /etc/sudoers.
Les variables d’environnement sont celles de l’utilisateur qui exécute la commande sudo.
Equivaut (dans sa finalité) à :
su -u username -c 'command'
Sauf que cette dernière commande ne consulte pas le fichier /etc/sudoers pour vérifier si l’utilisateur connecté possède les droits requis pour l’exécution de la commande spécifiée et que le mot de passe demandé est celui de l’utilisateur vers lequel on souhaite switcher.
ex :

$ sudo -u ftpuser echo $PWD
[sudo] password for adminsys: 
/home/adminsys

 

Se connecter en tant qu’un utilisateur particulier

sudo su username

Les variables d’environnement sont celles de l’utilisateur qui exécute la commande sudo.
Le mot de passe requis est celui de l’utilisateur qui exécute la commande sudo, et non celui vers lequel on souhaite switcher, après vérification des droits requis dans le fichier /etc/sudoers.
Equivaut à :
su username
ex :

$ sudo su ftpuser
[sudo] password for adminsys: 
$ echo $PWD
/home/adminsys
sudo su - username

Les variables d’environnement sont celles de l’utilisateur vers lequel on switche.
Le mot de passe requis est celui de l’utilisateur qui exécute la commande sudo, et non celui vers lequel on souhaite switcher, après vérification des droits requis dans le fichier /etc/sudoers.
Equivaut à :
su - username
ex :

$ sudo su - ftpuser
[sudo] password for adminsys: 
$ echo $PWD
/home/ftpuser

 

Exécuter une commande en tant que super-utilisateur root

sudo command

ou

sudo -u root command

Par défaut, si aucun utilisateur n’est spécifié après sudo, c’est root qui est sélectionné.
Toutefois, c’est le mot de passe de l’utilisateur qui exécute la commande qui sera demandé, après vérification des droits relatifs à ce dernier dans le fichier /etc/sudoers.
Les variables d’environnement sont celles de l’utilisateur qui exécute la commande sudo.
Equivaut (dans sa finalité) à :
su -c 'command'
su root -c 'command'
Sauf que ces deux dernières commandes ne consultent pas le fichier /etc/sudoers et que c’est le mot de passe de root qui est demandé, et non celui de l’utilisateur qui exécute la commande.
ex :

$ su -c 'echo $PWD'
Mot de passe : 
/home/adminsys

 

Se connecter en tant que root

sudo su

Par défaut, si aucun utilisateur n’est spécifié, c’est implicitement vers root que se fait le switch.

sudo su root

Sur les deux commandes ci-dessus, les variables d’environnement sont celles de l’utilisateur qui exécute la commande sudo.
C’est le mot de passe de l’utilisateur qui exécute la commande qui sera demandé, après vérification des droits relatifs à ce dernier dans le fichier /etc/sudoers.
Equivaut à :
su
su root
ex :

$ sudo su
[sudo] password for adminsys: 
# echo $PWD
/home/adminsys
sudo su -

Par défaut, si aucun utilisateur n’est spécifié, c’est implicitement vers root que se fait le switch.

sudo su - root

Sur les deux commandes ci-dessus, les variables d’environnement sont celles de root.
C’est le mot de passe de l’utilisateur qui exécute la commande qui sera demandé, après vérification des droits relatifs à ce dernier dans le fichier /etc/sudoers.
Equivaut à :
su -
su - root
Sauf que les deux commandes ci-dessus requièrent le mot de passe de root et non de celui qui exécute la commande su.
ex :

$ sudo su -
[sudo] password for adminsys: 
# echo $PWD
/root

 

Spécifier le shell de connexion lors du switch vers root

sudo -s

Appellera la variable $SHELL (par défaut /bin/bash) pour spécifier le shell de connexion lors du switch vers l’utilisateur root.

$ echo $0
/bin/bash
$ SHELL=/bin/ksh
$ sudo su
# echo $0
bash
# exit
exit
$ sudo -s
# echo $0
/bin/ksh
Fermer le menu
%d blogueurs aiment cette page :