Pourquoi les utilisateurs ne devraient-ils jamais utiliser sudo pour lancer des applications graphiques?

105

J'ai lu la documentation "RootSudo" de la communauté et je suis intéressé par cette ligne:

You should never use normal sudo to start graphical applications as Root.

Pourquoi? Quelle est la différence? Veuillez fournir une explication simple car je ne suis qu’un utilisateur de bureau normal.

    
posée Nur 19.03.2013 - 17:35
la source

3 réponses

117

Les applications graphiques stockent souvent les paramètres et autres données propres à l'utilisateur dans des fichiers de configuration écrits dans le dossier de base de l'utilisateur . Le mécanisme principal utilisé par les applications pour déterminer ce qu'elles doivent utiliser comme dossier de base de l'utilisateur est la variable d'environnement HOME . (Vous pouvez le vérifier vous-même avec echo $HOME ).

Supposons que vous utilisiez gedit (un éditeur de texte graphique) comme root . Si vous exécutez sudo gedit , HOME continuera de pointer vers votre répertoire de base , même si le programme exécute en tant que root . En conséquence, gedit écrira les fichiers de configuration sous la forme root dans votre répertoire de base. Ce aura parfois comme conséquence la les fichiers de configuration étant détenus par root et donc (lorsque vous exécuterez ultérieurement le programme en tant que vous-même et non en tant que root ). Cela se produit principalement lorsque l'application doit créer un nouveau fichier de configuration. Les fichiers nouvellement créés, par défaut, appartiennent à l'utilisateur qui les crée ( root dans ce cas, pas vous).

C’est la principale raison pour laquelle vous devriez exécuter des applications graphiques avec une interface graphique sudo plutôt que directement avec sudo . Dans Ubuntu et la plupart de ses dérivés (y compris Xubuntu et Lubuntu), l’interface graphique standard est gksu / gksudo . . Dans Kubuntu, il s'agit de kdesudo . (Cela dépend de de l'environnement de bureau utilisé.)

Si vous souhaitez utiliser sudo directement pour exécuter une application graphique telle que gedit , vous pouvez exécuter:

sudo -H gedit

Le drapeau -H permet à sudo de définir HOME de manière à pointer vers le dossier de départ de root ( /root ).

Cela ne gère toujours pas automatiquement la propriété de .Xauthority en le copiant dans un emplacement temporaire. dossier (c’est l’autre chose que sudo frontends prend en charge pour vous). Mais dans le cas peu fréquent où .Xauthority est inaccessible, vous obtiendrez une erreur indiquant que c'est le cas et vous pourrez alors résoudre le problème en le supprimant ( sudo rm ~/.Xauthority ), car il est automatiquement régénéré. Ainsi, protéger la propriété et les autorisations de .Xauthority est moins important que de protéger la propriété et les autorisations des fichiers de configuration.

Contrairement au root appartenant à .Xauthority , lorsque le fichier de configuration devient la propriété de root , le problème n'est pas toujours aussi évident (car les programmes graphiques s'exécutent souvent, mais ne fonctionnent pas très bien, et afficher toutes les erreurs utiles sur la console). Et il est parfois plus fastidieux de résoudre ce problème, en particulier si vous souhaitez qu'un ou plusieurs fichiers de votre répertoire personnel appartiennent à une autre personne que vous (car vous ne pouvez pas le réparer). simplement en récursivement chown tous vos fichiers à vous-même).

Par conséquent, sudo (au moins sans -H ) ne devrait pas être utilisé pour exécuter une application graphique à moins que ne connaisse parfaitement le fonctionnement interne de l'application et ne sache pas avec certitude que ce n'est pas le cas. jamais tenté d’écrire des fichiers de configuration.

    
réponse donnée Eliah Kagan 19.03.2013 - 17:49
la source
24

En termes simples:

This prevents files in your home directory becoming owned by root.

Lisez-le ici . Aussi, éventuellement, une copie de Quelle est la différence entre "gksudo nautilus" et "sudo nautilus"?

    
réponse donnée carnendil 19.03.2013 - 17:40
la source
0

Une alternative à gksu nautilus et gksu gedit est d'utiliser nautilus-admin add-on. Il vous permet de parcourir les fichiers et les répertoires avec Nautilus , puis de les ouvrir en tant que root (administrateur).

L'installation est simple:

sudo apt install nautilus-admin

Maintenant, lorsque vous êtes dans Nautilus, vous avez une option supplémentaire pour Éditer en tant qu'administrateur:

geditentantquerootn'autorisepaslespréférences

Lorsquevousexécutezgeditentantqueroot,vousnepouvezpasutiliserlespréférencesquevousavezdéfiniesentantqu'utilisateurstandardpourlestabulations,lesconvertirenespaces,lenomdelapolice,latailledelapolice,leretouràlaligne,etc.

Pourrésoudreceproblème,j'aiécritlescriptsgeditpourhériterdespréférencesdel'utilisateuretlesappliqueràlaracine: Comment synchroniser mon gedit root avec les préférences de mon utilisateur?

  • Appelez à l'aide de sgedit filename1 filename2 ...
  • Obtient les paramètres gedit de l'utilisateur pour les tabulations, les polices, le retour à la ligne, etc.
  • Élévation à sudo -H pour conserver la propriété du fichier tout en obtenant les droits root.
  • Demande le mot de passe si le dernier sudo a expiré.
  • Obtient les paramètres gedit de sudo
  • Compare les différences entre les paramètres utilisateur et sudo gedit
  • Exécute les paramètres définis uniquement sur les différences (réduit le nombre de commandes à une douzaine ou moins. La prochaine fois, il ne sera exécuté qu’une ou deux modifications, mais souvent aucune modification.
  • Appelle gedit en tant que tâche en arrière-plan, de sorte que l'invite de terminal réapparaisse immédiatement.
réponse donnée WinEunuuchs2Unix 17.06.2018 - 20:15
la source

Lire d'autres questions sur les étiquettes