Komunikace LDAP - Linux - nastavení práv LDAPu a chyba v systému na klientovi

PK

Doufám, že někdo zkušenější příjde na to kde je chyba.
Mám několik serverů, na jednom z nich běží LDAP s těmito přístupovými právy na databázi:
olcAccess: {0}to attrs=userPassword
 by self write
 by anonymous auth
 by dn="cn=autorizator,dc=A,dc=B" auth
 by * none
olcAccess: {1}to attrs=entry
 by self write
 by users read
 by * auth
olcAccess: {2}to attrs=sambaLMPassword,sambaNTPassword
 by self write
 by * none
olcAccess: {3}to attrs=gidNumber,uidNumber,homeDirectory,loginShell,cn,sn,givenName,initials,sambaAcctFlags,sambaSID
  by users read
  by * none
olcAccess: {4}to *
 by self write
 by users read
 by * auth

Účet autorizator je jen od toho, aby ověřil uživatele, jinak nic nemůže. Tento účet používáme pro starší linuxy (SLES10). V novějších (Centos 7.0, SLES12) je autentizace řešená přes sssd a anonymní přístup.

Při autorizaci přes uživatele autorizator všechno funguje, změna v LDAP databázi se okamžitě promítne. Pokud ale se budu hlásit anonymně, což je klasické nastavení sssd, tak kupříkladu příkaz getent passwd <jméno> přestane fungovat.
1) Takže první otázka, je nějaké bezpečné nastavení práv v LDAPu které by mi umožnilo hlásit se anonymně a přesto se přihlásit do systému přes LDAP, nebo je nutné vždy přistupovat přes účet (autorizator)? Jak bych musel přístupové práva upravit?

2) Horší problém, něco je špatně a na serveru s Centos 7, kde testuju připojení přes sssd, dřív přihlašování do Linuxu fungovalo, ale přestalo, nevím proč - a zrušení přístupových práv na LDAP databázi a nastavení čtení pro všechny atributy nepomohlo.
První věc - když sleduju logy z LDAPu, tak při hlášení do systému, případně testu přes příkaz getent passwd <jméno> se často neptá LDAPu - žádná aktivita v logu. Pokusy flushnout cache pro sssd a nscd neprošly:

getent passwd jmeno
  jmeno:*:1000:1000:moje jmeno:/home/jmeno:/bin/bash
sss_cache -E
nscd --invalidate netgroup hosts group passwd services
systemctl stop nscd
systemctl start nscd
systemctl stop sssd
systemctl start sssd
getent passwd jmeno
  jmeno:*:1000:1000:moje jmeno:/home/jmeno:/bin/bash

Vtip je v tom, že já už dlouho mám změněný gid uživatele na jinou hodnotu než zobrazuje, takže je to zjevně z nějaké cache. ldapsearch z LDAP serveru i getent z jiného linuxu korektně zobrazí novou hodnotu. Nicméně někdy se do LDAPové databáze připojí, takže vím že spojení jako takové funguje a naváže komunikaci, ale ani tehdy nezobrazí správné údaje. Toto je log LDAPu co se týče přihlášení:
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 fd=20 ACCEPT from IP=10.0.0.10:33978 (IP=0.0.0.0:389)
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=0 EXT oid=1.3.6.1.4.1.1466.20037
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=0 STARTTLS
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=0 RESULT oid= err=0 text=
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 fd=20 TLS established tls_ssf=256 ssf=256
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=1 SRCH base="" scope=0 deref=0 filter="(objectClass=*)"
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=1 SRCH attr=* altServer namingContexts supportedControl supportedExtension supportedFeatures supportedLDAPVersion supportedSASLMechanisms domainControllerFunctionality defaultNamingContext lastUSN highestCommittedUSN
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 op=2 UNBIND
Jul 18 15:49:29 LDAPSERVER slapd[2024]: conn=2782 fd=20 closed

Nikde dotaz na jméno uživatele, base je "" místo dc=A,dc=B, ani zmínka o uživateli autorizator. Když se zeptám na jméno uživatele, kterého jsem dřív nepoužíval, tak nedostanu výsledek - nic překvapivého.

Ještě výpis sssd.conf:
cat /etc/sssd/sssd.conf
[domain/default]

autofs_provider = ldap
cache_credentials = False
ldap_search_base = dc=A,dc=B
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://LDAPSERVER.ukazka.com/
ldap_tls_cacertdir = /etc/openldap/cacerts
ldap_tls_reqcert = never
ldap_id_use_start_tls = True
ldap_default_authlok_type = password
ldap_default_bind_dn = cn=autorizator,dc=A,dc=B
ldap_default_authlok = heslo
[sssd]
services = nss, pam, autofs

domains = default
[nss]
homedir_substring = /home

[pam]

[sudo]

[autofs]

[ssh]

[pac]

[ifp]

Čím to může být způsobené a jak to opravit?


PK

Tak nakonec stačil další pár očí a chyba je jasná - na dvou řádcích v konfiguraci sssd.conf je špatné písmeno.
ldap_default_authlok_type = password má být ldap_default_authtok_type = password (v pojmenování authlok místo authtok)
ldap_default_authlok = heslo - stejná chyba, vyměnit "el" za "té". :)
Drobnost, ale fatální.