Připomeňme, že bity setuid a setgid byly vynalezeny za úplně jiným účelem:přimět spustitelný soubor ke spuštění s uid nebo gid svého vlastníka, nikoli s uid nebo gid uživatele spouštějícího soubor. Jakékoli jiné použití je pouze doplňková funkce.
Tyto bity nemají žádnou funkci u běžných souborů, které nejsou spustitelné. (A také shellové skripty u některých distribucí, kvůli bezpečnostním problémům.) Původně také neměly žádnou funkci pro adresáře. Někdo se zjevně rozhodl, že by bylo skvělé vzít nepoužívaný setgid na adresáře a použít jej k vynucení konzistence vlastnictví skupiny. Pokud si totiž hrajete s vlastnictvím skupiny, je to proto, že se souborem pracuje více lidí a pravděpodobně dává smysl, aby všechny soubory v daném adresáři patřily do stejné skupiny, bez ohledu na to, kdo je vytvořil. Odpadají potíže způsobené tím, že někdo zapomene spustit newgrp.
Proč tedy neimplementovat stejnou funkci pro setuid a uid souboru? No, uid je mnohem základnější než gid. Pokud toto implementujete, často soubor nebude patřit uživateli, který jej vytvořil! Uživatel může pravděpodobně stále upravovat soubor (za předpokladu, že umask je něco rozumného), ale nemůže změnit bity oprávnění. Těžko vidět užitečnost toho.
Domnívám se, že odpověď na tuto otázku souvisí s bezpečnostními problémy „zpřístupnění souborů“, které vedly k tomu, že většina moderních operačních systémů podobných Unixu neumožňuje „zpřístupnění souborů“. "Prodání souborů" je, když uživatel, který není superuživatelem, změní vlastnictví souboru na někoho jiného než tohoto uživatele. Tato schopnost poskytuje mnoho příležitostí pro neplechu.
Vzhledem k tomu, že předávání souborů není povoleno, setuid na adresářích, které by vykonávaly stejnou funkci v jiné formě, není povoleno nebo je ignorováno, pokud je nastaveno.
Pokud jde o změnu chování, budete muset upravit knihovny a nástroje OS.
Jeden velmi dobrý případ použití pro jeho implementaci je tento:
Řekněme, že máte vícemístný server se 3 zabezpečenými weby. Máte vytvořeny 3 skupiny, jednu pro každého z různých správců stránek. Všechny soubory na všech stránkách musí být vlastněny uživatelem apache, aby je Apache mohl číst a zapisovat do nich (drupal/wordpress atd.).
Pokud by setuid fungovalo jako bit setgid pro oprávnění adresářů, vypadalo by asi takto:
/var/www/sitea - apache:groupa rwS rwS ---
/var/www/siteb - apache:groupb rwS rwS ---
/var/www/sitec - apache:groupc rwS rwS ---
Tímto způsobem měla každá skupina správců přístup, aby viděla a dotýkala se pouze svého obsahu, ale uživatel webového serveru apache mohl obsluhovat veškerý obsah a uživatelé se nemusí starat o změnu vlastnictví nahraných souborů.
Dalším případem použití je anonymní nahrávání ftp/http nebo dokonce sftp/ssh. Skupina a GID v adresáři pro nahrávání budou root a stejně tak vlastník a UID. Ostatní oprávnění by byla -wx
. To by každému umožnilo PSACÍ přístup do nahrávacího adresáře, ale po nahrání by nemohli nic číst a root by vlastnil všechny nově vytvořené soubory.
Existují tedy dva naprosto dobré a platné případy použití pro povolení funkce UID v adresářích tak, aby odpovídala bitu GID.
Steven Mercurio