[erledigt] su oder sudo - Wie herausfinden, welches geht?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 27.07.2017 22:32:30

Es ist debian stretch.
Installiert habe ich es mit root-Paßwort, ohne sudo.

Debiansudo habe ich nachträglich installiert und /etc/sudoers editiert.
policykit und seine Konfiguration habe ich nicht angetastet.

Ich lade gerade eine Live-CD herunter, um die Situation mit einem jungfräulichen System noch einmal nachzuprüfen.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Dogge » 27.07.2017 22:36:47

Ich kann es nachvollziehen (debian stretch buster):

Code: Alles auswählen

martin@schlepptop  ~ sudo whoami
[sudo] Passwort für martin: 
Leider darf der Benutzer martin »/usr/bin/whoami« als root auf schlepptop nicht ausführen.

Code: Alles auswählen

martin@schlepptop  ~  pkexec whoami
root
Ich habe nämlich auch ein root Passwort vergeben, da ich ja Systemeinstellungen und Paketinstallationen als root mache. Um »einen einzigen Befehl« als User mit root Rechten ausführen zu können habe ich sudo installiert und »diesen einen« Befehl erlaubt. Ich finde es krass, dass ich mir damit unwissentlich mein System wie ein Ubuntu eingerichtet habe, nur mit dem Unterschied, dass man bei Debian pkexec statt sudo voranstellen muss. Da hätte ich in der /etc/sudoers ja auch gleich alles erlauben können. :facepalm: :evil:

Edit: Policykit lässt sich auch nicht so einfach deinstallieren, wenn man gnome-control-center, network-manager und gdm3 behalten will:

Code: Alles auswählen

Die folgenden Pakete werden ENTFERNT:
  colord* gdm3* gnome-color-manager* gnome-control-center* gnome-system-log* network-manager* network-manager-gnome*
  policykit-1* 
Sehr schön. :evil:
D.h. ich kann jetzt nur sudo deinstallieren und die Gruppe sudo löschen, obwohl sudo tut was es soll und pkexec Mist baut.

Edit2: Vor lauter Verärgerung hab ich ganz vercheckt, dass testing jetzt ja buster heißt.

LastEdit: Naja, ich finde das Verhalten immer noch doof, aber mit den Beiden Befehlen bekommt man es gefixt:

Code: Alles auswählen

# gpasswd -d USER sudo
# groupdel sudo
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

guennid

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von guennid » 27.07.2017 23:20:15

Und was war das für'n bohai um visudo!
Es gibt noch ein weiteres Alt-Programm, um gezielt root-Rechte zu übertragen, das ich seit woody gelegentlich nutze: Debiansuper

Was haltet ihr davon?

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 27.07.2017 23:37:59

Dogge hat geschrieben: ↑ zum Beitrag ↑
27.07.2017 22:36:47
Ich kann es nachvollziehen (debian stretch buster):
Danke für's Überprüfen und Bestätigen. :-)
Dogge hat geschrieben:Sehr schön. :evil:
D.h. ich kann jetzt nur sudo deinstallieren und die Gruppe sudo löschen, obwohl sudo tut was es soll und pkexec Mist baut
[...]
mit den Beiden Befehlen bekommt man es gefixt:

Code: Alles auswählen

# gpasswd -d USER sudo
# groupdel sudo
Du kanst auch die policykit-Konfiguration für Gruppe sudo löschen:

Code: Alles auswählen

/etc/polkit-1/localauthority.conf.d/51-debian-sudo.conf
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 28.07.2017 00:50:54

Das Rätsel um pkexec und sudo löst sich auf! Aus dem Bugreport:
Simon hat geschrieben: > Granting root-like access via group sudo is intended and not a security
> hole and the policykit policy is in line with the sudo policy here.

This is also as documented in base-passwd, which is the central
authority on what the predefined groups in Debian mean:

sudo

Members of this group may run any command as any user when using sudo or
pkexec (from the policykit-1 package, independently of whether the sudo
package is installed).

—/usr/share/doc/base-passwd/users-and-groups.txt.gz

If you don't want a user to be root-equivalent, don't add them to the
sudo group. Users who are meant to be able to run certain specific
commands (but not others) via sudo should not be in that group;
membership of that group is not required to use sudo.
* Mitglieder der Gruppe sudo sind Administratoren und dürfen mit pkexec und User-Paßwort beliebige root-Befehle ausführen
* Um einzelne Befehle für User per sudo in /etc/sudoers zu erlauben, ist Mitgliedschaft des Users in der Gruppe sudo nicht nötig.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 28.07.2017 06:49:00

Das schrieb ich ja schon vorhin. Mitglieder der Gruppe sudo sind admins und dürfen alles.
Das sagt ja auch

Code: Alles auswählen

 %sudo	ALL=(ALL:ALL) ALL

Und pkexec bildet dieses Verhalten ebenfalls ab.

Die Frage ist, wird UID 1000 bei Vergabe eines root-Passworts im Installer der Gruppe sudo hinzugefügt oder nicht? Wenn ja, sind wir bei Windows, wenn nein, passt alles.

Nach einer vollständigen Installation MUSS ja irgend ein User Adminrechte haben. Sonst steh ich schön blöd da, will ich etwas am System verändern.
Klar, mit livesystem und chroot kann ich mir schon helfen... Aber das ist wirklich nur ein Würgaround.

Dieser Admin-User (root mit Account, oder UID 1000 in Gruppe sudo) kann dann anderen Usern einzelne Befehle durch explizites Eintragen in /etc/sudoers erlauben, oder er legt den Usern pkexec-Rules an.
In pkexec kann ich sogar unterscheiden, was der User darf, wenn er lokal an der Maschine eingeloggt ist, oder per ssh.

Ich versteh die ganze Aufregung hier nicht. Vermute einmal sie kommt daher, das sich manche mit der Konfiguration von /etc/sudoers noch nicht ausreichen beschäftigt haben... Und die Verwendung von sudo mit der Gruppenmitgliedschaft in sudo gleichsetzen...

Ich hab unlängst bei einer Installation dem User mit UID 1000 (ohne ihn der Gruppe sudo hinzuzufügen) mit pkexec erlaubt, in gnome-software neue Software zu installieren, aber keine zu löschen.
Damit kann dieser User über die Gnome-Suche Programme finden, die nicht installiert sind, und sich diese mit dem eigenen Passwort installieren, aber durch die nicht Erlaubte Deinstallation kann er sich den Boden unter den Füßen nicht wegziehen und das halbe System wegreißen.

Hab einen zweiten User als Admin angelegt, der ist in der Gruppe sudo. Und in GDM ausgeblendet mit dieser Methode:
Go to /var/lib/AccountsService/users If the user has already logged in, then there should be a file with their user name. If not, then copy a different one to a file with their user name. Edit the file and change the SystemAccount= line to true. Restart gdm and that user won't show up in the list.


Das wäre zu überlegen, ob nicht gleich auch der Installer erledigen sollte, wenn kein Rootpasswort vergeben wird, und UID 1000 in die Gruppe sudo kommt...
Damit is klar, dass ein weiterer unprivilegierter User angelegt werden sollte.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Meillo » 28.07.2017 07:11:43

@scientific: Guter Post.

scientific hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 06:49:00
Das wäre zu überlegen, ob nicht gleich auch der Installer erledigen sollte, wenn kein Rootpasswort vergeben wird, und UID 1000 in die Gruppe sudo kommt...
Damit is klar, dass ein weiterer unprivilegierter User angelegt werden sollte.
Wenn man nun aber bei einem passwortlosen root einen User1 in Gruppe sudo anlegt und einen User2 ohne sudo-Zugehoerigkeit, dann kann man stattdessen auch gleich root ein Passwort geben und dem ersten User keine sudo-Zugehoerigkeit. Es laeuft auf das gleiche raus.

Die Gruppe sudo statt dem root-Account macht fuer mich dann Sinn wenn es mehrere Admins sind (es geht ja auch um die *Gruppe* sudo) und man verhindern will, dass ein Passwort geshared werden muss ... wobei sich dieser Fall durch ssh-Keys grossteils eruebrigt.
Use ed once in a while!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 28.07.2017 10:15:17

Ah ja. Das wars!
Stimmt. Mit einem Admin nimmt man besser einen echten root. Mit mehreren Admins dann sudo.

Mit sudo kann man ja aber auch den Zugriff auf andere Hosts auch regeln, und welche Rechte die User/Groups dort haben. Aber so weit bin ich noch nicht vorgedrungen, das zu ergründen.

Sudo hat ggü su auch den Vorteil, dass fehlgeschlagene Loginversuche gepetzt (gemailt/gelogt) werden. Bei su muss man extra /var/log/auth oder das Journal parsen.

Der Vorteil eines Admins via sudo ist ja auch, dass der gefahrlos eine graphische Sitzung starten kann. Abgesehen von der Gefahr, dass sein Passwort abgegriffen wird, und so jemand seine Sitzung und gleich den ganzen Rechner übernehmen kann.

Und man kann durchaus sudo und pkexec mischen. Denn einen einzelnen Befehl in sudo erlauben ist einfacher und verständlicher als eine pkla zu schreiben. Sich aber einmal in polkit eingearbeitet zu haben bringt wohl mehr Flexibilität und feinere Granularität als sudo.
Ich sehs so ähnlich wie mit systemd. Hat man das einmal verstanden, kann man damit super lässige Abhängigkeiten und Automatismen bauen. Was mit Shellskripten in einer Zeile erledigt wird, brauch mit systemd ein, zwei units mit mehreren Zeilen.
Benötigt man aber Abhängigkeiten, vorhandensein von Files/Directorys, Laptop am Stromkabel oder Akku artet mit Shellskripten schnell zu Megaskripten aus, die noch Funktionen sourcen, die wiederum Funktionen sourcen (man analysiere mal acpid in voller Tiefe...) bleibt aber mit systemd ein, zwei units mit ein paar Zeilen.

So kann ich mit pkexec ganz einfach den Zugriff auf eine einzige Funktion von lokal und remote verschieden Regeln. Mit sudo wird das schon schwierig... Wenn es überhaupt geht.

Gruppenweise Rechtevergabe geht in pkexec genauso einfach wie in sudo.

Btw... Ich hab grad beschlossen, msudo von meinen Maschinen zu schmeißen, und mich in pkexec einzuarbeiten. Aber dennoch halte ich richtig eingesetztes sudo nicht für ein Risiko.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

TomL

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von TomL » 28.07.2017 10:44:41

scientific hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 10:15:17
Denn einen einzelnen Befehl in sudo erlauben ist einfacher und verständlicher als eine pkla zu schreiben.
Und das ist der beliebte Irrtum, wo schlichtweg die Realität (vielleicht auch unbewusst) ignoriert wird. Mit dem per default konfiguriertem 15-minütigen Passwdkeep im "sudo"-Kommando öffnest Du eine Sicherheitslücke, mit der sich wirklich jedes Programm, jedes Plugin, jedes Addon im Vorbeigehen root-Rechte erschleichen kann und damit die vollständige Kontrolle über den Rechner erlangt. Das wissen die wenigsten und die wenigsten schalten das ab. Das wäre beispielsweise DIE offene Tür für den Bundestrojaner... es braucht nur ein ge'hype'tes Addon über Computerbild oder Chip.de o.ä. ... oder vielleicht so interessante Programme wie Calibre, die wohl oft nicht aus dem Repo kommen..... und Peng, der Rechner ist gekapert. Das spannende dabei ist, dass wohl niemand auf den Komfort des Password-Keeps verzichten will, denn dann müsste man ja bei mehreren sudo-Kommandos jedesmal das Passwd eingeben. Aber genau das ist der Knackpunkt.... wer nur einmal das Pwd eingeben will, der nimmt einfach "su"... Problem gelöst.

Fakt ist, es gibt außerhalb der Situation, dass mehrere Admins vollständig berechtigt werden sollen, keinen sinnvollen Einsatz von "sudo" auf einem Desktop-PC, am allerwenigsten, wenn es um diese einzelnen Single-Statements geht. Das polkit ist aber so flexibel, dass man sowohl explizite Berechtigungen (analog sudoers) aussprechen kann und darüber hinaus "sudo" auch für Single-Statements ganz einfach und nebenbei emulieren kann. Und zwar schon auf einfachste Weise mit einem Bash-Alias:

Code: Alles auswählen

alias sudo="pkexec $@"
was auf Anhieb schon fast alle Singles-sudo-Statements erfolgreich abhandelt. Und wenn dann auch noch grafische sudo-Kommandos abgesetzt werden sollen, dann ändert man den Alias auf

Code: Alles auswählen

alias sudo="pkexec /usr/local/bin/sudo"
und verwendet einen Wrapper

Code: Alles auswählen

nano /usr/local/bin/sudo

Code: Alles auswählen

#!/bin/bash

if [[ $EUID -eq 0 ]]; then
    PATH=/usr/local/sbin:/usr/local/bin:$PATH
    export PATH
    [[ ! -z "$@" ]] && $@ && exit $?
fi

exit 1
und begleitend dazu eine einfache Policy, die darüber informiert, dass es um grafische Apps geht:

Code: Alles auswählen

nano /usr/share/polkit-1/actions/sudo.policy

Code: Alles auswählen

<?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>
  <action id="LocalExtPerms.sudo">
    <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/local/bin/sudo</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>
</policyconfig>
Diese Policy verlangt generell das root-Passwd, eine PKLA ist nicht erforderlich. Die Polkit-Local-Autorisation braucht man erst, wenn man Abweichungen einstellen will, um z.B. User oder Gruppen mit User-PWD zu berechtigen, weil diese User das root-PWD nicht kennen. Und wer sich wider besseres Wissen auch hier für den PDWkeep entscheidet, ändert einfach "auth_admin" auf "auth_admin_keep". Dann ist sudo komplett abgebildet, einschließlich der Risiken.

Damit ist der ganz sudo-Quatsch völlig überflüssig und es funktioniert trotzdem alles wie gewohnt. Und man kann nun einfach mit sudo Terminal-Anwendungen starten und gleichermaßen auch grafische (!) Programme, ohne diese Prothesen gksudo und kdesudo und wie sie alle heissen. Diese ganze Diskussion über sudo für Desktop-Systeme ist so dermaßen absurd, dass ich das manchmal kaum noch verstehen kann.... aber über systemd wird ja genau so diskutiert...

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Dogge » 28.07.2017 12:43:57

scientific hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 06:49:00
Das schrieb ich ja schon vorhin. Mitglieder der Gruppe sudo sind admins und dürfen alles.
Das sagt ja auch

Code: Alles auswählen

 %sudo	ALL=(ALL:ALL) ALL

Und pkexec bildet dieses Verhalten ebenfalls ab.
Wenn man diese Zeile aber nicht in der sudoers hat, dann darf man mit sudo nur was explizit in der sudoers erlaubt wurde. Pkexec ignoriert das aber und erlaubt weiterhin alles (sofern der user in der Gruppe sudo ist)...
Ich finde es dämlich, das über die Gruppe sudo zu regeln, da diese halt suggeriert, dass man user die sudo nutzen sollen in die Gruppe fügen muss. Man hätte doch dafür ne Gruppe admin, pkexec o.ä. anlegen können. :roll:
Klar, das ist _irgendwo_ dokumentiert aber es ist halt eine sehr fehlerträchtiges, wenn nicht gar Fehlkonfigurationen provozierendes Setup.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 28.07.2017 14:21:11

Die Zeile sollte aber in sudoers sein.
Damit ist klar, wer in der Gruppe sudo ist, ist Sysadmin und darf sowohl mit pkexec und sudo alles.

Also regle ich die Erlaubnisse des Sysadmin-Users allein durch die Zugehörigkeit der Gruppe sudo.

Das ist doch nicht so schwierig.

Will ich eigene Rechtesysteme, regle ich es über eigens erstellte Gruppen, denen ich die Erlaubnis mit sudoers und pkexec.

Sudo ist sysadmin. Das ist als Default zu akzeptieren. Sowohl für sudo als auch für pkexec. Und von pkexec zu fordern, dass es /etc/sudoers berücksichtigen soll, wäre das gleiche wie vom ftp-Server die Einstellungen von /etc/ssh/ zu berücksichtigen...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Dogge » 28.07.2017 14:29:41

scientific hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 14:21:11
Die Zeile sollte aber in sudoers sein.
Damit ist klar, wer in der Gruppe sudo ist, ist Sysadmin und darf sowohl mit pkexec und sudo alles.
Ich habe die Zeile halt rausgenommen und die sudoers so konfiguriert, dass mein Nutzer nur den einen Befehl als root ausführen darf. Dann hab ich es mit sudo getestet und es hat alles funktioniert weil sudo die Konfiguration in der sudoers berücksichtigt. Dass es pkexec gibt und das die sudoers ignoriert habe ich erst in diesem Thread erfahren.

Ich finde nicht, dass damit alles klar ist. Die Gruppe sudo hat keinen Einfluss darauf wie sudo sich verhält, da man das in der sudoers ändern kann. Pkexec hingegen wird durch die Gruppenzugehörigkeit zu sudo konfiguriert aber ignoriert die sudoers. Das finde ich alles andere als klar ersichtlich, eher "frickelig" um mal heise Jargon zu bemühen.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 28.07.2017 15:30:56

Nun... Es gibt Defaultkonfigurationen. Wenn ich solche sicherheitsrelevanten Geschichten ändere, muss ich mich vorher gut informieren.

Lass es halt wie es vorgesehen ist, und nimm deine User aus der Gruppe sudo raus. Und erlaub deinen Befehl explizit jedem User, oder mach eine neue Gruppe, erlaub ihn dieser Gruppe und füg die entsprechenden User dieser Gruppe hinzu. So würds ich lösen. Das ist überhaupt nicht frickelig.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Dogge » 28.07.2017 18:09:00

scientific hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 15:30:56
Nun... Es gibt Defaultkonfigurationen. Wenn ich solche sicherheitsrelevanten Geschichten ändere, muss ich mich vorher gut informieren.
Klar hab ich mich informiert wie ich sudo mittels der sudoers konfigurieren kann. Dass man zusätzlich noch pkexec beachten muss habe ich in keiner sudo manpage gesehen. Mir ist dieses Tool, wie ich ja schon häufiger gesagt habe, noch nie untergekommen. Ist das noch recht neu oder ist das bisher immer an mir vorbeigegangen?
Lass es halt wie es vorgesehen ist, und nimm deine User aus der Gruppe sudo raus.
Das habe ich ja gemacht und auch gleich die Gruppe gelöscht, steht so auch in einem meiner Beiträge hier.
Das ist überhaupt nicht frickelig.
Das Entfernen aus der Gruppe finde ich auch nicht "frickelig" sondern eher das Zusammenspiel von sudo, pkexec, der Datei sudoers und der Gruppe sudo.
Dass die Gruppe sudo nicht für sudo sondern für pkexec relevant ist und sudo auch ohne die Gruppe funktioniert aber pkexec wenn es schon die Gruppe sudo heranzieht nicht die sudoers berücksichtigt halte ich schon für eine mindestens seltsame Designentscheidung.
Hätte man die Gruppe statt sudo admin genannt wäre das klarer.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von Meillo » 28.07.2017 18:26:05

Dogge hat geschrieben: ↑ zum Beitrag ↑
28.07.2017 18:09:00
Dass die Gruppe sudo nicht für sudo sondern für pkexec relevant ist und sudo auch ohne die Gruppe funktioniert aber pkexec wenn es schon die Gruppe sudo heranzieht nicht die sudoers berücksichtigt halte ich schon für eine mindestens seltsame Designentscheidung.
Das geht mir auch so. Da fehlt die Klarheit (die ich sonst von Unix gewohnt bin).
Hätte man die Gruppe statt sudo admin genannt wäre das klarer.
Die Gruppe adm gibt es schon. ;-) Ihre Mitglieder koennen die Logfiles lesen.


Ach, und btw: Bei BSD muss man Mitglied der Gruppe wheel sein, um su(1) aufrufen zu duerfen.
Use ed once in a while!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 28.07.2017 19:34:11

Wheel ist ja auch so ein Relikt, das nur durch Gewohnheit passt, sonst aber äußerst seltsam klingt...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 04.08.2017 12:39:42

Ich muß meine [gelöst]-Meldung leider widerrufen. :(
Was erst eine Lösung zu sein schien, um die Anwendbarkeit von sudo für einen bestimmten Befehl zu testen:

Code: Alles auswählen

sudo -ln docker
... funktioniert leider nur, wenn sudo vorher schon mit Paßwort aufgerufen wurde und sich das Paßwort gemerkt hat. Ansonsten gibt es Fehlercode 1 zurück, auch wenn der Befehl zulässig ist. :evil:

Die Paßwortabfrage von pkexec funktioniert nur auf Display :0. Auf Konsole und auf anderen X Servern bricht es mit Fehlermeldung ab. In OpenSuse funktioniert es nicht einmal auf Display :0.
Traurige Bilanz, wenn pkexec nach 10 Jahren nicht in der Lage ist, zuverlässig eine Paßwortabfrage durchzuführen. So wird das nix mit der Ablösung von su und sudo. :?

Da steh ich nun, ich armer Tor, und bin so klug als wie zuvor. :roll:
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

TomL

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von TomL » 04.08.2017 17:26:20

MartinV hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 12:39:42
Traurige Bilanz, wenn pkexec nach 10 Jahren nicht in der Lage ist, zuverlässig eine Paßwortabfrage durchzuführen.
Was macht Dich eigentlich so sicher, dass das Polkit das Problem ist? Ich bin eigentlich ziemlich sicher, dass es das nicht ist. Beschreibe doch einfach mal ganz präzise, was Du erreichen willst, in welchem Umfeld, mit welchen Hilfsmitteln, in welchem zeitlichen Ablauf, wer UND was ist beteiligt am Prozess? Du solltest Dich wirklich nicht wundern, wenn auf Dein Posting kein Mensch reagiert.... was ist denn das für eine Feststellung "es bricht mit einer Fehlermeldung ab", wenn es hier kein Orakel gibt, welches uns hier die Fehlermeldung zeigt. Wie soll man denn da helfen? Irgendwas hinterhertragen habe ich auch keinen Bock drauf. 3 Mal bin ich heute schon angefangen und habs jedesmal wieder abgebrochen. Aber die Aussage, dass das Polkit nicht funktioniert ist schlichtweg falsch. Und das sollte so nicht stehenbleiben.... also nun doch ein 4. Versuch.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 04.08.2017 20:46:08

Aber die Aussage, dass das Polkit nicht funktioniert ist schlichtweg falsch. Und das sollte so nicht stehenbleiben.... also nun doch ein 4. Versuch.
Danke! :)
Was macht Dich eigentlich so sicher, dass das Polkit das Problem ist?
Nachdem die Verwicklungen um pkexec und Gruppe sudo geklärt sind, bleibt noch ein Problem: Die Paßwortabfrage mit pkexec. Auf Display :0 funktioniert sie. Du hast das Problem auch erwähnt:
TomL hat geschrieben: ↑ zum Beitrag ↑
27.07.2017 11:38:48
scientific hat geschrieben: ↑ zum Beitrag ↑
27.07.2017 10:35:41
Aber hat pkexec nicht den Vorteil, dass es je na verfügbarer Oberfläche entscheidet, ob eine Abfrage im Terminal oder über ein GUI macht?

Das funktioniert bei mir verblüffenderweise unter Stretch nicht mehr....die Text-Abfrage im Terminal failed bei jeder Passwordeingabe ... keine Ahnung warum... keine Ahnung, ob das ein Bug ist. Bei mir funktioniert nur der GUI-Dialog. Ich bemerke das nur nicht, weil ich eben für die Jobs alles über Rules geregelt habe und die Password-Abfrage nicht kommt. Aber merkwürdig ist das schon.
pkexec im Terminal auf Display :0 funktioniert bei mir, es kommt die GUI-Abfrage.
Auf Konsole bekomme ich diese Fehlermeldung:

Code: Alles auswählen

$ pkexec bash
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/bin/bash' as the super user
Authenticating as: root
Password: 
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized

This incident has been reported.
Starte ich einen zweiten X Server und rufe dort pkexec auf, kommt manchmal die pkexec-GUI auf dem ersten X Server (wo ich sie nicht sehen kann, weil ich ja die Anzeige vom zweiten X Server habe), manchmal erscheint sie auch auf dem ersten X server nicht und die Fehlermeldung wird erst sichtbar, wenn ich den zweiten X Server beende und wieder auf Konsole bin. Paßwortabfrage mit gksu funktioniert auch auf zusätzlichen X servern.
Beschreibe doch einfach mal ganz präzise, was Du erreichen willst, in welchem Umfeld, mit welchen Hilfsmitteln, in welchem zeitlichen Ablauf, wer UND was ist beteiligt am Prozess?
Eigentlich ist es eine Kleinigkeit: Ich will einen einzelnen Befehl (docker) als root ausführen und dafür das Paßwort abfragen. Der Rest des Skriptes (insbesondere verschiedene X Server, z. B. Xephyr) soll als unprivilegierter User laufen.

Ziel: GUI-Anwendungen in docker Containern ermöglichen, und dabei unter anderem Sicherheitslücken im X11 Protokoll vermeiden (z .B. Keylogging).
Umfeld: Beliebige Linux-Distributionen
Hilfsmittel: bash, docker, zusätzliche X server
Ablauf: Ein X Server wird gestartet, es erscheint eine Paßwortabfrage, um docker zu starten. Anschließend werden X Server und docker überwacht, und wenn eines von beiden beendet wird, beendet das Skript auch das andere.
Das Skript auf github: x11docker
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

TomL

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von TomL » 04.08.2017 22:26:01

Ich glaube, die Quelle des Problems ist nicht das Polkit, auch wenn das Polkit jetzt diesen Effekt zeigt. Das Problem liegt eher bei Debian, weil sich die Entwickler entschlossen haben, sogar bei Stretch immer noch ein Polkit einzusetzen, was schon bei Jessie alt war... und zwar immer noch die Version 0.105. Der Grund dafür war, soweit ich mich erinnere, dass man sich nicht einigen konnte und die dunkelblaue Tischdecke auf keinen Fall jetzt dunkelgrün sein darf. Ganz so wars zwar nicht, aber für mich ist es gleichbedeutend und auf jeden Fall völlig absurd. Es ging darum, das 0.105 pkla-Flat-Files hatte und 0.113 neuerdings die Dateien im xml-Style anlegt. Als wenn das eine Rolle spielt.... stattdessen hält man lieber an einer Bug-Version fest.

Egal... das TTY-Problem besteht aktuell in Debian. Läuft der GUI-Auth-Agent funktionierts, wenn X läuft. In der Konsole gehts nicht, weil kein X läuft und der pkttyagent failed. Das funktioniert nicht mal mit einem Prozess-Bind. Allerdings versteh ich nicht,warum Du darauf bestehst, dass der User sein Password eingeben muss... denn Du wirst ihm ja wohl kein root-PWD geben. Und wenn der User sowieso sein eigenes PWD eingeben kann, kann man sich das doch auch sparen. Ich würde die betroffenen User explizit in eine Gruppe (nicht sudo!) eintragen und die Gruppe via Polkit ohne PWD-Abfrage berechtigen. Und alle User, die nicht in der Gruppe enthalten sind, würde ich gleich am Anfang des Scripts abschmettern, so dass erst gar keine PWD-Abfrage kommt, die einen Fehler produziert.

Das wäre für mich nicht nur ein Workaround, sondern die Lösung... weil ich einfach in Frage stelle, ob der mit seinem PWD angemeldete User wirklich noch mal das gleiche PWD eingeben soll... ich würde das für überflüssig halten.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 04.08.2017 23:43:22

TomL hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 22:26:01
Ich glaube, die Quelle des Problems ist nicht das Polkit, auch wenn das Polkit jetzt diesen Effekt zeigt. Das Problem liegt eher bei Debian, weil sich die Entwickler entschlossen haben, sogar bei Stretch immer noch ein Polkit einzusetzen, was schon bei Jessie alt war... und zwar immer noch die Version 0.105.
[...] Egal... das TTY-Problem besteht aktuell in Debian
Hmm... Ich habe mal gerade einen Test auf Fedora 25 gemacht. "pkexec --version" zeigt 0.113 und funktioniert auch nicht auf der Konsole, gleiche Fehlermeldung wie oben. Ebenso funktioniert es nicht auf anderen X Servern.
TomL hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 22:26:01
Allerdings versteh ich nicht,warum Du darauf bestehst, dass der User sein Password eingeben muss... denn Du wirst ihm ja wohl kein root-PWD geben.
Um docker zu starten, braucht der user root-Rechte. Das geht z.B. auf debian mit su und root-Paßwort, und z.B. auf Ubuntu mit sudo und User-Paßwort. Weder su noch sudo funktioniert von Haus aus auf beiden Systemen, nur entweder-oder.
TomL hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 22:26:01
Ich würde die betroffenen User explizit in eine Gruppe (nicht sudo!) eintragen und die Gruppe via Polkit ohne PWD-Abfrage berechtigen. Und alle User, die nicht in der Gruppe enthalten sind, würde ich gleich am Anfang des Scripts abschmettern, so dass erst gar keine PWD-Abfrage kommt, die einen Fehler produziert.
Mein Skript soll auf beliebigen Systemen laufen können. Für gewöhnlich hat der User ein Paßwort, um root-Rechte zu bekommen, entweder für su oder für sudo. (Irgendwelche Firmenarbeitsplätze mal ausgenommen).
Das System erst umzukonfigurieren, damit mein Skript starten kann, kann/will ich von beliebigen Usern nicht verlangen. Ich habe (für mich) den Anspruch, daß Programme "einfach funktionieren" sollen, ohne daß man erst etwas schrauben muß.

Es scheint keine allgemeingültige Lösung für eine Paßwortabfrage zu geben, um root-Rechte zu bekommen.
Ich gehe jetzt nach "Wahrscheinlichkeitsschätzung": Ist der User in Gruppe sudo, darf er wahrscheinlich "sudo docker" ausführen, und ich verwende im Skript sudo.
Ist er nicht in der Gruppe sudo, verwende ich su. Ein möglicher Eintrag in /etc/sudoers für docker kann nicht berücksichtigt werden, ist einfach nicht feststellbar, nicht einmal mit sudo -l.
Außerdem testet das Skript, ob docker ohne Paßwort (einmal mit, einmal ohne sudo) starten kann. Falls ja, gibt es keine Paßwortabfrage.
Damit dürfte ich hoffentlich >95% aller su/sudo-Konfigurationen korrekt einschätzen.
Wo diese allgemeine Einschätzung nicht stimmt, kann der User über eine Option zwischen pkexec/su/sudo/gksu/gksudo/kdesu/kdesudo/lxsu/lxsudo wählen. (Vergleiche xkcd: Standards :wink: )
Damit beherzige ich jetzt auch heisenbergs Empfehlung:
heisenberg hat geschrieben:Wer wenige Kenntnisse hat, der wird in seinem eigenen Interesse eine Mainstream-Distri haben. Wer etwas Extravagantes hat, bei dem kann man etwas mehr Wissen voraussetzen. ( Und wer eine Fortgeschrittenen-Distri als Anfänger benutzt, der hat Pech gehabt, bzw. muss das harte Brot kauen, was er sich selbst vorgesetzt hat. )

Für die Mainstream-Distris kann man Fallunterscheidungen einbauen. Dem Rest kann man zumuten, dass Sie entweder das Skript selbst als root ausführen sollen oder auf Verdacht testweise zwei Abfragen beantworten sollen.
Darüber hinaus arbeite ich an einem Update, in dem das Skript von root gestartet werden darf, und der "echte" unprivilegierte User mit $(logname), $SUDO_USER und $PKEXEC_USER ermittelt wird, damit der die unprivilegierten Befehle ausführt.

Was für ein Aufwand, um einen einzelnen Befehl als root ausführen zu dürfen ... Würde die pkexec-Paßwortabfrage auch außerhalb von DISPLAY=:0 funktionieren, wäre ich sofort ein begeisterter polkit-Fan! Dann könnte ich auf den su/sudo/gksu/gksudo/kdesu/kdesudo/lxsu/lxsudo/$nochmehr-Urwald verzichten.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 04.08.2017 23:59:56

dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von MartinV » 05.08.2017 00:10:34

scientific hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 23:59:56
Erste Antwort:
https://askubuntu.com/questions/477551/ ... thout-sudo
Danke für den Hinweis :).
Mitgliedschaft in Gruppe docker ist gefährlich, auch die erste Antwort in dem Thread zeigt eine dicke Warnung:
Warning: The docker group (or the group specified with -G) is root-equivalent
Trotz der damit verbundenen Risiken gibt es viele, die ihren User der Gruppe docker hinzufügen, um die lästige Paßwortabfrage loszuwerden.
Indem ich teste, ob docker auch ohne Paßwort erfolgreich aufgerufen werden kann, habe ich diesen Fall mit abgedeckt.

Code: Alles auswählen

docker images >/dev/null 2>&1 && echo "docker startet ohne Paßwortabfrage"
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

TomL

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von TomL » 05.08.2017 09:58:00

MartinV hat geschrieben: ↑ zum Beitrag ↑
04.08.2017 23:43:22
Um docker zu starten, braucht der user root-Rechte. Das geht z.B. auf debian mit su und root-Paßwort, und z.B. auf Ubuntu mit sudo und User-Paßwort. Weder su noch sudo funktioniert von Haus aus auf beiden Systemen, nur entweder-oder.
Ich habe das schon beim ersten Mal verstanden. Und NEIN, das root-PWD ist NIE notwendig, sondern nur die Berechtigung, einen Befehl mit root-Rechten auszuführen. Aber ich wiederhole mich jetzt noch mal: Das funktioniert einwandfrei mit pkexec OHNE Eingabe eines Passwords (deshalb ohne, eben weil das auf Konsole offensichtlich fehlerhaft ist) - aber ich halte die PWD-Eingabe hier ohnehin für überflüssig. Die Lösung ist, die Leute in eine Gruppee (NICHT! sudo) einzutragen und die Gruppe via PKLA zu berechtigen. Diese User brauchen für den Start von Docker KEIN root-Password, sondern nur die explizite Berechtigung, diesen Befehl mit root-Rechten auszuführen. Und genau das kann das Polkit mit pkexec perfekt. Die PWD-Abfrage ist außerdem sowieso unnötig, wenn sie eh ihr eigenes PWD eingeben. Und wenn Hinz und Kunz das root-PWD kennt, dann kann man das PWD explizit für diesen Befehl auch einfach komplett deaktivieren.

Ich glaube, Dein Problem ist im Moment eine eigene Blockade... weil ein technisches Problem ist das jedenfalls nicht....

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: su oder sudo - Wie herausfinden, welches geht?

Beitrag von scientific » 05.08.2017 14:24:44

Und das pkla-File kann man in der Installation gleich mitinstallieren.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten