Existují tři běžné způsoby, jak nastavit umask uživatele.
- Nastavte
UMASK
v/etc/login.defs
- Přidejte
pam_umask.so
do vaší konfigurace PAM v/etc/pam.d
- Nastavte jej ve spouštěcích souborech shellu, např.
/etc/profile
V tomto ohledu není mezi uživateli systému a běžnými uživateli žádný rozdíl.
Ale předpokládám, že se pokoušíte spustit démona s vlastním umask?
Problém je v tom, že všechny výše uvedené možnosti nastanou, když se uživatel přihlásí. Pokud spouštíte démona, nikdy se nepřihlásí. Spouští ho init, pak se buď spustí jako root, nebo zavolá setuid
spustit jako systémový uživatel, kterého určíte.
Vaše hlavní možnosti jsou:
- zadejte
umask
ve vašem init skriptu (proveďtegrep umask /etc/init.d/*
pro příklad) - nakonfigurujte init pro spuštění programu s vlastním umask (systemd.exec upstart umask)
- pokud používáte
start-stop-daemon
, předejte možnost umask - upravte samotný program tak, aby volal funkci umask nebo systémové volání
Systémoví uživatelé se od „normálních“ liší třemi způsoby:vypršením platnosti hesla, domovským adresářem (uživatelé systému jej nemají) a UID (uživatelé systému jsou obvykle pod určitou libovolnou hranicí).
V obecném případě máte téměř úplně smůlu. K nastavení umask můžete použít PAM, ale PAM vybírá chování na základě jiných věcí, než jsou tyto tři rozdíly.
Jinými slovy, nemůžete přimět PAM, aby rozlišoval mezi „systémovými“ a „nesystémovými“ uživateli. Zbývají vám dvě možnosti:
-
Buď použijete PAM k nastavení umask pro všechny (např. check in
/etc/login.defs
), pak explicitně nastavte umask pro nesystémové uživatele v/etc/bash.bashrc
(nebo podobné); -
Nebo si k tomu napište svůj vlastní modul PAM. Myslím, že by to mnoho lidí uvítalo, protože nastavení umasku je běžný požadavek.
Berte prosím tuto odpověď s velkou špetkou soli. Tento druh požadavků je docela běžný a nebyl bych překvapen, kdyby nyní existoval lepší/správný způsob.