5 votes

Exécuter des applications GUI depuis le terminal avec des privilèges root

Il a donc été bien documenté que les applications GUI (comme gedit ou textedit) ne devraient pas être lancées avec sudo. Ubuntu et autres ont gksu et gksudo (et similaires) donc question : qu'est-ce que NOUS (les utilisateurs de Mac) obtenons? Étant donné que le noyau Darwin est construit sur un code *BSD, je suppose que les mêmes problèmes s'appliquent, mais comment y remédier?

1 votes

Cette question semble actuellement assez large, pourriez-vous être un peu plus spécifique sur le problème concret que vous essayez de résoudre ici ?

0 votes

@patrix, je demande juste car cette pensée m'est venue à l'esprit. Il y a un an, j'ai dû éditer quelques fichiers hosts, donc j'ai utilisé su pour me connecter en tant que root et j'ai exécuté TextEdit à partir de là. Je me demandais s'il y avait une meilleure façon.

4voto

Sergei Points 1188

Pour éditer /etc/hosts avec Sublime Text :
sudo /Applications/Sublime\ Text.app/Contents/MacOS/Sublime\ Text /etc/hosts

Si vous devez le faire de manière régulière, vous pouvez ajouter ce extrait à votre ~/.bash_profile

#   sudoapp: Exécute .app avec des privilèges root
#   Utilisation: sudoapp /Applications/Nom.app /etc/hosts
#   --------------------------------------------------------------------
    sudoapp () {
        sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
    }

Les applications s'exécutant avec des privilèges root utiliseront /private/var/root comme dossier personnel, ainsi tous les fichiers de configuration et temporaires appartenant à root qui seront créés dans le processus resteront là où ils devraient être - dans le dossier personnel de root.
Cela revient à se connecter en tant que root et exécuter l'application, mais sans les tracas du changement d'utilisateur.

Cette méthode fonctionne sur 10.6 — 10.11

Mise à jour : L'application TextEdit d'Apple refuse de démarrer si elle est exécutée en tant que root dans la version 10.11 et ultérieure, j'ai donc changé mon exemple pour utiliser Sublime Text à la place

0 votes

Alors cela va préserver mes fichiers de configuration actuels et créer d'autres fichiers appartenant à root ? Cela semble être le plus grand danger de l'exécution d'applications GUI avec sudo.

0 votes

Non, c'est un comportement correct, car avoir des fichiers créés par hasard dans votre ~/Bibliothèque serait très pénible.

0 votes

Mais ces fichiers ne seront-ils pas alors la propriété de root lorsque je quitterai l'instance Finder possédée par root? Je ne veux pas vraiment devoir faire beaucoup de chown à chaque fois que je fais cela.

3voto

Graham Miln Points 39606

Alors qu'il est possible de lancer une application graphique en tant qu'utilisateur root, ce n'est pas recommandé. Cela peut fonctionner, la plupart du temps, mais évitez de compter sur ce comportement.

Évitez root

Exécuter une application en tant que root n'est pas recommandé car cela augmente considérablement le risque de causer des problèmes avec votre Mac. L'utilisation de root devrait être limitée au plus petit morceau de code possible avec des contrôles stricts en place.

Les applications tendent de plus en plus vers une conception fragmentée pour éviter d'exposer trop de puissance à un code qui n'en a pas besoin.

  • Une erreur dans le code s'exécutant avec des autorisations root est un risque pour la sécurité.
  • Une erreur dans le code sans autorisations root est beaucoup moins susceptible de causer de graves problèmes.

Il y a des cas particuliers mais ceux-ci deviennent de plus en plus rares. L'introduction du confinement et de XPC fait partie des efforts d'Apple pour réduire le besoin de fournir une autorité excessive aux processus s'exécutant sur OS X.

Outils en Ligne de Commande

Si vous avez besoin de travailler avec des fichiers en tant qu'utilisateur root, utilisez des outils en ligne de commande tels que vim, emacs ou nano. Ces outils ne dépendent pas de WindowServer et peuvent être lancés avec bonheur en tant que root dans une autre session utilisateur :

sudo nano 

Outils Graphiques

Si vous préférez les éditeurs graphiques, utilisez un éditeur qui fonctionne avec la conception de Mac OS X. BBEdit est un excellent éditeur qui gérera correctement l'édition des fichiers appartenant à root.

Lorsque vous éditez un fichier appartenant à root avec BBEdit, un second processus est utilisé pour combler l'écart de permissions entre vous et le propriétaire du fichier. Ce processus passe par des chemins approuvés par Apple et assure ainsi une expérience prévisible - espérons-le sur plusieurs versions majeures de Mac OS X.

Pourquoi ? Limites de WindowServer et Portée de Conception

Il existe des problèmes techniques subtils liés au lancement d'une application graphique dans une autre session utilisateur.

Les problèmes techniques sous-jacents découlent d'un utilisateur souhaitant lancer un processus graphique dans la session d'un autre utilisateur. Le WindowServer de Mac OS X n'a jamais été conçu dans ce but. Les sessions utilisateur sont extrêmement difficiles à contourner même en tant qu'utilisateur root - et ce pour des raisons de sécurité souhaitables.

Apple a considérablement amélioré la conception de WindowServer dans les dernières versions majeures de Mac OS X. Il est désormais possible d'avoir plusieurs utilisateurs connectés à différentes sessions graphiques sur un Mac via le partage d'écran. Cette amélioration en apparence simple a nécessité un énorme effort en coulisses de la part des ingénieurs d'Apple.

Cependant, il est peu probable qu'Apple fournisse un moyen facile de lancer des applications entre différents utilisateurs à partir d'une seule session utilisateur graphique. Comment cela bénéficierait-il à leurs clients ?

Si vous souhaitez approfondir ce sujet, recherchez des questions impliquant launchctl et l'exécution d'applications dans d'autres sessions utilisateur actives.

0 votes

A savoir, j'utilise la méthode décrite dans ma réponse depuis OS X 10.6, et je n'ai jamais rencontré le moindre problème. Que WindowServer ait été conçu de cette manière délibérément ou par accident est au-delà de mes connaissances, mais il gère parfaitement bien les applications sudo. Je suppose que toute cette histoire de "non recommandé" est exagérée (sauf si vous pouvez réellement fournir une preuve que cela peut causer des problèmes).

0 votes

Donc, la danse ici semble être que l'application s'exécutant avec des privilèges root créera quelques fichiers de configuration (ou tout autre chose) pouvant être persistants, mais appartenant à root. Cela peut évidemment être très mauvais, mais cela arrive assez rarement. Faisons semblant, pour les besoins de l'argument, que je veuille ouvrir une instance de l'utilitaire de disque à partir du terminal, mais dans une session graphique. Devrais-je simplement l'ouvrir et attendre qu'il me demande la permission ?

0 votes

Dans ce cas, utilisez l'outil en ligne de commande diskutil à la place de l'application : dssw.co.uk/reference/diskutil.html Sur Mac OS X, vous ne devriez pas avoir besoin d'exécuter directement une application graphique en tant que root. Si des droits supplémentaires sont nécessaires, l'application graphique est censée les organiser pour vous et vous faire vous authentifier contre le droit approprié : dssw.co.uk/reference/authorization-rights

1voto

evilcandybag Points 101

Il y a de bonnes raisons de ne pas modifier les fichiers en tant que root. Pourquoi ne pas simplement les copier dans un fichier temporaire, le modifier et le recopier.

Vous pourriez utiliser visudo bien que cela nécessite une certaine connaissance de vi, mais c'est ok pour apporter des modifications simples à /etc/fstab ou similaire.

Vous pourriez essayer de définir la variable d'environnement EDITOR et d'exécuter visudo bien que je n'ai jamais essayé cela avec un éditeur graphique.

0 votes

Ne vois aucune connexion avec la question.

0voto

1.61803 Points 391

La réponse de Sergei n'a pas fonctionné pour moi sur OS X 10.8.5

$ sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

J'ai reçu un message d'erreur de permission

ERREUR

Comme sudo sur le binaire d'abord, puis double-cliquer sur le fichier dans Finder a fonctionné, j'ai trouvé la commande suivante moins simple

$ sudo -b /Applications/TextEdit.app/Contents/MacOS/TextEdit && sleep .5 && open -a /Applications/TextEdit.app /etc/hosts

Vous pouvez en faire une fonction, si nécessaire.

0 votes

Dans les nouvelles versions de Mac OS, Apple a fait quelque chose à TextEdit spécifiquement pour empêcher son utilisation avec sudo. D'autres applications fonctionnent. J'ai changé ma réponse pour utiliser Sublime Text comme exemple à la place.

0 votes

Merci pour l'information, mais pourriez-vous être plus précis ? Peut-être vérifier les drapeaux du binaire de TextEdit pour commencer ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X