it-swarm-eu.dev

Proč nemůže běžný uživatel soubor „chown“?

Proč je příkaz chown pouze root? Proč nemohou uživatelé bez oprávnění root použít chown k rozdávání souborů, které vlastní?

82
phleg

Většina unixových systémů brání uživatelům v „rozdávání“ souborů, to znamená, že uživatelé mohou spustit chown, pokud mají oprávnění cílového uživatele a skupiny. Protože použití chown vyžaduje vlastnění souboru nebo root (uživatelé nikdy nemohou přizpůsobit soubory jiných uživatelů), může pouze [root] spustit chown a změnit vlastníka souboru na jiného uživatele.

Důvodem tohoto omezení je to, že rozdávání souboru jinému uživateli může umožnit, aby se zlé věci staly v neobvyklých, ale stále důležitých situacích. Například:

  • Pokud systém povolil diskové kvóty, mohla by Alice vytvořit světově zapisovatelný soubor pod adresářem přístupným pouze pro ni (takže nikdo jiný nemohl přistupovat k tomuto světově zapisovatelnému souboru) a poté spustit chown, aby tento soubor vytvořil ve vlastnictví jiného uživatele Billa. Soubor by se pak započítal pod Billaovu diskovou kvótu, i když soubor může použít pouze Alice.
  • Pokud Alice rozdá Billovi soubor, neexistuje žádná stopa, kterou by Bill nevytvořil. To může být problém, pokud soubor obsahuje nelegální nebo jinak ohrožující data.
  • Některé programy vyžadují, aby jejich vstupní soubor patřil určitému uživateli za účelem ověření žádosti (například soubor obsahuje některé pokyny, které program provede jménem tohoto uživatele). Obvykle to není zabezpečený návrh, protože i když Bill vytvořil soubor obsahující syntakticky správné pokyny, pravděpodobně by v tomto konkrétním okamžiku neměl v úmyslu je provést. Nicméně umožnění Alice vytvořit soubor s libovolným obsahem a nechat jej vzít jako vstup od Billa, může věci jen zhoršit.

V operačním systému Linux potřebujete schopnost CAP_CHOWN pro zchlazení. root je takový. Vysvětlení viz http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html . Pokud máte v úmyslu poskytnout schopnost CAP_CHOWN, vytvořte si kód pomocí libcap-ng nebo libcap, jak ukazuje: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html kde musíte jednoduše nahradit CAP_AUDIT_WRITE CAP_CHOWN.

15
user1910461

Příkaz můžete spustit, ale nebude fungovat, pokud nejste root. Je to snadné: představte si uživatele, který může změnit software na uživatele root. Může přidat bit setuid a, voilà, ten je root! Použití tedy může tento bit přidat pomocí chmod, ale nemá šanci změnit vlastníka souborů.

0
Dom