Když proces provádí operaci se souborem, linuxové jádro provede kontrolu v následujícím pořadí:
-
Volitelné řízení přístupu (DAC) nebo řízení přístupu nařízené uživatelem. To zahrnuje jak klasické kontroly oprávnění ve stylu UNIX, tak seznamy řízení přístupu POSIX (ACL). Klasické UNIXové kontroly porovnávají aktuální UID a GID procesu oproti UID a GID souboru, ke kterému se přistupuje, s ohledem na nastavené režimy (čtení/zápis/eXecute). Access Control List rozšiřuje klasické UNIXové kontroly a umožňuje více možností týkajících se řízení oprávnění.
-
Povinná kontrola přístupu (MAC) nebo kontrola přístupu založená na zásadách. Toto je implementováno pomocí Linux Security Modules (LSM), které již nejsou skutečnými moduly (dříve byly, ale bylo to zrušeno). Umožňují dodatečné kontroly založené na jiných modelech než klasické bezpečnostní kontroly ve stylu UNIX. Všechny tyto modely jsou založeny na zásadě popisující, jaké druhy operací jsou povoleny pro který proces a v jakém kontextu.
Zde je příklad pro přístup k inodům (který zahrnuje přístup k souborům), abych podpořil moji odpověď s odkazy na online Linux Cross Reference. "function_name
(filename:line)" uvedené jsou pro verzi 3.14 jádra Linuxu.
Funkce inode_permission
(fs/namei.c:449) nejprve zkontroluje oprávnění ke čtení na samotném souborovém systému (sb_permission
v fs/namei.c:425), pak zavolá __inode_permission
(fs/namei.c:394) ke kontrole oprávnění ke čtení/zápisu/spouštění a POSIX ACL na inode v do_inode_permission
(fs/namei.c:368) (DAC) a poté oprávnění související s LSM (MAC) v security_inode_permission
(security/security.c:550).
Byl pouze jeden výjimka z této objednávky (DAC pak MAC):byla pro kontroly mmap. Ale to bylo opraveno ve verzi 3.15 jádra Linuxu (příslušné potvrzení).
DAC
==Discretionary Access Control
, http://en.wikipedia.org/wiki/Discretionary_access_control
MAC
==Mandatory Access Control
, http://cs.wikipedia.org/wiki/Mandatory_access_control
ACL
==Access Control List
, http://cs.wikipedia.org/wiki/Access_control_list
ACL
určuje ovládací prvky, které mají být aplikovány metodou ovládání DAC
nebo MAC
. MAC
je explicitní, centrálně řízený a neumožňuje uživatelům udělit oprávnění k objektu, pokud k tomu nemají výslovná oprávnění, zatímco DAC
umožňuje uživatelům udělit ostatním uživatelům přístup k objektům, ke kterým mají přístup.
MAC
ACL
s bude vždy nejprve aplikováno na požadavek, a pokud je přístup odepřen, zpracování se zastaví. Pokud je přístup povolen, pak DAC
ACL
s jsou aplikovány, a pokud je přístup odepřen, zpracování se zastaví. Pouze pokud je přístup udělen oběma MAC
a DAC
ACL
s může uživatel přistupovat k objektu, který požadoval.
SELinux
je MAC
implementace pro Linux (existují i další), zatímco tradiční rwx
oprávnění k souboru v kombinaci s vlastním uživatelem a skupinou tvoří kompletní DAC
ACL
. SELinux
'policy' je v podstatě MAC
ACL
.
Omlouvám se, že se dohaduji, ale myslím, že některé odpovědi zde mohly být nesprávný. Přímo z http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html:
Pravidla zásad SELinux se kontrolují po pravidlech DAC. Pravidla zásad SELinux se nepoužijí, pokud pravidla DAC nejprve odepřou přístup.