Az SSSD a System Security Services Daemon rövidítése. Elsődleges célja az, hogy egy keretrendszeren keresztül hozzáférést és autentikációs, hitelesítési megoldást adjon távoli erőforrásokon található személyazonosságokhoz cache és offline állapot támogatással.
Az SSSD PAM és NSS modulokat is biztosít (illetve D-BUS alapú felületet is a későbbiekben), míg a háttérben számos backend támogatja a különböző rendszerek elérhetőségét. A backendek tárolják az identitásokat és egyéb adatokat. A backend nevet Én akasztottam rá, egyébként authentication provider-nek hívják. Backendek a teljesség igénye nélkül:
- LDAP
- Windows Active Directory (AD)
- FreeIPA
- krb5
- local SSSD
- proxy
Azt nem mondanám, hogy a téma zsebemben van, így elképzelhető, hogy egy-két részlet nem teljes, következetlen, vagy más rendszereken (pl. Ubuntu) nem teljes mértékben használható. A krb5 például teljesen felesleges (csak szerverek között az Active Directory is, elég lenne az LDAP), de korábban még ezzel alakítottam ki a rendszereket, és nem volt időm foglalkozni a krb5 nélküliséggel.
A leírás során azt feltételezem, hogy van már egy beállított Samba 4 vagy Windows AD rendszered unixos felhasználókkal és csoportokkal.
Az SSSD telepítése rém egyszerű:
pacman -Sy sssd
Amennyiben nem létezik az /etc/sssd/sssd.conf fájl, hozd létre az alábbi tartalommal:
[sssd] services = nss, pam, sudo, ssh domains = domain.tld #debug_level = 9 [nss] [pam] [domain/domain.tld] #debug_level = 9 cache_credentials = true krb5_store_password_if_offline = true id_provider = ad access_provider = ad auth_provider = ad krb5_keytab=/etc/krb5.keytab krb5_realm = DOMAIN.TLD ldap_id_mapping = false #fallback_homedir = /home/%u #default_shell = /bin/bash enumerate = true
A domain.tld tartomány egy példa tartomány, Neked le kell cserélned a sajátodéra. Az sssd.conf fájlt csak a root írhatja és olvashatja (0600).
Az /etc/krb5.conf fájlban az alábbiakat állítsd be:
[libdefaults] default_realm = DOMAIN.TLD dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 1d forwardable = true proxiable = true [realms] DOMAIN.TLD = { kdc = domain.tld admin_server = domain.tld default_domain = domain.tld } [domain_realm] .domain.tld = DOMAIN.TLD domain.tld = DOMAIN.TLD # domain = DOMAIN.TLD [appdefaults] pam = { ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = 10000 debug = false } [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/kdc.log admin_server = FILE:/var/log/kadmind.log
A domain.tld tartomány szintén lecserélendő a saját tartományoddal. A kdc és admin_server értéke a valós szerver legyen ne a tartomány neve. Ha samba-t használsz, akkor annak a neve, ha pedig ténylegesen Windows AD-hoz akarsz csatlakozni, akkor azét. Előfordulhat, hogy megegyezik a tartomány nevével, de általában külön aldomaint kap, mivel a domain controller szokta ezt a funkciót ellátni (pl. ad.domain.tld, pdc.domain.tld, kdc.domain.tld, stb).
Exportáld ki a krb5 machine keytab fájlt a samba vagy AD szerveren. Samba esetében:
net ads keytab create -U Administrator
Az Administrator nevű user a Te rendszeredben más is lehet, erre figyelj oda. Ha esetleg egy másik gépeden már megvan a keytab fájl, akkor csak másold át. A keytab fájlt csak a root írhatja és olvashatja (0600).
/etc/nssswitch.conf módosítása:
# Begin /etc/nsswitch.conf passwd: files sss group: files sss shadow: files sss sudoers: files sss publickey: files hosts: files dns myhostname networks: files protocols: files services: files ethers: files rpc: files netgroup: files # End /etc/nsswitch.conf
Ebben tulajdonképpen felvettük az sss értéket, illetve a sudoers teljes sort.
Az /etc/nscd.conf fájlban kapcsoljuk ki a rendszer cache funkcióját userek és groupok tekintetében. A módosítandó rekordok:
enable-cache passwd no enable-cache group no
Létrehozzuk az /etc/pam.d/sss fájlt az alábbi tartalommal:
auth sufficient pam_unix.so nullok try_first_pass auth sufficient pam_sss.so use_first_pass auth required pam_deny.so account required pam_unix.so #account [default=bad success=ok user_unknown=ignore] pam_sss.so account optional pam_sss.so password requisite pam_cracklib.so try_first_pass retry=3 minlen=8 dcredit=0 ucredit=0 ocredit=0 lcredit=0 type= password sufficient pam_unix.so try_first_pass nullok sha512 shadow password sufficient pam_sss.so use_authtok password required pam_deny.so session required pam_mkhomedir.so skel=/etc/skel umask=0077 session required pam_unix.so session optional pam_sss.so
Szintén létrehozzuk a /etc/pam.d/sssd-shadowutils fájlt (az sssd telepítése után valószínűleg már létezik):
#%PAM-1.0 auth [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass auth required pam_deny.so account required pam_unix.so account required pam_permit.so
Az /etc/pam.d könyvtárban az alábbi fájlokat módosítjuk:
/etc/pam.d/passwd
#%PAM-1.0 password include sss
/etc/pam.d/su
#%PAM-1.0 auth sufficient pam_rootok.so auth include sss account include sss session include sss
/etc/pam.d/su-l
#%PAM-1.0 auth sufficient pam_rootok.so auth include sss account include sss session include sss
/etc/pam.d/system-auth
#%PAM-1.0 auth include sss auth required pam_unix.so try_first_pass nullok auth optional pam_permit.so auth required pam_env.so account include sss account required pam_unix.so account optional pam_permit.so account required pam_time.so password include sss #password required pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so session required pam_limits.so session include sss session required pam_unix.so session optional pam_permit.so
Elméletileg az összes szükséges elem megvan, csupán a szolgáltatásokat kell elindítani vagy újra indítani:
systemctl restart nscd systemctl enable sssd systemctl start sssd
Ezután a teszt, például felhasználók listázása. Ebben már meg kell jelennie az AD-ban lévő felhasználóknak is:
getent passwd vagy getent passwd username
A csoportok hasonlóképpen működnek:
getent group vagy getent group groupname
Amit még ne felejts el: /etc/sudoers fájl szerkesztése felhasználók és/vagy csoportok jogosultság beállításának érdekében. Nem kötelező, de általában szoktuk.