Re: i3lock PAM Problem?

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Mon, 5 Aug 2013 10:08:13 +0200 (CEST)

Gerhard Brauer wrote:
> Für PAM system statt login einzubinden funktioniert, setuid
> vorrausgesetzt. Genaugenommen reicht pam_unix als required für den
> Screensaver aus (wenn man kein Opie/Kerberos/etc verwendet).

Ja. Wobei "system" halt allgemeiner ist und alle gängigen
Authentisierungsarten unterstützt. Ich persönlich verwende
z.B. OPIE, wenn ich unterwegs bin und an einem "unsicheren"
PC hocke (z.B. in einem Internetcafe). Dort sollte man es
tunlichst vermeiden, sich per Passwort zu authentisieren.

OK, beim Screen-Lock am eigenen PC brauche ich natürlich
kein OPIE, aber es mag Sites geben, wo Kerberos verwendet
wird, oder wo eine Authentisierung per Smartcard passiert,
per Retina-Scanner oder sonstwas. Sowas würde man dann in
der "system"-Konfiguration hinzufügen, daher ergibt es
Sinn, diese auch für die Freigabe von Screen-Locks zu
verwenden.

> Ist das so richtig: Einem Programm, welches libpam-Funktionen
> verwendet, wird durch pam_self im Modus sufficent ohne weiter
> Prüfung die Authentifizierung ermöglicht wenn das aufrufende
> Programm unter der (effektiven) UID des zu authentifizierenden Users
> läuft? Das klingt für mich erstmal nicht so "sicher"...

Inwiefern? In welcher Situation würde das zu einem Problem
führen?

> Kennst Du andere nützliche/notwendige Vorteile für dieses Modul
> abseits der (Shell)-Login-Spielerei, also warum dies in
> /e/pam.d/login überhaupt drin ist?

Mal umgekehrt gefragt: Was ist daran _nicht_ sinnvoll,
wenn man als der Benutzer authentisiert werden soll, der
man ohnehin schon ist? Ich find's z.B. sehr praktisch,
dass ich das Passwort nicht erneut eingeben muss, wenn
ich ein su auf denselben User mache (bzw. wenn ein Skript
dies machen will). Ja, das kommt vor.

> Für den Port werde ich mich an einem "Patch" versuchen ;-) und einen
> Bugreport schreiben, oder zumindest den Maintainer kontaktieren.

"send-pr" würde ich auf jeden Fall empfehlen (der Maintainer
erhält automatisch eine Benachrichtigung). Dann ist der
Patch erstmal in der Datenbank und geht nicht verloren,
und falls der Maintainer nicht reagiert oder keine Zeit
hat, kann sich ein anderer darum kümmern und sieht sofort
in der PR-History, wie weit die Sache gediehen ist.

> Zu setuid nochmal (ich werde auch selbst suchen, aber evtl. kannst
> du das schnell (er)klären):
> Unter Linux gibt es durch die Kernel-CAPabilities die Möglichkeit,
> Programme wie z.B. ping nicht mehr setuid setzen zu müssen, sondern
> ihnen stattdessen benötigte (Root-)Rechte eben speziell anhand der
> Funktionalität (hier dann net_raw für TCP-Stack/Netzdevice)
> zuzuteilen. Gibt es unter FreeBSD vergleichbares, evtl. über MAC?

Ja, theoretisch könnte man sowas per MAC implementieren.

Im Falle von ping(8) ist das aber nicht wirklich notwendig.
Wie man sich im Source (siehe src/sbin/ping/ping.c) selbst
überzeugen kann, ist das allererste, was gemacht wird, den
Raw-Socket zu öffnen (in der main()-Funktion):

        s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

Da dies das einzige ist, wofür root-Privilegien benötigt
werden, werden selbige unmittelbar danach "fallengelassen":

        setuid(getuid());

getuid() liefert die Real-UID, und setuid() setzt u.a. die
Effective-UID. Das bedeutet, dass der gesamte Rest des
Programms wieder als der aufrufende User läuft, nicht mehr
mit root-Rechten. Das sieht man auch in der Ausgabe von
ps(1).

Daher ist das setuid-Bit im Falle von ping(8) unkritisch.

Generell verhalten sich Programme, die dafür vorgesehen
sind, mit setuid- oder setgid-Bit zu laufen, so, dass die
speziellen Rechte nur für die Teile verwendet werden, die
diese Rechte tatsächlich benötigen. In komplexeren Fällen
bedient man sich der sogenannten "Privilege Separation",
d.h. die Dinge, die besondere Rechte erfordern, werden in
einen separaten Prozess ausgelagert.

> Ich habe das Handbuch zu MAC zur mal grob überflogen. Könnte man bei
> ping unter BSD auf setuid verzichtet?

Das MAC-Framework gibt das theoretisch her, aber man müsste
es erstmal implementieren; bisher ist das nicht vorgesehen.
Aus o.g. Grund ("Fallenlassen" der root-Rechte gleich zu
Beginn) dürfte sich der Aufwand bei ping kaum rentieren.

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG,  Marktplatz 29, 85567 Grafing
Handelsregister:  Amtsgericht Muenchen, HRA 74606, Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsreg.: Amtsgericht München,
HRB 125758, Geschäftsführer:  Maik Bachmann,  Olaf Erb,  Ralf Gebhart
FreeBSD-Dienstleistungen/-Produkte + mehr: http://www.secnetix.de/bsd
"Being really good at C++ is like being really good
at using rocks to sharpen sticks."
        -- Thant Tessman
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 05 Aug 2013 - 10:08:25 CEST

search this site