Fakultní autentizace na stroji v síti FI

Autentizaci pomocí fakultního účtu můžete zpřístupnit na vlastním stroji pomocí protokolů Lightweight Directory Access Protocol (LDAP) a Kerberos.

Pokud spravujete oficiální službu, vůči které se autentizují fakultní účty, nebo chcete tuto službu autentizovat vůči jiné službě, podporujeme vydávání kerberovských principálů (tvaru service/hostname.fi.muni.cz) a jejich zpřístupnění ve formě keytabů. Pro více informací kontaktujte unix@fi.muni.cz.

Níže uvedený návod je cílený na unixové OS, konkrétně pak na linuxovou distribuci Ubuntu 18.04 LTS. Postup pro ostatní distribuce a OS se může lišit.

Obecné informace

Protokol Lightweight Directory Access Protocol (LDAP) je dostupný v síti FI a poskytuje informace o jednotlivých uživatelích a uživatelských skupinách. Výpustka () ve výstupu značí vynechaný text (zde i v dalších příkladech tohoto textu):

$ ldapsearch -H ldap://ldap.fi.muni.cz/ -b ou=People,dc=fi,dc=muni,dc=cz cn=xlogin -x
# xlogin, People, fi.muni.cz
dn: uid=xlogin,ou=People,dc=fi,dc=muni,dc=cz
uid: xlogin
cn: xlogin
objectClass: account
objectClass: posixAccount
userPassword:: e1NBU0x9bXl4bG9naW5ARkkuTVVOSS5DWg==
loginShell: /bin/bash
uidNumber: 12345
gidNumber: 10100
homeDirectory: /home/xlogin
gecos: Honza Login
host: aisa
host: anxur
$ ldapsearch -H ldap://ldap.fi.muni.cz/ -b ou=Group,dc=fi,dc=muni,dc=cz cn=student -x
# student, Group, fi.muni.cz
dn: cn=student,ou=Group,dc=fi,dc=muni,dc=cz
objectClass: posixGroup
objectClass: top
cn: student
gidNumber: 10100
memberUid: xlogin1
memberUid: xlogin2
…

Tyto informace je možné následně použít jako další zdroj unixových tabulek uživatelů a skupin pomocí frameworku Name Service Switch (NSS). Toto mimo jiné umožňuje sdílet souborové systémy napříč unixovými stroji.

Protokol Kerberos je rovněž dostupný v síti FI a dovoluje se autentizovat vůči fakultním uživatelským účtům pomocí fakultního hesla prostřednictvím frameworku Pluggable Authentication Modules (PAM). Toto umožňuje jednotné přihlašování na fakultních unixových strojích.

Lightweight Directory Access Protocol

Protokol LDAP je využíván modulem Name Service Switch (NSS) ve spojení s kešovacím démonem NSCD, který snižuje odezvu a zátěž sítě. V repozitářích Ubuntu jsou oba projekty dostupné v balíčcích nscd a libnss-ldap:

# apt install nscd libnss-ldap

Následně je třeba stáhnout certifikát pro šifrované spojení s LDAP servery:

$ wget https://fadmin.fi.muni.cz/cacert/FI_CA.crt
# openssl x509 -in FI_CA.crt -out /etc/openldap/certs/FI_CA.pem -inform DER -outform PEM
# chmod u=rw,g=r,o=r /etc/openldap/certs/FI_CA.pem
# chown root:root /etc/openldap/certs/FI_CA.pem

Následuje konfigurace LDAP NSS modulu:

$ cat /etc/ldap.conf
base dc=fi,dc=muni,dc=cz
uri ldaps://ldap1.fi.muni.cz ldaps://ldap.fi.muni.cz
nss_base_passwd ou=People,dc=fi,dc=muni,dc=cz?one
nss_base_group  ou=Group,dc=fi,dc=muni,dc=cz?one
ssl yes
tls_reqcert hard
tls_checkpeer yes
tls_cacert /etc/openldap/certs/FI_CA.pem

$ cat /etc/ldap/ldap.conf
…
# TLS certificates (needed for GnuTLS)
TLS_CACERT /etc/openldap/certs/FI_CA.pem

Na závěr nakonfigurujeme NSS tak, aby se LDAP NSS modul použil pro unixové tabulky uživatelů a skupin.

$ cat /etc/nsswitch.conf
…
passwd:         compat systemd ldap
group:          compat systemd ldap
shadow:         compat ldap
…

Nyní bychom již měli vidět uživatele a uživatelské skupiny:

$ id xlogin
uid=12345(xlogin) gid=10100(student) groups=10340(account_myhost),10000(staff),10100(student)

Omezení seznamu uživatelů

Pokud si přejeme omezit seznam uživatelů, kteří se smějí přihlásit na unixový stroj, můžeme upravit hodnotu položky nss_base_passwd v konfiguračním souboru LDAP NSS modulu následovně:

$ grep nss_base_passwd /etc/ldap.conf
nss_base_passwd ou=People,dc=fi,dc=muni,dc=cz?one?host=myhost

Následně si od technické podpory necháme vytvořit skupinu account_myhost, ve které budeme mít právo správce. Dále ve fakultní administrativě naplníme seznam členů skupiny a stiskneme tlačítko „Přegenerovat mailové skupiny a LDAP“. Poté u uživatelů, kteří jsou součástí skupiny account_myhost, uvidíme v LDAPu atribut host s hodnotou myhost. Pouze tito uživatelů budou následně pro náš stroj viditelní. Analogicky můžeme filtrovat uživatele a skupiny podle libovolných jiných LDAP atributů.

Kerberos

Pro podporu protokolu Kerberos slouží klientský program na vyžádávání lístků a Pluggable Authentication Modules (PAM) knihovna pro přihlašování pomocí Kerberos klienta. V repozitářích Ubuntu jsou oba projekty dostupné v balíčcích krb5-user a libpam-krb5:

# apt install krb5-user libpam-krb5

Následuje konfigurace Kerberos klienta:

$ cat /etc/krb5.conf
[libdefaults]
        default_realm = FI.MUNI.CZ
…
[realms]
…
        FI.MUNI.CZ = {
                kdc = krb.fi.muni.cz
                kdc = krb1.fi.muni.cz
                default_domain = fi.muni.cz
        }
…
[domain_realm]
…
        .fi.muni.cz = FI.MUNI.CZ
        fi.muni.cz = FI.MUNI.CZ

Nyní by již mělo fungovat vyžádávání Kerberos lístků:

$ kinit xlogin
Password for xlogin@FI.MUNI.CZ:

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: xlogin@FI.MUNI.CZ

Valid starting      Expires             Service principal
2.10.2019 17:55:39  3.10.2019 17:55:35  krbtgt/FI.MUNI.CZ@FI.MUNI.CZ

Kerberos ve výchozím nastavení umožňuje přihlášení pouze uživatelům s UID větším nebo rovno 1000. Toto omezení brání tomu, aby UID LDAP uživatele kolidovalo s UID systémového uživatele. Bohužel fakultní UID některých uživatelů je z historických důvodů menší než 1000. Upravíme proto konfiguraci PAM tak, aby umožnila přihlášení uživatelům s UID větším nebo rovno 200:

$ cat /usr/share/pam-configs/krb5
Name: Kerberos authentication (MIN_UID=200)
Default: yes
Priority: 704
Conflicts: krb5-openafs
Auth-Type: Primary
Auth:
        [success=end default=ignore]    pam_krb5.so minimum_uid=200 try_first_pass
Auth-Initial:
        [success=end default=ignore]    pam_krb5.so minimum_uid=200
Account-Type: Additional
Account:
        required                        pam_krb5.so minimum_uid=200
Password-Type: Primary
Password:
        [success=end default=ignore]    pam_krb5.so minimum_uid=200 try_first_pass use_authtok
Password-Initial:
        [success=end default=ignore]    pam_krb5.so minimum_uid=200
Session-Type: Additional
Session:
        optional                        pam_krb5.so minimum_uid=200

Konfiguraci zakončíme spuštěním konfiguračního nástroje PAM. Pokud chcete, aby se při prvním přihlášení uživateli vytvořil domovský adresář, v zobrazeném menu vyberte položku „Create home directory on login” a potvrďte tlačítkem „Ok“:

# pam-auth-update

Následně bychom již měli být schopni přihlásit se do systému:

$ ssh xlogin@localhost id
Password: 
Creating directory '/home/xlogin'.
uid=12345(xlogin) gid=10100(student) groups=10340(account_myhost),10000(staff),10100(student)

Užitečné odkazy