From Mageia wiki
Jump to: navigation, search


Drakconf multiflag.png
Autres langues
Deutsch ; English ; Français ; Nederlands ;

L’utilisation de la commande su pour obtenir les privilèges de l’utilisateur root est extrêmement risquée et peut entraîner des problèmes ultérieurs qui seront difficilement résolus si vous ignorez les risques encourus.

Au lieu de cela, lorsque les privilèges root sont nécessaires, utilisez su --login, qui peut être abrégé en su -l, ou simplement su -.

Pour comprendre la différence et le danger d’utiliser uniquement su, sans le trait d’union, commencez par la page du manuel de su. Dans cette page, l’ajout de l’option --login rend la commande su différente en ce sens qu’elle permet de :

  • Lancer l’interpréteur de commandes en tant qu’interpréteur de connexion avec un environnement similaire à celui d’une véritable connexion :
  • efface toutes les variables d’environnement à l’exception de TERM et des variables mentionnées par --whitelist-environment
  • initialise les variables d’environnement HOME, SHELL, USER, LOGNAME et PATH
  • modifie le répertoire personnel de l’utilisateur cible
  • met argv[0] du shell à '-' afin de faire du shell un shell de connexion

Les exemples de code suivants montrent les changements apportés aux variables d’environnement par l’utilisation de l’option --login. Première connexion uniquement avec su :

utilisateur@localhost:~$ su
Mot de passe :
[root@localhost utilisateur]#
[root@localhost utilisateur]# env|grep utilisateur|sort
LOGNAME=utilisateur MAIL=/var/spool/mail/utilisateur PWD=/home/utilisateur SCREENDIR=/home/utilisateur/tmp USER=utilisateur [root@localhost utilisateur]#
[root@localhost utilisateur]# exit
exit utilisateur@localhost:~$

Résultat : Les variables d’environnement se réfèrent toujours à l’identifiant de connexion original (« utilisateur » dans le cas présent), au lieu de l’utilisateur root…

Connectez-vous maintenant avec su --login :

$ su -
Mot de passe :
[root@localhost ~]# env|grep utilisateur|sort
[root@localhost ~]#
[root@localhost ~]# exit
utilisateur@localhost:~$

Résultat : Les variables d'environnement ont été effacées et ne font plus référence à l'identifiant d'origine (« utilisateur » dans ce cas).

Ce qui rend l'utilisation de su sans l'option --login dangereuse, c'est que de nombreux programmes utilisent ces variables d'environnement pour contrôler l'endroit où ils stockent les fichiers qu'ils utilisent. Si un programme qui met à jour un fichier stocké dans ~/.config est exécuté, le fichier de configuration de ce programme dans le répertoire .config de l'utilisateur deviendra la propriété de root.

Par la suite, après avoir quitté les droits administrateur, si l'utilisateur tente d'exécuter ce même programme et fait quelque chose qui l'amène à essayer de mettre à jour son dossier .config, il échouera, car l'utilisateur standard ne peut pas mettre à jour les fichiers appartenant à root. Les fichiers appartenant à l'utilisateur root dans le répertoire personnel de l'utilisateur provoqueront des problèmes qui peuvent être très difficiles à résoudre.

Attention !
Pensez toujours à utiliser su -, jamais uniquement su !

Si l'erreur a déjà été commise, elle peut être réparée avec :

$ su -
Mot de passe :
[root@localhost ~]# chown -Rc utilisateur:utilisateur /home/utilisateur
[root@localhost ~]# exit
utilisateur@localhost:~$

D'autres modifications peuvent être nécessaires pour d'autres applications, c'est pourquoi il convient de vérifier attentivement la sortie de la commande chown.