128 votes

Pourquoi les utilisateurs ne devraient jamais utiliser le sudo normal pour démarrer des applications graphiques ?

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

Vous devez nunca utiliser le sudo normal pour lancer des applications graphiques en tant que Root.

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

137voto

Eliah Kagan Points 111731

À partir de la version 19.10 d'Ubuntu, l'avertissement de la section cet article (et dans cette réponse) ne s'applique plus. Voir La réponse de WinEunuuchs2Unix ainsi que cette question .

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

Supposons que vous exécutez gedit (un éditeur de texte graphique) comme root . Si vous exécutez [sudo](http://manpages.ubuntu.com/sudo.8) gedit , HOME continuera à pointer vers votre répertoire personnel, même si le programme est en cours d'exécution comme root . Par conséquent, gedit écrira les fichiers de configuration comme root dans votre répertoire personnel. Ce site entraînera parfois dans les fichiers de configuration étant appartenant à par root et donc inaccessible pour vous (lorsque vous exécutez plus tard 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 a créés (qui dans ce cas est root pas vous).

C'est la raison principale pour laquelle vous devriez exécuter des applications graphiques avec un logiciel de gestion des graphiques. sudo plutôt qu'avec une simple sudo . Dans Ubuntu et la plupart de ses dérivés (y compris Xubuntu et Lubuntu), le frontal graphique standard est le suivant gksu / gksudo . Dans Kubuntu, c'est kdesudo . (Cela dépend de la environnement de bureau utilisé).

Si vous wollen を使用する。 sudo directement pour exécuter une application graphique comme gedit tu peux courir :

sudo -H gedit

El -H le drapeau fait sudo set HOME pour pointer vers root Le dossier personnel de l'utilisateur (qui est /root ).

Cela ne permet toujours pas de gérer automatiquement la propriété de .Xauthority en le copiant dans un dossier temporaire (c'est l'autre chose que les graphistes ne peuvent pas faire). sudo Les frontends s'en chargent pour vous). Mais dans le cas peu fréquent où .Xauthority est inaccessible, vous obtiendrez un message d'erreur indiquant qu'il l'est, et vous pourrez alors résoudre le problème en le supprimant ( sudo rm ~/.Xauthority ), car il est automatiquement régénéré. Ainsi, la protection .Xauthority La protection de la propriété et des permissions des fichiers de configuration est moins importante que la protection de la propriété et des permissions des fichiers de configuration.

Contrairement à un root -propriété .Xauthority lorsque les fichiers de configuration deviennent la propriété de root il n'est pas toujours évident d'identifier le problème (parce que les programmes graphiques fonctionnent souvent, mais pas très bien, et affichent toutes les erreurs utiles dans la console). Et il est parfois plus difficile de le résoudre, surtout si l'on considère que si vous souhaitez qu'un ou plusieurs fichiers de votre répertoire personnel appartiennent à quelqu'un d'autre que vous (parce qu'alors vous ne pouvez pas le corriger simplement en récursivement chown en vous rendant tous vos fichiers).

Par conséquent, sudo (au moins sans -H ) ne doit pas être utilisé pour exécuter une application graphique. sauf si vous connaissez parfaitement le fonctionnement interne de l'application et êtes certain qu'elle ne tente jamais d'écrire des fichiers de configuration.

28voto

carnendil Points 5363

C'est simple :

Cela empêche les fichiers de votre répertoire personnel d'être la propriété de root.

Lisez-le aquí . De plus, il est possible que ce soit un doublon de Quelle est la différence entre "gksudo nautilus" et "sudo nautilus" ?

15voto

WinEunuuchs2Unix Points 91128

Mise à jour d'Ubuntu 19.10

A partir de Ubuntu 19.10 , en train de taper sudo some_command a maintenant le même effet que de taper sudo -H some_command . Cela signifie que le répertoire pour tout fichier de configuration touché sera sous /root et non /home/regular_userID (alias $HOME ).

Cela rend l'ensemble de cette question et de cette réponse discutable dans une large mesure pour les utilisateurs d'Ubuntu 19.10 et plus.

Pour voir si sudo fonctionne comme sudo -H dans votre distribution, essayez ces petits tests :

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

Comme vous pouvez le voir, sudo ci-dessus ne fonctionne pas comme sudo -H donc en utilisant des sudo peut endommager vos fichiers de configuration utilisateur.


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

L'installation est simple :

sudo apt install nautilus-admin

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

nautilus admin.gif


gedit car la racine ne permet pas les préférences

Lorsque vous exécutez gedit en tant que root, vous ne pouvez pas utiliser les préférences que vous avez configurées en tant qu'utilisateur normal pour les taquets de tabulation, la conversion des tabulations en espaces, le nom de la police, la taille de la police, le retour à la ligne, etc.

Pour résoudre ce problème j'ai écrit le script sgedit pour hériter des préférences de l'utilisateur et les appliquer à la racine : Comment puis-je synchroniser mon gedit racine avec les préférences de mon gedit utilisateur ?

  • Appelez en utilisant sgedit filename1 filename2 ...
  • Obtient les paramètres gedit de l'utilisateur pour les tabulations, les polices, le retour à la ligne, etc.
  • S'élève à sudo -H pour préserver la propriété des fichiers tout en obtenant les pouvoirs de l'administrateur.
  • Demande le mot de passe si le dernier sudo a expiré.
  • Récupère les paramètres gedit de sudo
  • Compare les différences entre les paramètres utilisateur et sudo gedit
  • Exécute gsettings set sur les différences seulement (réduit 174 commandes set à une douzaine ou moins. La fois suivante, peut-être qu'il n'y aura qu'un ou deux changements, mais souvent aucun changement.
  • Appels gedit en tant que tâche d'arrière-plan de sorte que l'invite du terminal réapparaisse immédiatement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X