Školení - Správa uživatelů a služeb

Toto téma slouží k diskusi a dotazům kolem školení Správa uživatelů a služeb.

Toto školení pro mě bylo opakováním, ale dozvěděl jsem se i řadu věcí nových a pochopil jsem i některé souvislosti. Rád bych se zeptal na jednu konkrétní věc:

Budu-li mít ve svém adresáři HOME zanořenu složku - /home/petrcizek/dokumenty/protokoly
do které chci, aby mi studenti uložili své protokoly např. z předmětu Elektrická měření, jak nastavit práva, aby každý žák mohl svůj soubor protokolu do dané složky uložit, modifikovat ho, případně i smazat, soubory protokolů ostatních žáků sice viděl, ale nemohl je prohlížet, ani mazat, a já měl ke všemu plný přístup?

Předem díky za radu.

To jsou v podstatě dvě věci, které jsme probírali, jen spojené dohromady. I když bych spíš doporučoval použít pro takovou věc nějaké jiné místo, než domovský adresář, tak i v tom domovském adresáři je toto možné provést. Zároveň je to dobrý nápad na samostatné cvičení :wink: . Je to kombinace toho, co jsme zmiňovali při právech a při právech ke složce /tmp. Doporučoval bych si to zkusit vyřešit a odzkoušet, nicméně skrývá to několik úskalí na které je potřeba dát pozor.
Jsem velice rád za tuto otázku, krom řešení přidávám i vysvětlení možného problému a jeho řešení.


Kdekoliv bude složka umístěná, studenti musí k ní a všem jim nadřazeným složkám, mít právo do těchto složek vstoupit (právo x). Nebudou si moct vypsat jejich obsah, pokud nebudou mít právo r. Ostatní nemají proč do složek přistupovat, tak nebudou mít práva žádná.

Vezměme v potaz, že celá cesta ke složce bude /a/b/c. To, co jsme si zatím popsali by vypadalo zhruba následovně (pokud studenti jsou např. ve skupině studenti):

[petrcizek@fedora ~]$ ls -lR /a
/a:
total 4
drwx--x---. 3 petrcizek studenti 4096 Oct 12 15:09 b

/a/b:
total 4
drwx--x---. 3 petrcizek studenti 4096 Oct 12 15:09 c

/a/b/c:
total 0

Zároveň je potřeba aby studenti z té poslední složky (v našem případě c) mohli číst (r), i do ní zapisovat (w). Potom zbývá už jen aby v ní mohli mazat jen vlastní soubory (sticky bit). Výpis složky s tímto nastavením by potom vypadal asi takto:

[petrcizek@fedora ~]$ ls -ld /a/b/c
drwxrwx--T. 2 petrcizek studenti 4096 Oct 12 15:19 /a/b/c

Když vyzkouším, jestli všechno funguje jak má, tak to vypadá, že ano:

Za uživatele pepa, který je součástí skupiny studenti:

[pepa@fedora ~]$ cd /a[pepa@fedora a]$ ls
ls: cannot open directory '.': Permission denied
[pepa@fedora a]$ cd b
[pepa@fedora b]$ ls
ls: cannot open directory '.': Permission denied
[pepa@fedora b]$ cd c
[pepa@fedora c]$ ls
[pepa@fedora c]$ touch asdf
[pepa@fedora c]$ ls -al
total 8
drwxrwx--T. 2 petrcizek studenti 4096 Oct 12 15:18 .
drwx--x---. 3 petrcizek studenti 4096 Oct 12 15:09 ..
-rw-rw-r--. 1 pepa      pepa        0 Oct 12 15:18 asdf

Za uživatele karel, který je také student:

[karel@fedora ~]$ cd /a/b/c[karel@fedora c]$ ls -al
total 8
drwxrwx--T. 2 petrcizek studenti 4096 Oct 12 15:18 .
drwx--x---. 3 petrcizek studenti 4096 Oct 12 15:09 ..
-rw-rw-r--. 1 pepa      pepa        0 Oct 12 15:18 asdf
[karel@fedora c]$ cat asdf
[karel@fedora c]$ rm asdf
rm: remove write-protected regular empty file 'asdf'? y
rm: cannot remove 'asdf': Operation not permitted

Ještě za uživatele pepa:

[pepa@fedora c]$ rm asdf

A za uživatele skolnik:

[skolnik@fedora ~]$ cd /a
-bash: cd: /a: Permission denied

POZOR: To, že toto funguje ale neznamená, že je tím všechno vyřešeno. Správně bychom měli zkontrolovat dopad každé z provedených změn. A tím se dostáváme k tomu, co jsem zmiňoval na začátku a to, že není dobrý nápad mít tuto složku v domovském adresáři.

Jednou ze změn bylo přidání práva na vstup (x) do všechn nadřazených složek. Studenti si sice nemohou vypsat obsah téchto nadřazených složek (viz výstupy víše), pokokud ale vědí název složky (souboru) ke které(mu) přístup mají (třeba i omylem), tak mohou s touto složkou (souborem) pracovat. Protože je velice jednoduché udělat chybu (nejen z pohledu uživatele, ale klidně i v konfiguraci programu např.), může mít nějaký soubor špatná práva a pokud student název souboru uhádne, tak si může třeba přečíst jeho obsah. Ukažme si to na příkladu:

Uzivatel petrcizek (protoze uz jsem ho vytvoril kvuli predchozimu prikladu, neberte to osobne :wink: ) si vytvori takovy soubor a ponechá původní práva:

[petrcizek@fedora ~]$ echo "Heslo do databaze je: correct-horse-battery-staple" >/a/tajny_soubor.txt
[petrcizek@fedora ~]$ ls -al /a/tajny_soubor.txt
-rw-rw-r--. 1 petrcizek petrcizek 51 Oct 12 15:46 /a/tajny_soubor.txt

A studentovi potom nic nebrání ho přečíst když ví jeho název:

[pepa@fedora ~]$ cd /a[pepa@fedora a]$ ls
ls: cannot open directory '.': Permission denied
[pepa@fedora a]$ cat tajny_soubor.txt
Heslo do databaze je: correct-horse-battery-staple

Souhra všech těchto náhod se sice může zdát jako triviální, ale hraje právě velkou roli při rozhodování kam složku pro takovéto účely umístit. Pokud to místo cesty /a/b/c bude /skola/predmety/sprava_siti/odevzdavani/projekt2, tak je pravděpodobnost něčeho takového velmi malá (v podstatě by někdo takovou chybu musel udělat schválně). Nyní ale přijde to důležité.

POZOR (2): Pokud bude cesta /home/petrcizek/dokumenty/protokoly tak studenti budou mít přístup do /home/petrcizek a protože je to domovský adresář, tak je v něm uloženo dost souborů s dobře známými názvy. Za zmínku stojí určitě např. .bash_history nebo .bashrc. K prvnímu jsou výchozí práva dostatečně přísná a druhý obsahuje jen příkazy spuštěné po spuštění shellu. Jenže v těchto případech je ale velice jednoduché udělat nějakou chybu. Změna práv k .bash_history se neprojeví ve funkčnosti, takže i když ji někdo omylem zméní (uživatel, synchronizační program, atd.) tak na to nejspíš nepřijde. Vzhledem k tomu, že obsahuje historii příkazů, není neobvyklé aby obsahoval citlivá data (což je mimo jiné důvod k tomu prič má striktní přístupová práva). Např. existenci jiných “skrytých” souborů, hesla, atd. Druhý soubor je čitelný pro všechny a není neobvyklé aby si do něj majitel uložil třeba nějaký token pro nějakou aplikaci do proměnné prostředí, popř. si zjednodušil zadávání hesla v domění, že do jeho domovského adresáře nikdo nemá přístup.

Doufám, že jsem to vysvětlil pochopitelně, i když jsem se trošičku rozepsal. Zkrátka jsem chtěl upozornit na to, že je potřeba pořád a vždycky dávat pozor.