Ve světě aplikací určených pro MS Windows a napojených na databázi MS SQL Server nebylo moc důvodu začlenit do infrastruktury jiné servery než s operačním systémem MS Windows Server. S příklonem Microsoftu k otevřeným technologiím a obzvláště po uvedení SQL Serveru pro Linux se však situace může změnit. Lze tedy očekávat, že se stále častěji bude objevovat heterogenní infrastruktura, kde budou spolu komunikovat servery s nainstalovaným OS Windows Server a Linuxem. Jedním s požadavků tedy může být začlenit Linuxové servery do stávající infrastruktury s Windows. Rozebereme si podrobněji, jak lze připojit samostatný Linuxový server do Windows domény.
System Security Services Daemon (SSSD)
Nejdůležitější součástí je schopnost ověřovat přihlašovací údaje proti doméně. Každý server, na který se přihlašují uživatelé svým doménovým účtem, musí být schopen ověřovat, zda jsou zadané uživatelské údaje potřebné pro přihlášení v pořádku. Právě k tomuto účelu slouží SSSD. SSSD je tedy pro ostatní aplikace mezivrstvou, která jim zprostředkovává ověření. SSSD si navíc uchovává uživatelské identity v paměti. Dojde-li k přerušení spojení s doménovým kontrolerem, uživatelé se i přesto mohou přihlašovat k serveru svým doménovým účtem.
Abychom mohli používat Windows účet pro přihlášení k Linuxovému serveru, je zapotřebí provést mapování uživatelů z Windows do světa Linuxu. Linux a Windows jsou dva naprosto odlišné systémy, které si řeší administraci uživatelů po svém. Ve Windows každý uživatel dostane přidělen identifikátor Security Identifier (SID). Pokud vás zajímá popis vlastní struktury SIDu, můžete jej nalézt na stránkách Security Identifier Structure. Linux naproti tomu přiděluje uživatelům dvě čísla oddělená dvojtečkou UID:GID. Jedná se o User ID a Group ID. Jak je vidět, je zapotřebí namapovat Windows a Linux uživatele tak, aby tomu oba systémy rozuměly. Naštěstí i o mapování uživatelů se dobře postará SSSD.
Vlastní ověření probíhá pomocí protokolu Kerberos. Nicméně pokud je z nějakého důvodu vyžadováno ověření pomocí NTLM, SSSD nám nepomůže a je nutné se obrátit na Winbind.
Realmd
Jak jsem popsal výše, je potřeba provést správné nastavení SSSD proto, aby nám fungovalo ověření pomocí AD. Realmd podstatně zjednodušuje připojování klientů do domény tím, že dokáže nakonfigurovat SSSD a další potřebné subsystémy.
Nyní se můžeme vrhnout na praktickou ukázku. Mějme tedy již existující infrastrukturu, která se skládá ze tří serverů.
Na SQLDC01 je nainstalován Windows Server 2012 R2. Na linuxové servery jsem nainstaloval CentOS 7.2 a Ubuntu 16.04 LTS určené pro serverové instalace. Oba linuxové servery budeme chtít připojit do domény tak, aby se existující uživatelé mohli přihlásit svým účtem i k linuxovým serverům.
Nejprve si nainstalujeme SSSD a REALMD
CentOS
sudo yum install realmd sssd krb5-workstation krb5-libs
Ubuntu
sudo apt-get install realmd krb5-user packagekit
Pokusíme se získat informace o doméně sqlab.local. Tím zjistíme, zda máme správně nakonfigurované síťové připojení linuxových serverů.
realm discover sqlab.local
Pokud se nám zobrazí informace o doméně, je vše v pořádku. Na obrázku si můžete také všimnout, které balíčky jsou potřeba pro správnou funkci realm.
Po instalaci realmd se defaultně nevytváří konfigurační soubor /etc/realmd.conf
Lze jej vytvořit ručně a nastavit tak některé zajímavé hodnoty
[active-directory] default-client = sssd [users] default-home = /home/%D/%U default-shell = /bin/bash [sqlab.local] computer-ou = OU=Linux,DC=sqlab,DC=local computer-name = SQL01CentOS
Za zmínku stojí nastavení domovského adresáře pro doménové uživatele. V adresáři home bude podadresář se jménem domény a v něm bude zanořen adresář pro konkrétního uživatele. Existuje-li struktura Organizational Unit (OU) pod kterou má patřit připojovaný server, můžete ji nastavit obdobným způsobem jako v ukázce. Celá struktura OU již musí existovat.
Nyní je vše připraveno k připojení do domény
sudo realm join --verbose SQLAB.LOCAL -U 'domainadmin@SQLAB.LOCAL'
Následuje výpis, kde je podrobně uvedeno, co se provedlo a kde došlo k selhání.
Podíváme se na Active Directory Users and Computers, abychom zjistili, zda se server přidal do správné OU.
Na obrázku vidíme, že server se nachází přesně tam, kam jsme si určili v konfiguračním souboru.
Jak jsem uvedl již dříve, realm vytvořil konfigurační soubor /etc/sssd/sssd.conf
[sssd] domains = sqlab.local config_file_version = 2 services = nss, pam [domain/sqlab.local] ad_domain = sqlab.local krb5_realm = SQLAB.LOCAL realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_sasl_authid = SQL01CentOS$ ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%d/%u access_provider = ad
Pro ověření, že je server připojen k doméně, se zkuste přihlásit pomocí Windows účtu.
Jak je z obrázku patrné přihlásil jsem se k serveru pomocí předem připraveného účtu sqlab\domainuser. Po přihlášení se vytvořil domovský adresář přesně podle nastavení provedeného v jednom z předchozích kroků.
Automatické vytváření domovského adresáře ovšem nebude fungovat v Ubuntu, pokud neprovedeme dodatečnou konfiguraci.
V konfiguračním souboru /etc/pam.d/common-session přidejte řádek:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Nyní budeme chtít aplikovat práva pro skupinu uživatelů. V AD jsem si vytvořil zvláštní skupinu uživatelů LinuxAdmins. Všichni uživatelé ve skupině budou mít administrátorská práva pro systém. Ostatním uživatelům bude přístup odepřen.
sudo realm deny --all
Odebere přístup všem uživatelům. Zkusíme se opět přihlásit pomocí sqlab\domainuser a uvidíme, zda se zákaz aplikoval.
Dle obdrženého výpisu uživatel sqlab\domainuser opravdu ztratil k serveru přístup.
Přístup naopak povolíme skupině uživatelů sqlab\linuxadmins
sudo realm permit -g linuxadmins@sqlab.local
Dalším krokem je přiřazení práv pro spouštění příkazů jako administrátor. Stačí do souboru /etc/sudoers přidat oprávnění pro celou skupinu do sekce
#Members of the admin group may gain root privileges %linuxadmins@sqlab.local ALL=(ALL) ALL
Tímto řádkem všichni členové skupiny dostanou administrátorská oprávnění k serveru.
Vyzkoušíme, zda se vše podařilo a přihlásíme se jako sqlab\linadmin
Přihlášení proběhlo v pořádku. Uvidíme jestli se podařilo nastavit i administrátorská práva. Pokusíme se spustit následující příkaz pomocí sudo
sudo id linadmin@sqlab.local
Příkaz provede výpis doménových oprávnění pro zadaný login.
Jak je z výpisu patrné uživatel linadmin je členem dvou skupin sqlab\Domain Users a sqlab\LinuxAdmins.