Polyinstancování adresáře /tmp
Trocha teorie
Dlouholetým problémem UNIXově
založených operačních systémů je adresář /tmp sloužící
jako dočasné úložiště pro všechny. Tento adresář má práva nastavená
na rwxrwxrwx, tedy zápis pro kohokoli. Nevýhodou však byl
i absolutní přístup k datům jiných uživatelů, a proto byl zaveden tzv.
sticky bit, který omezuje zápis pouze na soubory a adresáře
vlastněné patřičným uživatelem. Každý tedy může zapisovat nové
soubory, ale jen do těch existujících, které vlastní.
Novou možnost fyzické separace pak nabízí tzv.
polyinstantiation. Každému uživateli namapuje daný adresář na
jiný, pro něj v původní cestě nepřístupný. V případě adresáře
/tmp by se např. jednalo o mapu z /tmp-inst nebo
klidně i /tmp/users. Mechanismus, který polyinstancování
zajišťuje, automaticky vytvoří adresář dle uživatelského jména a jím
nahradí cílový adresář dle mapy.
Ukázka z praxe
Nastavení se provádí v konfiguračním souboru
/etc/security/namespace.conf prostřednictvím PAM modulu
pam_namespace.so:
# /etc/security/namespace.conf
#
# See /usr/share/doc/pam-*/txts/README.pam_namespace for more information.
#
#/tmp /tmp-inst/ both root,adm
#/var/tmp /var/tmp/tmp-inst/ both root,adm
#$HOME $HOME/$USER.inst/inst- context
/tmp /tmp/users/ user root
Zakomentované příklady zahrnují polyinstancing /tmp,
/var/tmp (který osobně doporučuji nastavit jako symbolický
odkaz do /tmp) a domovského adresáře uživatele. Důležitý
parametr je typ, který zpravidla může být:
- user (na základě uživatelského jména)
- context (na základě bezpečnostního kontextu, pouze SElinux)
- both (obojí)
Poslední čtvrtý parametr udává výjimky. V mém případě bude na
základě uživatelského jména namapován adresář /tmp z
/tmp/users s výjimkou uživatele root.
Jak na to
Nejprve vytvoříme adresář, ze kterého budeme mapovat, v mém případě
/tmp/users. Tomuto adresáři nastavíme z bezpečnostních
důvodů nulová práva a zadáme mapu
v konfiguračním souboru /etc/security/namespace.conf.
Nyní je třeba pečlivě zvážit nastavení modulů PAM. Po zkušenostech
z praxe nedoporučuji spouštět PAM modul ve
všech případech autentizace (soubor
/etc/pam.d/common-session, způsobí to více problémů než
užitku. Polyinstancování jsem proto zúžil na dva jediné typy
autentizace – login a sshd.
Ukázka začlenění PAM modulu do souboru s autentizací:
# Enable polyinstantiation
session required pam_namespace.so
Je třeba dát si pozor na to, kam modul umístíme. Existují místa, kdy je
moc brzy a kdy zase moc pozdě – lepší je si to párkrát zkusit a pozorně
sledovat logy (např. auth.log). Pokud se mechanismus aplikuje,
měli bychom po novém přihlášení mít adresář /tmp
v ideálním případě prázdný. Přihlásíme-li se na roota, měli bychom
vidět /tmp/users a v něm adresář s naším a případně
dalšími uživatelskými jmény. Máme hotovo.
Osobně mám přímé přihlášení na root uživatele zakázané a
přistupuji přes sudo. Bohužel v tomto případě se mi nepodařilo sudo
nijak donutit vyvolat čistý login (nejspíše proto, že sudo je spouštěno
z shellu, na který již bylo polyinstacování aplikované), takže ani po
přihlášení na roota mi /tmp neodhalil žádná svá tajemství.
Pokud nedejbože nutně potřebuji vidět obsah neořezaného /tmp,
obejdu bezpečnostní mechanismus mountnutím root partition např. do
/mnt a podívám se tam :)
Štítky: Tipy a triky
Komentáře
Komentáře jsou uzavřeny