43 votes

Comment exécuter le Terminal en tant que root?

Lorsque nous voulons exécuter des programmes en tant que root, nous utilisons sudo, gksu, gksudo et etc. Maintenant ma question est comment pouvons-nous exécuter un Terminal en tant qu'utilisateur root dans le Terminal?

J'ai essayé avec gksudo terminal et gksu terminal mais rien ne se passe. Et en exécutant sudo terminal j'obtiens une erreur sudo: terminal: commande introuvable.

64voto

Eliah Kagan Points 111731

Le terminal par défaut sur Ubuntu est le Terminal GNOME. Il est situé à /usr/bin/gnome-terminal et peut être exécuté avec la commande gnome-terminal.

Ce Que Vous Voulez Vraiment

Ce que vous voulez probablement, c'est un shell s'exécutant en tant que root, comme s'il avait été produit à partir d'une connexion en tant que root (par exemple, avec tous les variables d'environnement définies pour root plutôt que pour votre utilisateur).

Supposons que c'est ce que vous voulez, comme steeldriver l'a suggéré, il suffit d'exécuter :

sudo -i

Vous aurez un shell root dans lequel les commandes que vous entrez seront exécutées en tant que root (sans avoir à les précéder par sudo).

Mais si vous voulez vraiment exécuter l'application émulateur de terminal graphique en tant que root, lisez la suite. Je présente deux façons : avec gksu/gksudo, et avec la commande sudo.

Avec gksu/gksudo

Puisque vous avez le paquet gksu Installer gksu installé, vous pouvez exécuter gnome-terminal en tant que root avec l'un des éléments suivants :

gksu gnome-terminal

gksudo gnome-terminal

(Puisque gksu est réglé en mode sudo par défaut sous Ubuntu, ces commandes devraient être équivalentes.)

Exécuter gnome-terminal en tant que root sans terminal non-root contrôlant :

Pratiquement chaque environnement de bureau fournit une fonctionnalité pour exécuter une commande sans avoir à ouvrir un terminal (qui, s'il est fermé, causerait généralement l'arrêt de la commande).

C'est généralement réalisé avec Alt+F2. Une zone de texte intitulée Exécuter la commande (ou similaire) apparaîtra et vous pourrez y entrer votre commande.

Par exemple, cela ressemble à ceci dans Unity :

Boîte de texte Exécuter la commande dans Unity

Et comme cela dans MATE (GNOME Flashback/Fallback, Xfce, LXDE sont similaires) :

Boîte de dialogue Exécuter la commande dans MATE

Notez que cela fonctionne avec gksu et gksudo car ils utilisent une boîte de dialogue d'authentification graphique. Si vous appuyez sur Alt+F2 et exécutez sudo ..., alors vous ne pourrez pas interagir avec le prompt du mot de passe.

Avec sudo

Si vous n'avez pas le paquet gksu et que vous ne voulez pas l'installer, vous pouvez utiliser :

sudo -H gnome-terminal

Le drapeau -H est important car il définir la variable d'environnement HOME sur /root au lieu du répertoire personnel de votre propre utilisateur. Vous ne devriez pas utiliser sudo gnome-terminal car cela peut casser la configuration de gnome-terminal appartenant à l'utilisateur non-root. Pour plus d'informations à ce sujet, consultez :

(sudo -i gnome-terminal fonctionne aussi.)

Se débarrasser du terminal non-root contrôlant :

Si vous (1) ouvrez un terminal graphique, (2) exécutez quelque chose comme sudo -H gnome-terminal dedans pour créer un nouveau terminal graphique en tant que root, et (3) quittez le terminal graphique non-root original ... alors le terminal graphique root se fermera également.

Cela est dû au fait que le terminal graphique root reçoit un SIGHUP lorsque le terminal qui le possède est fermé.

Pour éviter cela, vous pourriez penser que vous pourriez plutôt lancer le terminal graphique root avec :

sudo -H gnome-terminal &

Mais cela ne fonctionnera que si sudo n'a pas à demander un mot de passe. Si c'est le cas, vous ne verrez pas le prompt du mot de passe.

Une façon de contourner cela est d'utiliser :

sudo -v
sudo -H gnome-terminal

sudo -v existe à cet effet. Comme expliqué dans man sudo, il "met à jour les informations d'identification mises en cache de l'utilisateur, authentifiant l'utilisateur si nécessaire."

Notez que cela ne fonctionnera toujours pas si vous l'exécutez directement depuis la boîte de dialogue de commande "Exécuter" de votre environnement de bureau Alt+F2, car vous aurez quand même besoin d'un terminal pour entrer votre mot de passe pour sudo -v.

Ou vous pouvez le faire à la manière traditionnelle, en suspendant le travail après son démarrage :

  1. Exécutez sudo -H gnome-terminal depuis le terminal graphique non-root original.
  2. Entrez votre mot de passe tel que demandé par sudo. Le terminal graphique va démarrer.
  3. Toujours dans le terminal non-root, appuyez sur Ctrl+Z pour suspendre le terminal root. Pendant que le terminal root est suspendu, vous ne pouvez pas l'utiliser; son interface ne réagira pas à vos actions.
  4. Quittez le terminal non-root contrôlant avec exit. Le travail du terminal graphique root sera à la fois remis en service et dissocié du terminal non-root, automatiquement.

En bref :

sudo -H gnome-terminal
^Z
exit

Mais supposons que vous vouliez continuer à utiliser le terminal non-root original. Alors vous pourriez exécuter bg **_N_**, où N est le numéro du travail du terminal graphique root, pour reprendre le travail en arrière-plan. Vous pouvez exécuter jobs pour trouver l'identifiant N mais vous n'aurez probablement pas besoin de le faire--ce nombre était affiché en tant que [**_N_**] lorsque vous avez appuyé sur Ctrl+Z. Par exemple :

ek@Ilex:~$ sudo -H gnome-terminal
[sudo] password for ek: 
^Z
[1]+  Stopped                 sudo -H gnome-terminal
ek@Ilex:~$

6voto

Jacob Vlijm Points 78990

Réponse courte :

gksudo gnome-terminal
(supposant que gksu est installé)

ouvre un terminal en tant que root :

root@jacob-Satellite-L300:~#

Il n'est pas nécessaire d'expliquer que vous pouvez utiliser ceci pour ouvrir n'importe quel terminal en tant que root de cette manière ; comme Vala (gksudo vala-terminal), Xterm (gksudo xterm), Termit (gksudo termit), UXTerm (gksudo uxterm), Konsole (gksudo konsole) et ainsi de suite.

2voto

Comme mentionné précédemment, vous demandez comment exécuter Terminal en tant que root, mais vous voulez probablement en réalité exécuter l'application Terminal graphique en tant qu'utilisateur normal et démarrer un shell root à l'intérieur où vous êtes connecté en tant que root. De cette manière, l'application terminal graphique n'obtient pas les privilèges root. Les réponses précédentes ne semblent pas donner des lignes de commande claires à utiliser, voici donc ce que j'utilise.

Avec xterm

xterm -bg black -fg red -e sudo -i

Le '-e sudo -i' indique à xterm de basculer en mode root dans la session, et les couleurs servent juste à rendre évident qu'il s'agit d'un shell root.

Avec Gnome Terminal

gnome-terminal -- sudo -i

Personnellement, j'associe des raccourcis clavier Gnome pour lancer les terminaux facilement

Allez dans les paramètres du clavier, ajoutez un raccourci personnalisé avec le raccourci Super+X et la commande 'xterm -bg black -fg white -sb -sl 5000', et un xterm root avec le raccourci Super+Z et la commande 'xterm -bg black -fg red -sb -sl 5000 -e sudo -i'.

Par le passé, j'ai tendu à préférer xterm à Gnome Terminal car la police est petite et simple, mais maintenant que j'utilise des écrans haute résolution, je me tourne vers Terminal. Coder en couleur vos terminaux est une très bonne idée une fois que vous commencez à exécuter différents profils avec des conséquences dangereuses pour éviter les accidents (par exemple, root local, machine client distante, root client distant).

2voto

Cette question semble si simple qu'il doit y avoir une solution simple, non?
Bien sûr, vous pouvez utiliser gksudo ou des outils similaires mais il peut y avoir des environnements où vous ne voulez pas dépendre de GTK. C'est déroutant mais un terminal n'est pas un shell!

Le terminal est cette chose qui vous montre des choses, alors que le shell est la chose qui a ces fonctionnalités évoluées comme les variables d'environnement, les conditionnelles et toutes ces choses de script. C'est pourquoi x-terminal-emulator -e ... attend simplement un programme à exécuter. Pas de scripts possibles ici, il démarre simplement un nouveau processus. Lorsqu'un terminal démarre, il sait simplement qu'il y a une sorte d'écran qui vous montre des choses et la saisie de votre clavier qui est directement transmise là-dedans. Un shell gère toute la logique d'un langage de script comme par exemple sh, bash, ash, zsh, ...!

L'autre distinction importante est qui exécute le terminal et quel shell s'exécute à l'intérieur. Vous pouvez exécuter un terminal dans le contexte d'un utilisateur ordinaire qui exécute un shell root à l'intérieur, mais cela a certains inconvénients, par exemple lorsque vous ouvrez un nouvel onglet, un nouveau shell est créé mais revient aux privilèges d'un utilisateur ordinaire. Votre commande d'un 'Nouveau shell s'il vous plaît' va au terminal et non au shell!
Une déception lorsque vous réalisez que vous devez saisir à nouveau tout ce sudo pour chaque onglet que vous ouvrez. Maintenant, existe-t-il un moyen d'ouvrir un terminal en tant que root et non un shell sans utiliser de packages comme gksudo? En supposant un contexte debian:

bash -c "xhost +si:localuser:root; ssh-askpass | sudo -S -Hb /usr/bin/xfce4-terminal --default-working-directory=/root"

Même si cela semble simple, beaucoup de choses se passent ici:

  • autoriser root à accéder au bureau X de l'utilisateur actuel.
  • comme sudo nécessite un tty, nous évitons cela en exécutant ssh-askpass qui s'exécute dans le contexte de l'utilisateur actuel et demande votre mot de passe.
  • sudo lit maintenant ce mot de passe depuis l'entrée standard (-S), il définit le dossier principal (-H) et crée un nouveau processus se détachant de notre contexte (-b).
  • et finalement définit le dossier principal par défaut du processus terminal en root pour éviter de se retrouver dans le dossier principal de l'utilisateur actuel.

et voilà! Vous avez un terminal qui s'exécute en tant que root lancé dans le contexte de l'utilisateur actuel. Maintenant, lorsque vous ouvrez un nouvel onglet, cela se passe à l'intérieur du terminal root au lieu de l'utilisateur qui l'a lancé.

Attention! Il y a une raison pour laquelle tout cela est si compliqué. Gardez à l'esprit dans quelle session X|VNC|RDP vous l'exécutez. Cela garde simplement un terminal ouvert. Voilà l'inconvénient! Si quelqu'un parvient à capturer votre session (aussi peu probable que cela puisse être), l'accès root est gratuit! Votre décision.

0voto

Scottie Points 321

Il y a une autre façon de faire cela, testée et fonctionnant sur Ubuntu 16.04 LTS :

Installez d'abord gnome-panel :

sudo apt install gnome-panel

Ensuite, installez gksu :

sudo apt install gksu

Une fois l'installation terminée, exécutez :

gnome-desktop-item-edit ~/Desktop/ --create-new

Cela crée un raccourci sur le bureau. Vous devriez avoir l'option de le nommer. J'ai appelé le mien 'X-Term' mais vous pouvez l'appeler à peu près comme vous le souhaitez. Tapez /usr/bin/gksu* pour le chemin de la 'Commande'.

Lorsque vous lancez votre nouveau raccourci sur le bureau, vous serez invité à choisir une application à exécuter. Tapez : xterm.

Vous serez maintenant invité à entrer votre mot de passe ; une fois que vous l'avez saisi, vous aurez accès à un terminal root fonctionnel. N'oubliez pas de l'utiliser uniquement lorsque c'est absolument nécessaire et de le fermer lorsque vous avez terminé avec.

*en supposant que vous avez installé Ubuntu avec les paramètres par défaut et que vous n'avez pas modifié significativement les systèmes de fichiers depuis l'installation.

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