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í . 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 ) 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.