Mountování uživatelských adresářů v prostředí diskless overlay
Původně bylo připojení uživatelských adresářů realizováno tím nejjednodušším možným způsobem - připojením celého adresáře s domovskými adresáři. To sebou ovšem přinášelo rizika a problémy:
- zdlouhavé vylistování adresáře /home na klientské stanici
- potencionální možnost vykradení domovského adresáře jiným uživatelem
Nyní to funguje takto:
- Uživatel se na klientské stanici ověří a PAM spustí skript, který založí domovský adresář uživatele jako tzv. mountpoint a pak se do něj pokusí namountovat vzdálený domovský adresář uživatele.
- Pokud se mu to nepodaří, tak s největší pravděpodobností proto, že tento domovský adresář na vzdáleném NFS serveru zatím neexistuje. Proto se skript k tomuto NFS serveru přihlásí přes ssh na uživatele nfshomecreator. Proces login ovšem u tohoto uživatele nespouští shell, jako by tomu bylo obvyklé u běžných uživatelů, ale skript. Ten zpracuje parametry předané přes ssh klienta a na jejich základě ve sdíleném adresáři příslušný domovský adresář založí.
- Skript na bezdiskové stanici se potom pokusí zopakovat připojení domovského adresáře.
- Pokud se mu to ani potom nepodaří, přihlášení normálně pokračuje, pouze s tím rozdílem, že je domovský adresář uživatele součástí překrytého disku, který je pouze v paměti klientské stanice. Tudíž po restartu zase nenávratně zmizí! Z tohoto důvodu PAM skript v takovém případě vygeneruje soubor s upozorněním, že jde pouze o dočasný adresář.
Ačkoliv jde v zásadě o velmi jednoduché řešení, vyžaduje koordinaci skriptu a konfigurace bezdiskové stanice s nastavením na NFS serveru. Z tohoto hlediska je velmi výhodné, jsou-li obě strany spravovány přes Puppet
Založení uživatele nfshomecreator na straně NFS serveru
Pokud postupujeme manuálně, tak uživatele nfshomecreator založíme následující sekvencí příkazů:
Založení uživatele nfshomecreator přes puppet
Poznámky
- Pokud je kód pro založení uživatele nfshomecreator součástí univerzálního modulu pro zakládání uživatelů, je vhodné ho umístit do podmínky, tak aby se vytvořil pouze na stroji k tomu určeném
- Ač by se nastavení hesla (v kódu puppetu parametr
password
) z hlediska fungování mohl jevit zbytečný, protože se klient vůči serveru autorizuje klíčem, ssh server ho vyžaduje. Pokud může jako NFS server fungovat více strojů, tak nezáleží jaké heslo tento uživatel na nich má, ale musí ho mít.
Skript createhome.sh
uživatele nfshomecreator
V parametrem atributu shell
je místo obvyklého shellu cesta k shellovému skriptu, který se stará o vlastní vytvoření adresáře. Tento skript je umístěn v domovském adresáři uživatele nfshomecreator a má následující obsah:
Jeho volání z disklessové stanice pak vypadá takto:
stroj (diskless) :~# ssh nfshomecreator@NFS newusername /path_to_directory_with_homes
|
Skript převezme parametry od ssh klienta:
- newusername
- Uživatelské jméno pro příslušný domovský adresář
/path_to_directory_with_homes
- Cesta do adresáře s domovskými adresáři
Aby to fungovalo, musí být adresář /path_to_directory_with_homes
nasdílený přes NFS, patřit uživateli root a být ve skupině nogroup (stejné jakou má uživatel nfshomecreator). Pro každého jiného uživatele musí mít nastaveno pouze právo spouštění - bez toho by se totiž, po namountování adresáře na disklessové stanici, do něj uživatel nedostal.
NFS (DATASERVER) :~# chown root.nogroup /path_to_directory_with_homes
NFS (DATASERVER) :~# chmod 731 /path_to_directory_with_homes
|
V případě tohoto skriptu je opět vhodné využít puppet, a vytvořit pro NFS modul, tak aby nebylo nutné skript, ani soubor /etc/exports
kopírovat a příslušná práva řešit ručně. Oceníte to obzvláště v situaci, kdy jako NFS server může fungovat více strojů.
Součástí modulu v adresáři ./files
jsou tyto soubory:
- exports.source
- seznam adresářů publikovaných přes NFS
- createhome.source
- skript pro zakládání adresářů
- nfshomecreator.key
- veřejný ssh klíč uživatele root z disklessu
Adresář /path_to_directory_with_homes musí mít v souboru /etc/exports nastaven atribut root_squash, který zabraňuje jeho namountování.
|