GNU/Linux >> Znalost Linux >  >> Linux

Jak ACL vypočítá efektivní oprávnění k souboru?

effective oprávnění se tvoří spojením skutečných (skutečných?) oprávnění s mask . Od mask vašeho souboru je rw- , všechny effective oprávnění mají x bit vypnutý.


Krátká odpověď:Pokud chcete masku se zapnutým prováděcím bitem, musíte ji explicitně nastavit pomocí setfacl po touch . Zabezpečení zakazuje jeho implicitní nastavení.

setfacl -n -m m::rwx foo

"-n" pro potlačení přepočítávání masky (nemusí být potřeba).
"m::rwx" nastaví hodnotu masky na 'rwx'. Všimněte si, že "m::x" zakáže všechna čtení a zápis.

Nejsem schopen ukázat, proč je maska ​​"rw-". Předpokládám, že výchozí adresář je touch vytvoří soubor zůstane nezměněn pro celý příklad OP.

  1. Položka adresáře pro 'foo' by měla zobrazovat vlastníka 'root' (kvůli příkazu sudo a skupině 'guards', protože adresář má nastaven bit SUID. Oprávnění budou výchozí '-rw-...r--' s skupinová oprávnění adresáře '-...r-x...' (kvůli bitu SUID se zobrazuje jako malé s).

  2. Dále následují ACL, které by měly být výchozím adresářem. Vzhledem k tomu, že ACL dědí, neočekával bych, že se vytvoří nějaké ACLE a že maska ​​ACLE bude výchozí adresář, 'rwx'.

Ale pokud jsou vytvořeny, očekával bych, že nové ACLe budou připraveny z výchozího nastavení, přičemž maska ​​bude opět ponechána na 'rwx'. Pokud nejsou připraveny z výchozích hodnot, zdá se, že to odporuje myšlence výchozího ACL – „výchozí“ ACL by poskytoval pouze ACL pojmenovaného uživatele a pojmenované skupiny.

To nyní vyvolává otázku, jaká by měla být maska ​​ACLe. Očekával bych, že to bude 'rwx' z výchozí položky masky. Ale mohl by být vytvořen s prázdnou maskou, a pak platí všechny druhy zákonů.

  1. S nezávazným ACL user::rw-, group::r-x, other::r--, group:wheel:rwx, group:guards:rwx a maskou:::(nenastaveno) konzultujeme dokumentaci pro setfacl , za předpokladu, že pro vytváření souborů platí stejná pravidla.

Je tam klauzule:

Pokud ACL obsahuje položky pojmenovaného uživatele nebo pojmenované skupiny a neexistuje žádná položka masky, vytvoří se položka masky obsahující stejná oprávnění jako položka skupiny.

Tím by se maska ​​ACL nastavila na "r-x", pokud byl záznam skupiny ACL vytvořen ze záznamu adresáře souborů, nebo na "r-x", pokud by záznam skupiny ACL pocházel z výchozího ACL. (V opačném případě je v tomto případě výsledek stejný.)

Je zde také klauzule:

Pokud výchozí ACL obsahuje položky pojmenovaného uživatele nebo položky pojmenované skupiny a neexistuje žádná položka masky, přidá se položka masky obsahující stejná oprávnění jako výchozí položka skupiny výchozího ACL. ... oprávnění vstupu masky jsou dále upravena tak, aby zahrnovala sjednocení všech oprávnění ovlivněných vstupem masky.

Pokud toto pravidlo platí, maska ​​začne jako „r-x“ (stejná logika) jako předchozí klauzule a poté bude upravena tak, aby byla „sjednocením všech oprávnění ovlivněných vstupem masky“.

"oprávnění ovlivněná zadáním masky" není definováno v setfacl dokumentace příkazů. Dokumentace POSIX ACL říká:

Maska je kombinací všech přístupových oprávnění vlastnící skupiny a všech položek uživatelů a skupin.

Uveďte slovo „union“, což je aditivní, „kombinaci“ bych četl jako logické or-ing. Jinými slovy, pokud má nějaká skupina nebo uživatel ACLE oprávnění "x", maska ​​bude obsahovat "x".

  1. Podle této logiky by hodnota masky v příkladu OP měla být 'rwx', bez ohledu na to, která logická cesta byla sledována.

Výše uvedená úvaha musí být chybná, protože x pro spuštění se v masce neobjevuje.

Proto musí existovat nějaké pravidlo o tom, jak se počítá maska, která byla "skryta" z běžných zdrojů dokumentace (nebo jsme našli chybu).

Můj závěr je, že 'x' je vždy bezpodmínečně odstraněno a dokumentace je laxní.

Tato změna byla pravděpodobně provedena z důvodu „bezpečnosti“ – žádný soubor nesmí být implicitně spustitelný, ale po vytvoření musí mít spustitelný bit zapnutý.


Linux
  1. Pochopení toho, jak Umask řídí počáteční oprávnění k souborům / adresářům v Linuxu

  2. „sudo:/etc/sudoers je světově zapisovatelný“ – Jak opravit oprávnění souboru sudoers

  3. Jak příkaz stat vypočítá bloky souboru?

  1. Jak připojit výstup do souboru?

  2. Jak přesměrovat výstup system() do souboru?

  3. Jak rm funguje? Co dělá rm?

  1. Jak Sticky Bit funguje?

  2. Jak přidat nový řádek na konec souboru?

  3. Co znamená + na konci oprávnění z ls -l?