Nem hagyott nyugodni, és végiglépkedtem gdb-vel, hogy hol rontja el az sfcb.
Rövid válasz
Sehol, nem az sfcb hibája. Valami az alap OS beállításokban van elrontva, mert például a login is beenged LaborImag jelszóval. Innentől kezdve a feladat szempontjából ez a hiba nyugodtan figyelmen kívül hagyható.
Hosszú válasz
Az SFCB PAM-ot használ, az végzi el helyette a hitelesítést.
A wbemcli HTTP Basic segítségével küldi át a jelszót. Ha az sfcbd-t így indítjuk:
sfcbd -t 8
Akkor látjuk a HTTP feldolgozó komponensének a trace üzeneteit, és itt látszik a Basic jelszó, valami hasonló sorban:
[1] [04/12/2013 13:28:25] 8095/0xb72da900 --- httpAdapter.c(978) : --- Header: Authorization: Basic bWVyZXM6TGFib3JJbWFnZWU=
Base64 decoder segítségével ellenőrizhető, hogy itt még jó.
Az üzenet feldolgozását a httpAdapter.c végzi, csak hogy ez a feldolgozás során indít minden kéréshez egy új szálat, úgyhogy nem olyan egyszerű debuggerrel csatalkozni hozzá.
Szerencsére van erre beépített cheat:
Sfcb Debugging
Rakjuk fel még az sfcb debug csomagjait:
zypper in sblim-sfcb-debuginfo
zypper in sblim-sfcb-debugsource
Így már akkor gdb-ből látjuk rendesen a forrását és a szimbólumokat.
A következő függvényre érdemes töréspontot elhelyezni, ha már túljutottunk a sleep(5)-ös hack-en:
break baValidate
Annyi még a trükk ezután, hogy a tényleges PAM hívást végző sfcBasicPAMAuthentication.c-ben lévő _sfcBasicAuthenticateRemote függvényt dlopen() segítségével futás közben tölti be, úgyhogy el kell oda lépkedni.
De ha eljutunk oda, akkor sajnos ott jól megy át a jelszó (pw változó), és a pam_auth_mgmt()
hívás is sikeresen lefut, úgyhogy az SFCB nem hibás.
Még a PAM beállításai is jók (/etc/pam.d/sfcb)
auth required pam_succeed_if.so quiet_success user ingroup sfcb
auth required pam_localuser.so
Tehát helyi felhasználónak kell lenni és az sfcb csoportban benne kell lenni, akkor lesz a kérés sikeres.
Persze ezt az egészet felesleges volt végigjátszani, mert ha kipróbálom az elején, hogy a login esetén is beenged rossz jelszóval, akkor világos lett volna, hogy nem az SFCB a hibás:)