Autentifikator prikazuje svjež šestocifreni kod, VPN ga odbija, a isti kod se ispravno potvrđuje kada ga testirate iz vlastite školjke. Ta razlika je cijela priča. PAM modul koji ne može otvoriti tajnu upisa vraća grešku koja izgleda identično kao pogrešan kod, a uslužno okruženje koje skriva početne direktorije čest je razlog za to. Prije nego što ublažite bilo koju dozvolu, odlučite u kojoj od tri situacije se nalazite.

Koji je od tri kvara ovo?

Prvi je tajna koju modul uopće ne može pročitati. Drugi je tajna koju može pročitati ali ne ažurirati. Treći je kod koji je zaista pogrešan, obično zbog pomaka sata ili ponovno upotrijebljene vrijednosti.

Razdvojite ih čitanjem uslužnog dnevnika i sistemskog dnevnika autentifikacije za jedan neuspjeli pokušaj, zatim potvrdite koju PAM uslugu učitava dodatak i koji red modula ta usluga koristi. Opća poruka o neuspjeloj autentifikaciji ih ne razlikuje, a ni uspješan ručni test, jer vaša školjka nije okruženje usluge.

Pogled jedinice na datotečni sistem obično je krivac kada samo usluga ne uspijeva.

systemctl show -p ProtectHome -p ProtectSystem -p ReadWritePaths [email protected]
ls -l /var/lib/vpn-otp/*/.google_authenticator 2>/dev/null | head -n 20

Opcija A: premjestite tajnu izvan početnog direktorija

Kada usluga skriva /home a vi radije zadržavate tu zaštitu, pohranite tajnu negdje gdje je može vidjeti. Modul prihvaća putanju secret= i račun user= koji obavlja datotečne operacije, što središnjem spremištu omogućuje da poslužuje mnoge identitete.

Ovo je uredna opcija i ona zahtijeva najviše pažnje, jer zajedničko spremište čini jedan direktorij sigurnosnom granicom za svaki račun.

auth required pam_google_authenticator.so secret=/var/lib/vpn-otp/${USER}/.google_authenticator user=vpn-otp

Provjerite tri stvari prije nego što mu vjerujete: račun postoji, radni proces modula može se na njega prebaciti i datoteke su njegove s restriktivnim načinima. Ne koristite ~ ni putanju s početnom varijablom zajedno s user= i ne isključujte provjere vlasništva modula da biste putanju osposobili. Zadržite fazu lozinke i ostatak steka netaknutima.

Opcija B: ostavite datoteku i otvorite putanju

Ako tajna mora ostati u korisnikovom početnom direktoriju, jedinica treba pogled koji uključuje taj jedan direktorij bez izlaganja svakog početnog direktorija na hostu. Drop-in može dodati usko ograničeno povezivanje ispod sandboxiranog početnog direktorija.

Time se vlasništvo po korisniku zadržava kao model, uz cijenu promjene jedinice koju treba pregledati kad god se sandbox promijeni.

Dvije granice lako se propuštaju. Putanja samo za čitanje dodana ispod direktorija koji sandbox skriva ne izlaže ga, jer roditelja jednostavno nema. A povezivanje mora biti zapisivo ako modul treba ažurirati stanje, što uvodi sljedeću opciju. Napišite drop-in kao zasebnu datoteku umjesto da uređujete pakiranu jedinicu pod /usr/lib, da je nadogradnja paketa ne poništi tiho.

Opcija C: zadržite sandbox i popravite upise stanja

Čitanje tajne samo je pola autentifikacije. Modul može prepisati podatke o vremenskom odmaku, zaštitu od ponavljanja ili brojač, a datoteka koja prođe provjeru čitanja još uvijek može pasti na upisu.

Ta greška izgleda kao loš kod pri sljedećem pokušaju, a ne pri ovom, zbog čega se zamjenjuje s pomakom sata.

Dajte mu vlastiti zapisivi direktorij i usmjerite putanju tajne tamo, umjesto da cijeli početni direktorij učinite zapisivim. Potvrdite vlasnika direktorija, slobodan prostor datotečnog sistema i ograničava li jedinica upise drugdje. Zatim testirajte dvije uzastopne prijave, jer druga dokazuje putanju upisa a prva samo čitanje.

Provjeravajte kao usluga, ne kao vi sami

Svaka važna provjera mora se izvršiti unutar sandboxa jedinice s identitetom jedinice.

Naredba koja uspije kao root kaže vam da datoteka postoji i ništa više. Prijava kroz stvarnu uslugu kaže vam može li modul pročitati tajnu, upotrijebiti je i zapisati natrag ono što mu treba.

Na kraju, zadržite zahtjev netaknutim. Dodavanje opcije prazne lozinke, prihvaćanje kvarova samo za čitanje ili uklanjanje sandboxa sve bi uklonilo simptom promjenom politike. Korisnik koji mora predočiti kod i dalje mora biti odbijen kada je tajna nedostupna.

Povezani članci