J'ai lu la documentation de la communauté "RootSudo" et cette ligne m'intéresse:
Vous ne devriez jamais utiliser sudo normal pour lancer des applications graphiques en tant que racine.
Pourquoi? Quelle est la différence? Veuillez fournir une explication simple car je ne suis qu'un utilisateur de bureau normal.
Réponses:
Les applications graphiques stockent souvent des paramètres et d'autres données spécifiques à l'utilisateur dans des fichiers de configuration écrits dans le dossier personnel de l'utilisateur . Le principal mécanisme utilisé par les applications pour déterminer ce qu’elles doivent utiliser comme dossier de base de l’utilisateur est la
HOME
variable d’environnement . (Vous pouvez l'inspecter vous-même avececho $HOME
).Supposons que vous exécutiez
gedit
(un éditeur de texte graphique) en tant queroot
. Si vous exécutezsudo gedit
,HOME
continuera à pointer vers votre répertoire de base, même si le programme est exécuté en tant queroot
. Par conséquent,gedit
écrira les fichiers de configuration commeroot
dans votre répertoire personnel. Cela va parfois entraîner dans les fichiers de configuration étant propriété parroot
et donc inaccessibles pour vous (lorsque vous exécutez le programme plus tard comme toi - même et non pasroot
). 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 (c'est-à-direroot
, ce n'est pas vous).C'est la raison principale pour laquelle vous devriez exécuter des applications graphiques avec une interface graphique
sudo
plutôt qu'avec straightsudo
. Dans Ubuntu et la plupart de ses dérivés (y compris Xubuntu et Lubuntu), l’interface graphique standard estgksu
/gksudo
. À Kubuntu c'estkdesudo
. (Cela dépend de l' environnement de bureau utilisé.)Si vous souhaitez utiliser
sudo
directement pour exécuter une application graphique commegedit
, vous pouvez exécuter:L'
-H
indicateur fait ensudo
sorteHOME
de pointer versroot
le dossier de départ de (qui est/root
).Cela ne gèrera toujours pas automatiquement la propriété de celui-ci
.Xauthority
en le copiant dans un dossier temporaire (ceci est l’autre chose que les interfaces graphiquessudo
gèrent pour vous). Mais dans l'événement peu fréquent qui.Xauthority
est inaccessible, vous obtiendrez une erreur et vous pourrez alors résoudre le problème en le supprimant (sudo rm ~/.Xauthority
), car il est automatiquement régénéré. Par conséquent, protéger.Xauthority
la propriété et les autorisations est moins important que protéger la propriété et les autorisations des fichiers de configuration.Contrairement à une
root
détenue.Xauthority
, lorsque les fichiers de configuration sont la propriété queroot
, ce n'est pas toujours aussi évident que le problème est (parce que les programmes graphiques fonctionneront souvent, mais pas très bien, et la sortie des erreurs utiles à 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 à quelqu'un d'autre que vous (car vous ne pouvez pas le résoudre simplement en récursantchown
tous vos fichiers). retour à vous-même).Par conséquent,
sudo
(du moins sans-H
) ne doit pas être utilisé pour exécuter une application graphique, sauf si vous êtes parfaitement familiarisé avec le fonctionnement interne de l' application et si vous savez avec certitude qu'il ne tente jamais d'écrire des fichiers de configuration.la source
sudo chmod -R $USER:$USER ~
Malheureusement, ces critères ne s'appliquent pas toujours. Si vous avez des fichiers pour lesquels vous devez conserver le propriétaire du groupe, vous pouvez les exécutersudo chmod -R $USER ~
. Ceci est généralement suffisant. (Si certains de vos fichiers doivent appartenir à un autre utilisateur de votre répertoire personnel, cela posera un problème.)chmod
fait-il réellement? J'ai toujours pensé que c'était çachown
qui l'avait fait.chmod
ne l'a jamais fait pour moi.chown
au lieu dechmod
dans mes commentaires ci-dessus. Désolé pour cela - et merci de l'avoir signalé!sudo -H echo $HOME
, votre shell - en cours d' exécution que vous, et non pas en tant que root - effectue l' expansion des paramètres sur$HOME
, obtenir le chemin de votre répertoire personnel, puis passe à cesudo
qui passe à son tour la valeur déjà étendue àecho
, qu'elle imprime.sudo -H printenv HOME
,sudo -H bash -c 'echo $HOME'
etsudo -H sh -c 'echo $HOME'
tous imprimés/root
. Ceci est conceptuellement similaire - bien que par un mécanisme différent - à la façon dont l’x=a echo "$x"
impression n’est pas effectuéea
(à moins qu’elle aitx
déjà eu la valeura
).Tout simplement:
Lisez le ici . Aussi, éventuellement, une copie de Quelle est la différence entre "gksudo nautilus" et "sudo nautilus"?
la source
Une alternative à
gksu nautilus
etgksu gedit
consiste à utiliser desnautilus-admin
add-on. Il vous permet de parcourir des fichiers et des répertoires avec Nautilus , puis de les ouvrir en tant que root (administrateur).L'installation est simple:
Maintenant, lorsque vous êtes dans Nautilus, vous aurez une option supplémentaire pour Éditer en tant qu'administrateur:
gedit
en tant que root ne permet pas les préférencesLorsque vous vous lancez en
gedit
tant que root, vous ne pouvez pas utiliser les préférences que vous avez définies en tant qu'utilisateur standard pour les tabulations, les convertir 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 synchroniser mon gedit avec les préférences de mon utilisateur?sgedit filename1 filename2 ...
sudo -H
préserver la propriété des fichiers tout en obtenant les pouvoirs de la racine.sudo
a expiré.gedit
en tâche de fond tels que l'invite du terminal réapparaisse immédiatement.la source