Wie kann ich eine Anwendung mit einer grafischen Benutzeroberfläche als Administrator aus einer Nicht-Administrator-Benutzersitzung ausführen?

33

Ich habe 2 Benutzerkonten definiert:

  • eine mit admin-berechtigung (mit sudorechts) => lass es uns aufrufen adminuser.
  • ein 2. ohne Privileg => lass es uns aufrufen und ich konfiguriere den Autologin für diesen 2. Benutzer . normaluser
    normaluser

Wenn ich also eine öffnen normaluserSitzung und will eine Anwendung mit Admin - Privilegien ausführen kann ,
öffne ich einen Terminal Ctrl+ Alt+ Tund:

su adminuser
sudo anyapplication ...

Es funktioniert einwandfrei, ohne dass die normaluserSitzung beendet werden muss (es ist nicht erforderlich, eine adminuserSitzung zu öffnen ).


Was kann ich tun, wenn die Anwendung mit einer grafischen Benutzeroberfläche (GUI) ausgeführt werden muss?
Ich dachte darüber nach:

su adminuser
gksu anyapplication ...

aber ich verstehe

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Boris
quelle
Die Frage ist also: Warum haben Sie Ihr System so konfiguriert? Glaubst du, es verbessert die Sicherheit? Es ist nicht :) Stattdessen hätten Sie die automatische Anmeldung in Ihrem "admin" -Konto konfigurieren können, damit Sie beim Anmelden nicht nach dem Kennwort gefragt werden. Für administrative Aufgaben ist weiterhin ein Kennwort erforderlich.
Sergey
5
@Sergey Wenn dies normalusermanchmal von jemandem verwendet wird, der keine Befehle ausführen kann root, verbessert es die Sicherheit, wenn normaluserein Nicht-Administrator angegeben wird . Die Gefahr, jemandem ein Benutzerkonto zu geben, ihn aber nicht über sein eigenes Passwort zu informieren, geht weit über die problematische und komplexe Situation von Boris hinaus. Wenn Sie eine vollständige Erklärung der Problematik wünschen, empfehle ich, eine neue Frage zu stellen. 3 Gründe liegen darin, dass ein Benutzer den Bildschirm sperren und entsperren, sich mit einem anderen Sitzungstyp abmelden und wieder anmelden kann ecryptfsDaten entschlüsseln .
Eliah Kagan
2
Genau genommen macht es für mich keinen Sinn, den PC meiner Familie zu verwenden, damit jeder das Administratorkennwort zum Entsperren des Bildschirms kennt. Dies normaluserund die adminuserEinstellung ist die goldene Regel.
Boris
1
Ich hatte gerade den Eindruck, dass das OP das normaluserKonto für die tägliche Arbeit und das adminKonto für die Ausführung von Verwaltungsaufgaben verwendet, was nichts wirklich verbessert. Auf einem Mehrbenutzer-Computer ist dies absolut sinnvoll.
Sergey

Antworten:

5

PAM kann sich darum kümmern

Das funktioniert bei mir unter Ubuntu 16.04 (edit: es funktioniert auch unter 18.04 LTS):

setze die Zeile:

session optional pam_xauth.so

irgendwo in:

/etc/pam.d/su

und / oder

/etc/pam.d/sudo

und dann mache ich "su -" oder "sudo su -" Ich kann grafische Apps als root verwenden.

Gerben
quelle
Bestätigung, dass dies auch auf Kubuntu 16.04 funktioniert. Vielen Dank!
akhmed
Danke, es funktioniert auch bei mir am 18.04! es scheint die beste Alternative zu sein suxund gksudie gibt es nicht mehr.
Boris
29

Terminologie

In dieser Antwort:

  • normaluserist ein normaler Benutzer, der kein Administrator ist und keine Befehle wie rootmit ausführen kann sudo.
  • administ ein Administrator, der Befehle wie rootmit ausführen kann sudo. (Natürlich sollten alle grafischen Befehle ein grafisches Frontend wie gksu/ verwendengksudo und nicht sudodirekt.)
  • anyapplicationist der Name der grafischen Anwendung normaluser, unter der ausgeführt werden soll root. normaluserkennt admindas Passwort und wurde (vermutlich) darüber informiert, dass er es für diesen Zweck verwenden darf.

Das Problem

Die Ursache des Problems, und der Grund , die meisten anderen Antworten bisher nicht Arbeit (mit Ausnahme von Marty Fried ‚s ausgezeichnete Antwort ), ist:

  • gksukann so konfiguriert werden, dass entweder sudo oder su als Backend verwendet wird. Das Standardverhalten von gksuUbuntu ist, als Frontend für sudound nicht für zu fungieren su. Das heißt, standardmäßig gksuund genau gleichgksudo verhalten . Siehe die Manpage .
  • normaluserist kein Administrator und kann daher keine Befehle ausführen wie rootmit sudo. sudofordert zur Eingabe des Kennworts des Benutzers auf , der es ausführt, und nicht des Kennworts des Benutzers, zu dem sie werden möchten . Es bedeutet, kein Administrator zu sein, wenn Sie nicht in der Lage sind, Ihr Kennwort für Aktionen als Personen zu verwenden, die Sie nicht sind .
  • normaluser, Vorausgesetzt , es ist kein Gastkonto ist, können Befehle als ein anderer Benutzer arbeiten mitsu , in dem Putting anderen Kennwort des Benutzers . Aber gksufungiert als Frontend für sudo, nicht su.
  • normaluserkann keinen Befehl direkt ausführen als root, weil normalusernicht verwenden kann sudo, und niemand kann rootmit werden, suweil es kein rootPasswort gibt .

Die Lösung

Die Lösung erfordert das Schreiben eines Befehls, der zwei Authentifizierungsschritte ausführt:

  • normalusermuss werden admin, um einen grafischen Befehl auszuführen. Um dies zu tun, normalusermuss laufen gksumit der -wFlagge , um es in machen laufen su-Modus anstelle des Standard - sudo-Modus , und die -uFlagge den Befehl als laufen adminstatt root.
  • Der Befehl run as adminmuss aufgerufen werden, gksu ohne dass das -wFlag verwendet sudowerden muss root.

Hier ist der Befehl (ja, ich habe ihn getestet ;-) ):

gksu -w -u admin gksu anyapplication

Sie werden zweimal zur Eingabe eines Passworts aufgefordert :

  1. Zunächst müssen Sie das adminPasswort eingeben, um normalusereinen Befehl wie adminim suBackend ausführen zu können .
  2. Zweitens müssen Sie das adminPasswort eingeben, um admineinen Befehl wie rootim sudoBackend ausführen zu können .

Korrekt. Sie geben admindas Passwort zweimal ein.

Sonstige Hinweise:

  • Wenn Sie möchten, können Sie die zweite gksudurch ersetzen gksudo, um die Verwirrung zu verringern. In Ubuntu sind sie gleichwertig. (Sie können auch die erste gksudurch ersetzen gksudo, aber das wäre äußerst eingängig und verwirrend.)
  • -wist die Kurzform von --su-mode.
  • -Sist die Kurzform von --sudo-mode, muss aber nicht verwendet werden, da der Sudo-Modus die Standardeinstellung ist.
  • Vielleicht möchten Sie dies zuerst mit einem ziemlich harmlosen Befehl testen, um sicherzustellen, dass er das tut, was Sie wollen. (Das wird es, aber Sie müssen mir nicht vertrauen.) Zum Beispiel:
    gksu -w -u admin gksu xclock
    xclock ist eine schöne einfache Uhr-Fenster-Anwendung.
Eliah Kagan
quelle
1
PERFEKT, ich füge sofort einen Alias ​​in mein .bashrc ein, um diesen cleveren Tipp nicht zu vergessen
Boris
weiß nicht warum, aber jetzt (mit Ubuntu 14.04) muss ich damit anfangen sudo, damit es funktioniert. Beispiel:sudo gksu -w -u thedude gksu xclock
Boris
Zu kdesudoIhrer Information : Sieht sauberer aus, zumindest auf KUbuntu.
MDTech.us_MAN
Leider scheint das gksunicht mehr verfügbar zu sein
Boris
11

Eine Möglichkeit, die wahrscheinlich funktioniert, ist die Verwendung von "sux" anstelle von "su", wenn Sie zum ersten Mal zum Administrator wechseln. sux behebt das Problem, dass x-Anwendungen vom gefälschten Benutzer ausgeführt werden. Es ist im Standard-Repository enthalten und kann durch Eingabe sudo apt-get install suxin einer Befehlszeile installiert werden .

Verwenden Sie dann einfach "sux" anstelle von "su" und es sollte so funktionieren, wie Sie es erwarten.

Lassen Sie uns das Beispiel der Anwendung wiederverwenden xclock:

sux admin
gksu xclock
Marty Fried
quelle
3
Es gibt keine weitere Version von suxauf Ubuntu 14.04 64bits;(
Boris
2
Scheint, dass es eine Alternative gibt
Boris
@Boris Es ist ein Shell-Skript. Sie können es einfach von einem historischen Repository herunterladen und in Ihren Pfad einfügen, z. B. von packages.debian.org/source/wheezy/sux
Nobody
2

pkexec

Es gibt eine allgegenwärtige Alternative zu kdesudo und gksu, pkexecdie aus einem policykit-1Paket stammt, das von vielen Paketen benötigt wird.

int_ua
quelle
Ich empfehle erweitern diese Antwort zu erklären , wie ein normaler Benutzer (der kein Administrator ist und nicht sich als root mit sudooder polkit), der das Kennwort eines Administrators kennt (dh von jemandem, der kann Wurzel mit sich sudooder polkit), können pkexeczu Führen Sie ein grafisches Programm als root aus. Das ist die Frage, die hier gestellt wird. Mir ist nicht klar, ob pkexecdies zumindest ohne umfangreiche Bearbeitung der Konfigurationsdateien möglich ist, zumal mit diesen pkexecProgrammen im Allgemeinen überhaupt keine beliebigen Grafikprogramme (ohne Polkit-Profile) ausgeführt werden können . Gibt es einen Weg?
Eliah Kagan
@EliahKagan Dies funktioniert unter Ubuntu mit der Standardkonfiguration - einfach ausführen pkexec commandund es funktioniert. Die Konfiguration befindet sich in der Datei, /usr/share/polkit-1/actions/org.freedesktop.policykit.policydie vom genannten Paket installiert wird.
Tatsächlich
0

Anstatt

su admin
gksu anyapplication ...

Ich schlage vor, Sie versuchen gksu -u admin anyapplication, wo Sie alles mit dem gksuBefehl selbst tun . Beachten Sie auch, dass Sie das Passwort des im Befehl genannten Benutzers eingeben müssen, dh in diesem Fall müssen Sie das Administratorkennwort eingeben.

l0n3sh4rk
quelle
1
Auf einem Standard-konfigurierten Ubuntu - System, wenn normaluserläuft gksu -u admin anyapplicationes für auffordern wird normaluser‚s Passwort zu werden , admindie mit sudoBack - End, wie gksu anyapplicationwürde prompt für normaluser‘ Kennwort s wird rootden mit sudoBackend. Beide schlagen aus dem gleichen Grund fehl - können normaluserkeine Befehle ausführen sudo.
Eliah Kagan
-1

Hier ist der Befehl, um dies zu erreichen.

gksu app-name

Führen Sie es aus, ohnesu vorher zu laufen . Sie müssen den obigen Befehl nur in einer normalen Benutzersitzung ausführen, und die Anwendung wird als root ausgeführt.

SirCharlo
quelle
1
es funktioniert nicht - beachten Sie, dass ich aus einer Benutzersitzung ohne Privileg versuche
Boris
Was ist die Fehlermeldung?
SirCharlo
Eingabe meines normalBenutzerpassworts - Ich erhalte die Meldung "Der Start als Root-Benutzer ist nicht möglich"
Boris
Eingabe meines superuser/adminPassworts - Ich erhalte die Meldung "Falsches Passwort, versuche es erneut"
Boris
-1

Du solltest benutzen:

gksudo AppName

Daraufhin wird zuerst eine grafische Passwortabfrage (das Passwort Ihres Benutzers) aufgerufen und anschließend die GUI-App als root gestartet (ich habe es gerade versucht, es funktioniert wirklich. Lustige Sache: Ich habe es gksu AppNamesofort danach versucht , und das hat auch funktioniert - so wie es ist Vermutlich, wie das Präfix "gk" andeutet. Ich bin mir also nicht ganz sicher, wo sich Ihr Problem befindet.

Izzy
quelle
1
Dies funktioniert in Ihrem Fall, weil Sie es in einer Administrator-Benutzersitzung mit sudo-Recht versucht haben. Was ist mit einer Nicht-Administrator-Benutzersitzung ohne Sudo-Recht?
Boris
Ich habe gksudo aus einem normalen Terminalfenster mit einem Nicht-Administrator-Benutzer (meinem eigenen Benutzer) verwendet. Du bist aber für den zweiten Versuch richtig, da ich damals noch sudo perms hatte. Das Problem von Boris ist jedoch ein anderes: Seine App kann keine Verbindung zu X herstellen, was in meinem Fall beide Male funktioniert hat. Wie Sie der ursprünglichen Frage sudoentnehmen können, arbeitet der Textmodus für ihn.
Izzy,
-1

Es gibt nur einen Superuser und das ist root.

Benutzer 1 ist ein Administrator und hat Sudo-Rechte.
Benutzer 2 ist kein Administrator und hat keine Sudo-Rechte.

Versuchen Sie, sich als Benutzer 1 anzumelden, und verwenden Sie dann den Befehl

gksudo app-name  

(Ersetzen des App-Namens durch den App-Namen)
Hoffe das hilft - lass es mich wissen. :O)

BEARBEITEN: Weitere Informationen wie gewünscht

Wenn nur Sie auf dem Computer sind, unterscheidet sich die
Verwendung von Benutzer 1 (der die Berechtigung zur Verwendung von sudo hat)
nicht von der Verwendung von Benutzer 2 (der die Berechtigung zur Verwendung von sudo nicht hat).
Benutzer 1 hat dieselben Rechte wie Benutzer 2. Es sei
denn, Benutzer 1 gibt einen Befehl mit dem Präfix sudo aus und / oder gibt sein Kennwort an, damit Anwendungen mit Root-Berechtigungen ausgeführt werden können.
Der einzige Unterschied besteht darin, dass Benutzer 2 keine Apps als Root ausführen kann.

Hoffe, das hilft dir, es ein bisschen zu erklären. :O)

Fernhill Linux Projekt
quelle
danke für die klärung zwischen super user und admin, ich werde meine frage bearbeiten. Was bedeutet "Anmelden als Benutzer 1" => Sitzung mit Benutzer 1 eröffnen? Nun, das möchte ich vermeiden.
Boris
Weitere Informationen hinzugefügt, um wie gewünscht zu antworten: o)
Fernhill Linux Project
Nun, meine Frau und meine Kinder benutzen user2 mit dem Autologin, also mag ich es lieber, wenn sudo nicht mit diesem Benutzer in Verbindung steht.
Boris
Klingt nach einer guten Idee - ich habe auch Kinder; o). Haben Sie bereits versucht, sich als Benutzer1 anzumelden und den Befehl auszuführen?
Fernhill Linux Project
1
Ja, ich kann, aber es ist schmerzhaft, die Benutzersitzung zu ändern. Normalerweise muss ich das mehrmals machen: Gehen Sie zur Admin-Sitzung, um einige Einstellungen zu definieren, wechseln Sie zur normalen Benutzersitzung, um sie zu testen, und es ist immer wieder sehr schön, wenn Sie dies in der normalen Sitzung tun können. Die meiste Zeit behandle ich es mit su admin+ sudo ...Beispiel sudo vi file, außer für die Anwendung mit GUI
Boris