Změnil jsem oprávnění souboru (chmod g+w testfile
) a spuštění ls -l testfile
dává:
-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
Poté jsem do této skupiny přidal uživatele („/etc/group ” má user1:x:1000:user2
line), ale nedaří se mi upravit tento soubor jako uživatel2. Proč tomu tak je?
Přijatá odpověď:
user2
se musí odhlásit a znovu přihlásit. Oprávnění skupiny fungují takto:
- Když se přihlásíte, vaše procesy získají členství ve vaší hlavní skupině uvedené v
/etc/passwd
, plus všechny skupiny, kde je váš uživatel zmíněn v/etc/group
. (Přesnějipw_gid
pole vgetpw(your_uid)
, plus všechny skupiny, kterých je váš uživatel explicitním členem. Kromě/etc/passwd
a/etc/group
, informace mohou pocházet z jiných druhů uživatelských databází, jako je NIS nebo LDAP.) Hlavní skupina se stane efektivním ID skupiny procesu a ostatní skupiny se stanou jeho doplňkovými ID skupiny. - Když proces provádí operaci, která vyžaduje členství v určité skupině, jako je například přístup k souboru, tato skupina musí být buď skutečným ID skupiny, nebo jedním z doplňkových skupinových ID procesu.
Jak vidíte, vaše změna členství ve skupině uživatele se projeví, až když se uživatel přihlásí. Pro běžící procesy je už pozdě. Uživatel se tedy musí odhlásit a znovu přihlásit. Pokud je s tím příliš velký problém, může se uživatel přihlásit do samostatné relace (např. na jiné konzoli nebo pomocí ssh localhost
).
Pod pokličkou může proces vždy jen prohrát oprávnění (ID uživatele, ID skupiny, schopnosti). Jádro spustí init
proces (první proces po spuštění) běžící jako root a každý proces je nakonec odvozen od tohoto procesu¹. login
proces (nebo sshd
, nebo část vašeho správce plochy, která vás přihlašuje) stále běží jako root. Součástí jeho práce je zrušit práva roota a přepnout na správného uživatele a skupiny.
Existuje jedna jediná výjimka:spuštění programu setuid nebo setgid. Tento program získává další oprávnění:může se rozhodnout, že bude jednat pod různými podmnožinami členství nadřazeného procesu plus další členství v uživateli nebo skupině, která vlastní spustitelný soubor setxid. Konkrétně kořenový program setuid má oprávnění root, takže může dělat vše²; takto fungují programy jako su
a sudo
mohou dělat svou práci.
¹ Občas se vyskytnou procesy, které nejsou odvozeny z init (initrd, udev), ale princip je stejný:začněte jako root a časem ztratíte oprávnění.
² Bez víceúrovňových bezpečnostních rámců, jako je SELinux.