Benutzer, die an der Konsole einer grafischen Workstation arbeiten, haben festgestellt, dass mehrere Programme ausgeführt werden können, ohne dass anscheinend eine Root-Authentifizierung oder ein Passwort wie Neustart erforderlich sind. Dieser Prozess beinhaltet den geschickten Einsatz des SUID-Programms /usr/sbin/userhelper
in einem breiteren Kontext angewendet als ursprünglich vorgesehen.
Der grafische Benutzer führt ein zwischengeschaltetes Alias-Programm /usr/bin/consolehelper
aus das Aktionen basierend auf einer bestimmten PAM-Konfiguration (Programmable Authentication Modules) autorisiert und dann den Befehl an ein SUID-Programm sendet, um das Benutzerprogramm mit Privilegien auszuführen. Wenn der Benutzer keine entsprechende Berechtigung hat, wird das angeforderte Programm unter der Linux-Umgebung des Benutzers ausgeführt.
Wie derzeit bereitgestellt, enthält die erforderliche PAM-Konfigurationsdatei für den Neustart Überprüfungen, ob der Benutzer an der Konsole angemeldet ist oder derzeit in der Root-Umgebung ausgeführt wird, um Kennwortanforderungen zu verhindern.
Es verwendet udisks. (FUSE wird jedoch im Fall von Netzwerkdateisystemen verwendet). Befehlszeilenschnittstellen zu udisks stehen für Ihre Experimente zur Verfügung. In neueren Versionen wird es mit der Befehlszeilenschnittstelle udisksctl
geliefert .
udisksd
läuft als root und akzeptiert die Benutzeranfragen über D-Bus.
udisksd
verwendet PolicyKit PolKit entscheidet, welche Anfragen zulässig sind. Einige erfordern möglicherweise zusätzliche Berechtigungen, z. Interne Laufwerke formatieren. Dies kann einen zusätzlichen Authentifizierungsschritt beinhalten – ähnlich der Windows UAC-Eingabeaufforderung oder sudo auf der Befehlszeile. Ich weiß nicht genau, wie die zusätzliche Authentifizierung koordiniert wird.
Anfragen über D-Bus werden derzeit unter Verwendung von Unix-Sockets unter Verwendung von SCM_CREDENTIALS gemacht, was den Prozess identifiziert, der die Anfrage stellt.
Einer der Entscheidungsfaktoren ist, ob der Benutzer lokal oder über das Netzwerk angemeldet ist (z. B. ssh
). Ich glaube, diese Informationen werden von systemd-logind
bereitgestellt (in Verschwörung mit pam-systemd
).