Aus verschiedenen Gründen möchte ich meinen Browser auf meiner Fedora-Box als anderer Systembenutzer ausführen.
Vorerst habe ich einen separaten Systembenutzer mit dem Namen erstellt und mit meinem Benutzernamen sandbox
eine benutzerdefinierte Datei für Google Chrome erstellt :~/.local/share/applications/chrome-sandboxed.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
StartupNotify=true
Type=Application
Categories=Network;WebBrowser;
MimeType=x-scheme-handler/unknown;x-scheme-handler/about;text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
Name=Google Chrome (sandboxed)
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable %U && true"
Icon=google-chrome
Actions=new-window;new-private-window;
[Desktop Action new-window]
Name=New Window
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable && true"
[Desktop Action new-private-window]
Name=New Incognito Window
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable --incognito && true"
Nach einigem Ringen und Nachforschen fand ich heraus, dassIch muss dem sandbox
Benutzer erlauben, Fenster in meiner Sitzung zu öffnen mitxhost +SI:localuser:sandbox
und dasDer pkexec
Befehl musste in einen separaten Befehl eingeschlossen werden, sh -c ""
der mit endete&& true
da es sonst in Gnome nicht funktioniert. Ich habe sogar dieseals Standardbrowser festlegen, indem Siexdg-settings set default-web-browser chrome-sandboxed.desktop
, da es zuvor nicht im GUI-Tool zur Auswahl von Standardanwendungen angezeigt wurde.
Jetzt stört mich nur noch, dass ich jedes Mal, wenn ich in einer anderen Anwendung (z. B. Thunderbird) auf einen Link klicke, mein Kennwort eingeben muss, um mich zu authentifizieren pkexec
und das Programm als anderer Benutzer auszuführen (obwohl es dann erkennt, dass bereits ein Prozess ausgeführt wird, und den Link in einem neuen Tab des vorhandenen Fensters öffnet – aber ich vermute, dass diese Logik in der Anwendung selbst implementiert ist und daher erst aktiviert werden kann, nachdem die Authentifizierung erfolgt ist und der Prozess gestartet wurde).
Da es mir egal ist, ob mein Benutzer auf die sandbox
Inhalte des Benutzers zugreifen kann (ich möchte das Gegenteil verhindern), würde ich dies gerne ohne Passwort tun. Ich bin mir jedoch nicht sicher, wie ich das erreichen soll.
Ich habe gelesen, dass dies durch die Erstellung einer ACL möglich ist policykit
. Aber da ich nichtallgemeinDeaktivieren der Kennwortabfrageund ich habe keine Ahnung, wie der Name der benutzerdefinierten "Anwendung" lautet, derscheint für eine fein abgestimmte Konfiguration relevant zu sein(wenn ich die Syntax in der Antwort richtig verstanden habe) Ich weiß nicht, wie ich die Kennwortabfrage nur für diese Anwendung (und vielleicht auch für weitere in der Zukunft) deaktivieren kann.
Für jede Hilfe wäre ich sehr dankbar.
PS: Entschuldigung, das Tag sudo
ist wahrscheinlich verwirrend, aber ich bräuchte 300 Reputationspunkte (die ich nicht habe), um das neue Tag zu erstellen pkexec
.
BEARBEITEN
Habe es mit den Hinweisen vonBenutzer1686'SAntwort.
Erstellen Sie zunächst (sofern noch keine vorhanden ist) eine benutzerdefinierte policykit
Richtliniendatei, um eine Konfiguration action id
für das gewünschte Programm vorzunehmen – in meinem Fall /usr/share/polkit-1/actions/com.google.chrome.sandboxed.policy
(beachten Sie, dass in diesem Fall weiterhin eine Standardrichtlinie auth_admin
erforderlich ist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<vendor>Google</vendor>
<vendor_url>https://www.google.com</vendor_url>
<icon_name>google-chrome</icon_name>
<action id="com.google.chrome.sandboxed">
<description>Run Google Chrome as another user</description>
<message>Authentication is required to run Google Chrome as another user</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/google-chrome-stable</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
Erstellen Sie dann eine benutzerdefinierte Regel, um die kennwortlose Ausführung der Aktion mit der action id
( com.google.chrome.sandboxed
hier) konfigurierten Regel nur für Ihren Benutzer zuzulassen – in meinem Fall /var/lib/polkit-1/localauthority/50-local.d/10-passwordless_chrome-sandboxed_from_myuser.pkla
:
[No pkexec password prompt for myuser when running chrome-sandboxed]
Identity=unix-user:myuser
Action=com.google.chrome.sandboxed
ResultActive=yes
Entfernen Sie anschließend alle Vorkommen von env DISPLAY=$DISPLAY
aus Ihrer .desktop
Datei, andernfalls wird stattdessen die Ausführung als anderer Benutzer pkexec
versucht .env
/usr/bin/google-chrome-stable
Benutzer1686Wie bereits erwähnt, werden die erforderlichen Umgebungsvariablen automatisch an den Kindprozess vererbt und sind daher ohnehin nicht mehr erforderlich.
Möglicherweise müssen Sie dies systemctl reload polkit.service
oder tun systemctl restart polkit.service
, aber da bin ich mir nicht sicher, da ich zunächst dachte, das wäre der Grund, warum es bei mir nicht funktioniert hat – obwohl ich einfach vergessen hatte, meine .desktop
Datei zu ändern.
Es funktioniert jetzt wie erwartet.
Antwort1
So geht GParted damit um:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<vendor>The GParted Project</vendor>
<vendor_url>https://gparted.org</vendor_url>
<icon_name>gparted</icon_name>
<action id="org.gnome.gparted">
<description>Run GParted as root</description>
<message>Authentication is required to run the GParted Partition Editor as root</message>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gparted</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
Beachten Sie die beiden <annotate/>
Tags.
Wenn diese Richtlinie installiert wird, pkexec /usr/bin/gparted
wird einem Simple automatisch eine andere „Aktions-ID“ des Policykits zugewiesen (so können Sie verschiedene Standardwerte definieren und diese auch in benutzerdefinierten Regeln anpassen). Sie müssen $DISPLAY auch nicht manuell übergeben – pkexec kopiert alle erforderlichen Variablen automatisch.