Sziasztok!
Szórakoztam ma a google-authenticator nevű csomaggal. Sikerült konfigurálni a /etc/pam.d/ssh-d úgy, hogy a "keyboard-interactive" metódus bekérje a jelszót és a google auth kulcsot is. Valahogy így:
auth required pam_unix.so no_warn try_first_pass
auth required /usr/local/lib/pam_google_authenticator.so
Ezek után, ha a /etc/ssh/sshd_config-ba ezt teszem:
Match User someuser
AuthenticationMethods keyboard-interactive
Akkor bekéri a jelszót és a google auth kódot is. Namost én azon gondolkozom, hogy a wheel csoportban levő (su -zni képes) felhasználóknál kérek be ssh kulcsot, jelszót és google auth kódot is. Ezt így lehetne elérni:
Match User someuser
AuthenticationMethods publickey,keyboard-interactive
Viszont azt is szeretném, ha a "sima" felhasználók ssh kulcs + google auth key megadásával tudnának bemenni. Jelszó nélkül. (Tudom hogy ez nem jó ötlet, de tegyük föl hogy ezt szeretném.) Namármost, az ssh config-ban vagy megadom a keyboard-interactive-ot, vagy nem adom meg. Ha megadom, akkor a jelszót is be kell írni, ha nem akkor meg a google auth kódot se kell beírni.
Nyilván ha a pam.d-ből kiszedem a pam_unix.so sort, akkor a jelszót nem kell beírni - de ez sajnos nem egy felhasználóra vonatkozik, hanem az összesre.
Nekem olyan megoldás kellene, ami egy adott user-re mindent bekér (ssh kulcs, jelszó, google auth key), egy másik adott user-re pedig csak ssh kulcs + google auth kódot.
Lehetséges ez?
- 1470 megtekintés
Hozzászólások
Vagy ha ez nem megy, akkor legalább azt szeretném elérni, hogy a su parancsnál /etc/pam.d/su állományban elő tudjam írni a google auth kód ellenőrzését a "root" user-re. De sajnos ezt sem tudom. Az a legnagyobb gond, hogy például a "su" parancs ugyan azt a policy-t írja elő minden user-re. Valami olyasmi kellene nekem, hogy ha a user = root, akkor a végére betegyen még egy auth module-t. De sehol nem találtam ilyet.
A rendszer alapértelmezett config állományban van ugyan egy ilyen:
auth requisite pam_group.so no_warn group=wheel root_only fail_safe ruser
és ez olyan, mintha root_only -ra működne, de ez a pam_group.so modul egy option-ja. A pam.d(5) manual szerint:
MODULE OPTIONS
Some PAM library functions may alter their behavior when called by a ser-
vice module if certain module options were specified, regardless of
whether the module itself accords them any importance. One such option
is debug, which causes the dispatcher to enable debugging messages before
calling each service function, and disable them afterwards (unless they
were already enabled). Other special options include:
De konkrétan a pam_google_authenticator.so modulhoz semmi ilyesmit nem találtam. Itt van a modul leírása:
https://github.com/google/google-authenticator/tree/master/libpam
Az egyedüli user-re vonatkozó beállítás azt mondja meg, hogy hol tárolja a kulcsokat a szerver.
- A hozzászóláshoz be kell jelentkezni
lehet csinalni tobb match blockot sshd configban
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
A több match blokk nem segít. Mert a match blokkon belül vagy bekapcsolom a keyboard-interactive-ot, vagy kikapcsolom. De nincs olyan opció, hogy "keyboard-interactive"-on belül kérje/ne kérje be a jelszót.
- A hozzászóláshoz be kell jelentkezni
Tipp: csinálsz egy file-t, ami soronként listázza azokat a csoportokat, akik számára megköveteled a google auth-ot, majd a google authenticator-os sor elé:
auth sufficient pam_listfile.so item=group sense=deny onerr=??? file=/etc/csoportok
- A hozzászóláshoz be kell jelentkezni
Ez FreeBSD, és ott nincs pam_listfile. (Vagy legalábbis én nem találtam.) Egyébként ez jónak tűnik.
- A hozzászóláshoz be kell jelentkezni
Van viszont pam_group, de azzal sem tudom megcsinálni. Itt a manual:
https://www.freebsd.org/cgi/man.cgi?query=pam_group&sektion=8&manpath=f…
A probléma az, hogy a "scufficient" úgy működik ahogy:
sufficient If this module succeeds, the chain is broken and the result
is success. If it fails, the rest of the chain still runs,
but the final result will be failure unless a later module
succeeds.
Ez azt jelenti, hogy ha a teszt sikeres, akkor a következő auth modul (google auth) le sem fut. Ha pedig sikertelen, akkor a google auth is lefut, de teljesen mindegy hogy milyen eredménnyel, mert úgysem fog beengedni. A "sikertelen" ág nekem nem jó! :-(
- A hozzászóláshoz be kell jelentkezni
"unless a later module succeeds" - vagy mégis, csak nem olvastam el rendesen :-p
Szóval ez lenne az ideális:
auth sufficient pam_user.so target=non_root
auth required /usr/local/pam_google_authenticator.so
A pam_user.so sikeres lenne, ha a cél user nem root. Ha viszont root, akkor a következő modullal folytatná.
pam_user.so sem létezik FreeBSD alatt. A pam_group-nál pedig azt lehetne megadni, hogy "group=wheel". De olyat nem lehet megadni, hogy "not wheel".
- A hozzászóláshoz be kell jelentkezni
"A pam_group-nál pedig azt lehetne megadni, hogy "group=wheel". De olyat nem lehet megadni, hogy "not wheel"."
deny
Reverse the meaning of the test, i.e., reject the applicant if
and only if he or she is a member of the specified group.
This can be useful to exclude certain groups of users from
certain services.
- A hozzászóláshoz be kell jelentkezni
Igen, közben én is rájöttem. De sajnos ez sem használható még mindig, mivel a pam_group az csak csoportot tud ellenőrizni. Nekem meg az kellene, hogy a target user "nem root".
- A hozzászóláshoz be kell jelentkezni
Akkor a pam_exec lehet a megoldás.
http://blather.michaelwlucas.com/archives/2573
Nos, nem egészen értem hogy milyen megfontolásból került bele a FreeBSD alap PAM moduljai közé a pam_exec úgy, hogy a pam_listfile meg hiányzik? Tök jó lenne ha nem kellene programokat írni ahhoz, hogy ilyen egyszerű dolgot be lehessen állítani.
- A hozzászóláshoz be kell jelentkezni
SIKER!!!!
/usr/sbin/pam_not_root.sh -be:
#!/bin/sh
if [ $PAM_USER != "root" ]
then
exit 0
else
exit 1
fi
Utolsó auth sor /etc/pam.d/su és etc/pam.d/login -be:
auth include system
Utolsó két sor /etc/pam.d/system -be:
# google auth
auth sufficient pam_exec.so /usr/sbin/pam_not_root.sh
auth required /usr/local/lib/pam_google_authenticator.so
A shell script a PAM_USER környezeti változóban megkapja a cél user nevét, és ha az nem root, akkor a visszatérési értéke 1. Ennek hatására a chain megszakad, és sikeres a bejelentkezés. Ha viszont root, akkor a visszatérési érték nulla, és a pam_google_authenticator-nak is sikeresnek KELL lennie. Jobb lett volna a pam_listfiles.so. de az nincs FreeBSD-ben. Hát ez van!
Köszönöm a segítséget!
- A hozzászóláshoz be kell jelentkezni