Arch Linux Egyéb

SSSD telepítése Active Directory és krb5 beállításával Arch Linuxon

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.

Loading