Centrální správu uživatelů s LDAP je velmi jednoduché implementovat. Posledně jsme si ve Fedoře jeden takový rozchodili a nastavili. Dnes povolíme ověřování uživatelů na jedné instalaci Fedora Workstation proti tomuto LDAP serveru , abychom mohli dynamicky spravovat účty a tak řídit přístup na pracovní stanice.

Kde jsme to přestali

Naposledy jsme si vytvořili uživatele Josef Smrk, který je posixAccount. Ověřte si, že takový záznam na serveru máte: ldapsearch -x -H ldapi:// -b "cn=Josef Smrk,ou=People,dc=mojefedora,dc=cz" -s base, nebo prostým slapcat | less, jak jsme si ukazovali posledně.

# extended LDIF
#
# LDAPv3
# base <cn=Josef Smrk,ou=People,dc=mojefedora,dc=cz> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#

# Josef Smrk, People, mojefedora.cz
dn: cn=Josef Smrk,ou=People,dc=mojefedora,dc=cz
cn: Josef Smrk
objectClass: organizationalPerson
objectClass: posixAccount
sn: Smrk
uid: jsmrk
homeDirectory: /home/jsmrk
gidNumber: 10000
uidNumber: 10000

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Josef Smrk nemá heslo!

Josef Smrk je sice posixový uživatel, ale nemá vytvořené heslo (nemůže se přihlašovat). Heslo mu vygenerujeme znovu pomocí slappasswd (já jsem vytvořil heslo karel, ale vy použijte něco podstatně lepšího). Připravíme si soubor, kterým upravíme uživatele jsmrk. Soubor by měl obsahovat následující data (vi set_password.ldif). Aplikujte změny pomocí: ldapmodify -x -W -D "cn=admin,dc=mojefedora,dc=cz" -f set_password.ldif

dn: cn=Josef Smrk,ou=People,dc=mojefedora,dc=cz
changetype: modify
replace: userPassword
userPassword: {SSHA}KmhMOn5jYrXf67wWNfpvLhApYfDhd2GS

Nainstalujte si Fedora Workstation

Připravte si instalaci Fedory Workstation, která bude ve stejné síti jako LDAP server a bude možné se k tomuto serveru připojit (otestujte si to třeba na příkazu ping . Pokud používáte virtualbox nebo virtmanager, dohlédněte, že máte správně nastavené síťové zařízení. Já jsem si například server nakonfiguroval jako lxc kontejner a Workstation dostal stejný síťový most. Instalaci udělejte kompletně normálně, jak jste zvyklí. V nové instalaci doporučuji spustit ssh server pomocí sudo systemctl start sshd  (případně pokaždé pomocí sudo systemctl enable sshd)

SSSD

Celé řešení spočívá na tom, že autentizace v Linuxu probíhá vícevrstvě. Pokud není nainstalován balík sssd, nainstalujte je příkazem dnf install sssd. Jak se dozvíte z popisu balíčku (dnf info sssd), jde o skupinu programů a nástrojů, které spravují přístup ke vzdáleným adresářům a dalším autentifikačním způsobům.

Službu (služby) je také potřeba nakonfigurovat. Vytvoříme neexistující konfigurační soubor /etc/sssd/sssd.conf:

[sssd]
services = nss,pam
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
domains = mojefedora.cz
default_domain_suffix = mojefedora.cz
full_name_format = %1$s
[nss]
filter_groups = root
filter_users = root
entry_cache_nowait_percentage = 75
[pam]
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
[domain/mojefedora.cz]
autofs_provider = ldap
cache_credentials = True
ldap_search_base = dc=mojefedora,dc=cz 
ldap_auth_disable_tls_never_use_in_production = True
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://10.0.3.49 
ldap_schema = rfc2307bis
use_fully_qualified_names = True

Nebudu popisovat celý konfigurační soubor, vypíchnu ty zajímavé. Základ konfigurace nám v práci nějak vznikl, tak bych nad některými spekuloval (pardon). Pro autentizaci se používají domény (náš příklad má jsmrk@mojefedora.cz). Domény se oddělují čárkou (my teď máme jednu domains = mojefedora.cz) a protože nechceme aby uživatel musel doménu vypisovat, určili jsme mu výchozí (default_domain_suffix = mojefedora.cz). Doménová sekce je níže. sssd umí více druhů služeb, nám stačí jedna, která umí všechno (všechny řádky s ldap).

Určitě důležité je ldap_auth_disable_tls_never_use_in_production, která vypíná šifrování, rozhodně nepoužívat v produkci! ldap_uri určí adresu serveru a ldap_search_base základní DN odkud chceme prohledávat.
sssd je služba. Změny neprobíhají automaticky, je nutné ji restartovat.

To, že služba je používaná k ověřování, poznáme z konfiguračního souboru /etc/nsswitch.conf. Tento konfigurační soubor používá základní GNU C knihovna a další aplikace k identifikaci zdrojů přihlášení (informace z man nsswitch.conf). Nás zajímá řádek s shadow: files sss, který říká, že uživatele (přihlašování) hledáme v běžných souborech (/etc/passwd, /etc/shadow) a ve službě sss (viz výše).

Přihlásit se lze, ale...

Teď už by mělo jít přihlásit se k danému stroji vzdáleně pomocí ssh. Na stroji (pracovní stanici) si spustíme ssh server pomocí sudo systemctl start sshd (a pokud chceme trvale zapínat při startu sudo systemctl enable sshd). Grafické přihlášení ještě nefunguje, ale je možné se přihlásit přes ssh ssh jsmrk@<ip_adresa_stanice>. Tohle vypíše dvě chyby, ale připojí se:

ssh jsmrk@10.0.3.222
jsmrk@10.0.3.222's password: 
Last login: Mon Sep  2 15:16:09 2019 from 10.0.3.1
Could not chdir to home directory /home/jsmrk: No such file or directory
id: cannot find name for group ID 10000
[jsmrk@localhost ~]$ 

Uživatel nemá vytvořený domovský adresář a uživatel má přiřazenou výchozí skupinu s ID 10000, kterou není schopen systém identifikovat. Chybějící domovský adresář je také důvod, proč se nejde přihlásit v grafickém prostředí (podívejte se do logů journactl -e).

Domov, sladký domov

Tuto část jsem dříve dělal ručně, authselect je specialita ve Fedoře

Abychom zajistili automatické vytváření domovů pro uživatele, budeme muset porozumět systému přihlašování. Přihlašování probíhá pomocí modulů PAM (Pluggable Authentication Modules for Linux). Tyto moduly se konfigurují v /etc/pam.d/ a definují kroky, které se dějí v jednotlivých fázích autentizace. Doporučuji přečíst odpovídající manuál man pam. Konfiguraci řídí hlavní konfigurační soubor /etc/pam.conf a další konfigurační soubory v /etc/pam.d.

Naším cíle je po úspěšném přihlášení zajistit, že uživatel má svůj domovský adresář. Fedora řeší manipulaci s autentizačními způsoby pomocí příkazu authselect. Povolíme tedy vlastnost vytváření domovských adresářů pomocí authselect enable-feature with-mkhomedir a změnu aplikujeme pomocí authselect apply-changes, který nám odpoví, že změny proběhly. Changes were successfully applied.. Restartujeme službu, která je zodpovědná za vykonávání těchto činností systemctl restart oddjobd.

Otestujte přihlášení a při připojení (nebo grafickém) přihlášení by se mělo objevit hlášení jako tady:

ssh jsmrk@10.0.3.222
jsmrk@10.0.3.222's password: 
Creating home directory for jsmrk.
Last login: Mon Sep  2 17:15:21 2019 from 10.0.3.1
[jsmrk@localhost ~]$

Ověřte si existenci domovského adresáře pomocí pwd, nebo ls /home/jsmrk.

Skupina 10000

Uživatele běžně řadíme do skupin. Uživatelé běžných desktopových distribucí mívají jako výchozí skupinu stejného jména jako uživatelské jméno. Doporučuji se nad skupinami dobře zamyslet. Pokud budou uživatelé mít jednu společnou skupinu, mohlo by se stát, že si pak budou omylem sdílet i takové soubory, které nechtějí.

Pro účely našeho příkladu ale jednoduše na LDAP serveru aplikujeme následující ldap soubor a zajistíme si vytvoření organizační jednotky Groups a skupiny ldap_users. Použít ldif soubor umíme již z minulého článku...

dn: ou=Groups,dc=mojefedora,dc=cz
objectClass: organizationalUnit
ou: Groups
description: Skupiny

dn: cn=ldap_users,ou=Groups,dc=mojefedora,dc=cz
objectClass: posixGroup
description: LDAP uzivatele
cn: ldap_users
gidNumber: 10000
memberUid: cn=Josef Smrk,ou=People,dc=mojefedora,dc=cz

A je hotovo!

Kam dál?

Znovu připomínám, že je moudré si nakonfigurovat šifrování. My se ale příště budeme zabývat projektem fusion directory, který nám umožní spravovat identity přes jednoduché webové rozhraní.