Oprávnění a práva souborového systému GNU/Linux jsou základem zabezpečení systému a jedním z jeho principů je jasné oddělení práv k souborům a složkám. V silně víceuživatelském prostředí, jako je školní server, práva k souborům ve výchozím nastavení brání uživateli v náhodném smazání nebo přepsání dokumentů jiného uživatele. Existují však případy použití, kdy více uživatelů potřebuje přistupovat (číst, zapisovat a dokonce i mazat) k souborům jiných uživatelů – jako je tomu například u výše zmíněného školního serveru, kde studenti pracují na stejném projektu. V této části přípravy na zkoušku RHCSA se naučíme, jak vytvořit prostředí pro takovou spolupráci pomocí techniky setgid (set groupID). Všimněte si, že i když tyto kroky provádíme na nejnovějším operačním systému, setgid není nic nového a najdete ho ve všech distribucích.
V tomto tutoriálu se naučíte:
- Jak přidat uživatele do doplňkové skupiny
- Jak používat set-GID v adresáři
- Jak zkontrolovat správné vlastnictví v adresáři set-GID
- Jak používat speciální adresář jako člen skupiny

Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Red Hat Enterprise Linux 8 |
Software | GNU Coreutils 8.30 |
Jiné | Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Případ použití
Abychom demonstrovali použití setgid, máme virtuální server a na něm musíme vytvořit skupinu uživatelů, přidat členy a nastavit adresář, ke kterému mají oba přístup. Zatím je to pouze
záležitost nastavení oprávnění. Trik bude v přidání setgid do adresáře, takže soubory vytvořené v adresáři budou mít skupinu vlastníků nadřazeného adresáře. Vzhledem k tomu, že skupina bude mít v adresáři oprávnění ke čtení a zápisu, mohou soubory číst a zapisovat všichni členové skupiny, aniž by bylo nutné explicitně nastavit původní členství ve skupině.
Základní nastavení
Nejprve vytvoříme potřebné objekty. Vytvoříme adresář projektu:
# mkdir -p /student_projects/rocket_science
A naši dva uživatelé, sarah
a john
pomocí příkazu useradd:
# useradd john# useradd sarah
Potřebujeme také vytvořit uživatelskou skupinu, která umožní spolupráci mezi jejími členy:
# groupadd rocketengineers
Dále nastavíme tuto skupinu jako vlastníka adresáře projektu, rekurzivně:
# chown -R :rocketengineers /student_projects/rocket_science
Dále přidáme naše uživatele do rocketengineers
skupina:
# usermod -a -G rocketengineers john# usermod -a -G rocketengineers sarah
Skupinu jsme přidali jako sekundární skupinu. Podrobnosti o skupinách najdete v kurzu členství ve skupině.
K dokončení základního nastavení potřebujeme přidat úplné oprávnění skupině v adresáři:
# chmod 770 /student_projects/rocket_science
A tímto je naše základní nastavení kompletní. Oba uživatelé mohou zapisovat do adresáře a vytvořené soubory budou ve vlastnictví uživatele a vlastnící skupina bude primární skupinou uživatele. Můžeme zkontrolovat
oprávnění, která jsme nastavili pomocí stat
:
# stat /student_projects/rocket_science Soubor:/student_projects/rocket_science Velikost:6 Bloky:0 IO Blok:4096 adresářZařízení:fd00h/64768d Inode:17789698 Odkazy:2Přístup:(0770/dr) root) Gid:( 1003/rocketengineers)Context:unconfined_u:object_r:default_t:s0Přístup:2020-10-04 18:29:57.500453785 +0200Chang:2020-10-0954:2020-10-0954 1870.0004 18:30:34.809115974 +0200 Narození:-
Identifikátory se s největší pravděpodobností budou lišit. Vidíme, že vlastníkem adresáře je root
, zatímco vlastnictví skupiny patří rocketengineers
skupina. To umožňuje oběma členům
skupiny číst a zapisovat z a do adresáře.
Spolupráce bez setgid
Řekněme, že tito dva uživatelé by chtěli sdílet nějaké poznámky k tomuto nastavení. sarah
má ve svém domovském adresáři textový soubor s důležitými daty:
$ iduid=1002(sarah) gid=1002(sarah) groups=1002(sarah),1003(raketoví inženýři) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023$ text cat general_project.notes před>Chcete-li jej sdílet s
john
, zkopíruje soubor do sdíleného adresáře (takže v jejím domovském adresáři je stále záloha, pro každý případ):$ cp general_project.notes /student_projects/rocket_science/Zkontrolováním vlastnictví můžeme zjistit, že vlastníkem je skutečně
sarah
a skupina vlastnící soubor je takésarah
, primární skupina uživatele:$ stat /student_projects/rocket_science/general_project.notes Soubor:/student_projects/rocket_science/general_project.notes Velikost:5 bloků:8 IO blok:4096 běžný souborZařízení:fd00h/64768d Inode:1506641 Inode:1506641 rw-rw-r--) Uid:( 1002/ sarah) Gid:( 1002/ sarah)Kontext:unconfined_u:object_r:default_t:s0Přístup:2020-10-04 18:31:30.229099624Mo2000020024:02010 18:31:30.229099624 +0200Změna:2020-10-04 18:31:30.229099624 +0200 Narození:-Pojďme se přepnout na
john
. Má také některá zjištění týkající se projektu a rád by se o ně podělil.$ iduid=1001(john) gid=1001(john) groups=1001(john),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023$ echo "mytext"> raketa. txt$ cp rocket.txt /student_projects/rocket_science/Platí stejná oprávnění, nově zkopírovaný soubor bude vlastnit
john
:$ stat /student_projects/rocket_science/rocket.txt Soubor:/student_projects/rocket_science/rocket.txt Velikost:7 Bloků:8 IO Blok:4096 běžný souborZařízení:fd00h/64768d Inode:18356857 Odkazy:064 (Odkazy:0 rw-rw-r--) Uid:( 1001/ john) Gid:( 1001/ john)Context:unconfined_u:object_r:default_t:s0Access:2020-10-04 18:32:24.433075710 Mo202:02010 18:32:24.433075710 +0200Změna:2020-10-04 18:32:24.433075710 +0200 Narození:-Protože oba jsou členy
rocketengineers
mohou číst obsah adresáře, a protože obě jejich poznámky jsou čitelné po celém světě, mohou si oba navzájem číst
soubory.$ cat /student_projects/rocket_science/general_project.notes textProblém nastává, když
john
rád bych přidal nějaké poznámky ksarah
důležitý datový soubor:$ echo "nějaké komentáře">> /student_projects/rocket_science/general_project.notes -bash:/student_projects/rocket_science/general_project.notes:Povolení odepřenoVe skutečnosti nemohou pracovat se soubory toho druhého, pouze je číst. Nyní
sarah
mohla nastavit skupinové vlastnictví svého souboru na jejich společnou skupinu, a tím problém vyřešit. Ale proč by to potřebovala
s každým souborem, když máme setgid, aby nám pomohl?Nastavení příznaku setgid
K nastavení příznaku setgid používáme
chmod
:# chmod g+s /student_projects/rocket_scienceVšimněte si příznaku „s“ u oprávnění skupiny (z důvodu srozumitelnosti nastavte jako tučné):
# stat /student_projects/rocket_science Soubor:/student_projects/rocket_science Velikost:53 Bloky:0 IO Blok:4096 adresářZařízení:fd00h/64768d Inode:17789698 Odkazy:2Přístup:(2770)(2770) ---) Uid:( 0/ root) Gid:( 1003/rocketengineers)Context:unconfined_u:object_r:default_t:s0Přístup:2020-10-04 18:32:29.389167450 +0200Upravit:1803:1803 24.433075710 +0200Změna:2020-10-04 18:34:04.449927062 +0200 Narození:- Testování a ověřování výsledků
Nyní
sarah
může sdílet své nové výzkumné poznámky:$ cat finds.txt raketa potřebuje křídla$ cp results.txt /student_projects/rocket_science/$ stat /student_projects/rocket_science/findings.txt Soubor:/student_projects/rocket_science/findings.txt Velikost:19 Bloky:8 IO Blok:4096 běžný souborZařízení:fd00h/64768d Inode:18999000 Odkazy:1Přístup:(0664/-rw-rw-r--) Uid:( 1002/ sarah) Gid:( 1003/rocketengineers )Kontext:unconfined_u:object_r:default_t:s0Přístup:2020-10-04 18:35:15.195236593 +0200Změnit:2020-10-04 2020-10-04 18:35:15.19522316593 :-Vlastnictví skupiny je nastaveno na skupinu nadřazeného adresáře kvůli
setgid
na místě. To způsobíjohn
abyste mohli komentovat nové výzkumné poznámky:$ echo "ověřeno!">> /student_projects/rocket_science/findings.txt$ cat /student_projects/rocket_science/findings.txt raketa potřebuje ověřená křídla!A tím jsme dokončili náš cíl vytvořit adresář pro spolupráci pro skupinu uživatelů. Mohli bychom to udělat pro ostatní skupiny pomocí výše uvedené metody, kdy oddělíme data různých projektů pomocí
oprávnění, takže člen jedné skupiny nemůže náhodně smazat data jiného projektu.# Název videa:Práce v adresáři setgid
# Popis videa:Úprava souborů jiného uživatele v adresáři setgid
# Název souboru videa:rhcsa_setgid.webmPráce v adresáři setgid – Úprava souborů jiného uživatele v adresáři setgid Závěr
V rámci přísných oprávnění a vlastnických práv GNU/Linux
setgid
je jednoduchý způsob, jak uživatelům systému umožnit zabezpečenou vzájemnou interakci se soubory ostatních, což umožňuje skupinovou práci
bez použití nějakého náročného externího řešení nebo rušení počátečních skupin a oprávnění uživatele. Ve výše uvedeném příkladu jsme se nemuseli dotýkat domovských adresářů uživatelů ani jejich celosystémových
oprávnění, pouze jsme vytvořili speciální místo, kde mohou sdílet, co potřebují.Cvičení
- Vytvořte více adresářů projektu s různými skupinami. Zkontrolujte, zda členové jednoho projektu mohou číst soubory jiného projektu.
- Vytvořte adresář pro více projektů, kam má přístup každý člen projektu.
- Vytvořte meziprojektový pouze pro čtení adresář, do kterého mohou psát pouze členové jednoho projektu (projektového managementu), ale členové všech projektů mohou číst.
Chyba serveru FTP RHEL7:ftp:připojení:Žádná cesta k řešení hostitele httpd:apr_sockaddr_info_get() se nezdařilo pro rhel7Linux