Vjerodajnice prolaze, tunel počinje da se diže, a onda sesija pada s porukom o grupi, a ne o lozinki. Ta kombinacija smješta kvar u drugu polovinu rada LDAP dodatka: vezivanje i provjera lozinke su uspjeli, a odluka o članstvu koja slijedi nije. Obje polovine čitaju iz istog konfiguracionog bloka, zato popravka na jednom mjestu može ostaviti drugu netaknutom. Počnite od linije u dnevniku koja imenuje korak, a ne od računa s kojim slučajno testirate.

Tretirajte odbijanje kao odgovor o autorizaciji

Dodatak obavlja servisno vezivanje, traži račun, provjerava dostavljenu lozinku i zatim pita pripada li taj račun dozvoljenoj grupi. To su četiri odvojene operacije i samo se posljednja odnosi na grupe. Zato odbijanje koje stigne nakon uspješnog vezivanja ne govori ništa o lozinki, čak i kada klijent prikaže opštu grešku autentifikacije. Podizanje nivoa dnevnika dodatka prije promjene konfiguracije je ono što razdvaja te četiri u izlazu.

Potražite samu procjenu grupe. Kada se nikakav upit o grupi uopšte ne pojavi, blok autorizacije se ne dostiže, što obično znači da direktiva stoji izvan bloka koji je posjeduje ili da nedostaje obavezna opcija. Kada se upit pojavi i ne vrati ništa, krajnja točka ili filtar odgovara na drugo pitanje od onoga koje ste mislili.

Odlučite živi li članstvo u filtru ili u bloku grupe

Postoje dva podržana oblika i njihovo miješanje je način na koji radna konfiguracija prestaje raditi. Prvi gura članstvo u pretragu korisnika tražeći atribut na korisničkom objektu; drugi ostavlja pretragu korisnika na miru i pušta dodatak da naknadno potraži objekt grupe. Odaberite jedan po implementaciji i zapišite koji ste odabrali.

<Authorization>
    BaseDN       "OU=People,DC=example,DC=org"
    SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=VPN Access,OU=Groups,DC=example,DC=org))"
    RequireGroup false
</Authorization>

S tim oblikom filtar odlučuje o svemu, pa RequireGroup mora biti false, inače dodatak krene tražiti objekt grupe koji filtar nikada nije spomenuo. Atribut u filtru mora postojati na korisničkom objektu i biti popunjen, što nije zagarantovano kada se grupe ugnijezde.

Drugi oblik drži pretragu jednostavnom i dodaje traženje grupe nakon nje. Objekt grupe se imenuje izričito i dodatak poredi korisnika s članovima koje direktorij vraća za tu grupu. Ništa se u korisničkom filtru ne mijenja, što ovaj oblik čini lakšim za reviziju kada grupom upravlja drugi tim.

<Authorization>
    BaseDN       "OU=People,DC=example,DC=org"
    SearchFilter "(sAMAccountName=%u)"
    RequireGroup true
    Group        "CN=VPN Access,OU=Groups,DC=example,DC=org"
</Authorization>

Slijepa točka je zajednička: obično poređenje članstva ne razvija ugniježđene grupe, pa račun čiji pristup dolazi kroz nadređenu grupu pada dok konzola još pokazuje članstvo. Active Directory izlaže member na grupi, druge šeme koriste uniqueMember, a pokazivanje na pogrešan atribut vraća prazan rezultat umjesto greške.

Odaberite krajnju točku koja drži objekt grupe

URL odlučuje koji direktorij dodatak pita, a kontroler domene na portu 389 odgovara samo za svoj vlastiti kontekst imena. Globalni katalog na portu 3268 odgovara za cijelu šumu, samo za čitanje i s djelimičnim skupom atributa. Kada računi stoje u jednoj domeni a VPN grupa u drugoj, upit na jednu domenu može naći korisnika i ipak promašiti članstvo. To je slučaj u kojem premještanje URL-a na port kataloga rješava odbijanje, a to je i slučaj u kojem ljudi pretjerano generalizuju.

Djelimični skup atributa je granica: atribut koji katalog ne drži ne može se filtrirati, pa ista promjena može učiniti da jedna implementacija radi a druga vraća ništa. Potvrdite šta krajnja točka zaista vraća za stvarnog korisnika i grupu prije nego što prepišete blok. Preporuke i TLS su opet odvojene stvari, jer preporuku treba slijediti, a krajnja točka koja zahtijeva TLS treba odgovarajuće datoteke povjerenja.

Držite stanje računa i obim pretrage u njihovim poljima

Zastavica deaktivacije pripada filtru, ne provjeri grupe. U Active Directory to je drugi bit userAccountControl, a bez tog uslova deaktiviran račun s važećom lozinkom se autentifikuje i zatim pada na koraku grupe, što izgleda kao greška u autorizaciji. Obim pretrage pripada osnovnom DN-u, jer početak od korijena domene je sporiji i može pogoditi objekte izvan organizacione jedinice koju ste namjeravali pokriti.

Držite i prava računa za vezivanje uska. Široka prava u direktoriju pretvaraju pogrešno konfigurisan filtar u uspješan upit i skrivaju grešku dok neko ne revidira račun. Mijenjajte članstvo u samom direktoriju, nikada u lokalnoj listi izuzetaka, tako da deaktivacija računa bude dovoljna za uklanjanje pristupa. Ako grupom upravlja drugi tim, dogovorite atribut koji oni popunjavaju prije nego što napišete filtar prema njemu.

Dokažite rezultat s tri računa

Pokrenite konfiguraciju na tri identiteta: dozvoljeni član, važeći račun izvan grupe i račun koji je deaktiviran. Ako su sva tri odbijena, vezivanje ili upit o grupi je pokvaren; ako su sva tri prihvaćena, nikakav uslov grupe se uopšte ne primjenjuje. Mješoviti rezultat je jedini ishod koji dokazuje da konfiguracija razlikuje slučajeve koji su vam važni.

Pročitajte ista tri odgovora direktno iz direktorija prije nego što okrivite dodatak. Prvi upit pokazuje atribut grupe od kojeg filtar zavisi, a drugi pokazuje vrijednost kontrole računa. Zamijenite svojim osnovnim DN-om, računom i krajnjom točkom:

ldapsearch -H ldap://dc01.example.org:3268 -x -D "[email protected]" -W -b "DC=example,DC=org" "(sAMAccountName=alice)" memberOf
ldapsearch -H ldap://dc01.example.org:3268 -x -D "[email protected]" -W -b "DC=example,DC=org" "(sAMAccountName=bob)" userAccountControl

Korisnik čiji memberOf se vraća prazan je činjenica iz direktorija, ne greška dodatka, a račun koji se i nakon deaktivacije autentifikuje znači da filtru nedostaje uslov kontrole računa. Popravite taj dokaz prvo, pa ponovo pokrenite test s tri računa. Držite liniju dnevnika koja je imenovala neuspjeli korak uz promjenu konfiguracije, kako bi sljedeća osoba mogla razdvojiti autorizaciju od autentifikacije bez ponavljanja pretrage.

Povezani članci