Dnes se podíváme na uživatelské účty. Na Linuxovém systému může mít účet více uživatelů.
Dokonce může systém používat několik uživatelů zároveň. U počítačů, které mají jednu obrazovku a jednu klávesnici se to moc nevidí, ale i existují systémy s více obrazovkami – a častěji servery bez obrazovky, kam se uživatelé připojují vzdáleně. Nebo se živí uživatelé nepřipojují a procesy běží jejich jménem automaticky.
Každý uživatel má své uživatelské jméno.
To svoje jsi zadávala při instalaci systému.
Když chceš zjistit jaké je, můžeš použít příkaz whoami:
$ whoami
hanka
Už víš, že u procesů a souborů je vždy uvedeno jméno uživatele.
Většinou je to tvoje uživatelské jméno nebo root, ale občas zahlédneš i jiné.
$ ps -Af | tail -n6
hanka 2835 2474 0 11:02 pts/1 00:00:00 bash
root 3179 2 0 11:02 ? 00:00:00 [kworker/0:3-cgroup_destroy]
root 3239 972 0 11:04 ? 00:00:00 systemd-userwork
root 3242 972 0 11:05 ? 00:00:00 systemd-userwork
root 3243 972 0 11:05 ? 00:00:00 systemd-userwork
hanka 3288 2835 0 11:06 pts/1 00:00:00 ps -Af
$ ls -l | tail -n6
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Obrázky
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Plocha
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Stažené
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Šablony
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Veřejné
drwxr-xr-x. 1 hanka hanka 0 4. říj 16.35 Videa
$ ls -l /usr/bin | tail -n6
-rwxr-xr-x. 1 root root 70416 29. led 2021 zipnote
-rwxr-xr-x. 1 root root 66256 29. led 2021 zipsplit
-rwxr-xr-x. 1 root root 2210 26. led 2021 zless
-rwxr-xr-x. 1 root root 1846 26. led 2021 zmore
-rwxr-xr-x. 1 root root 4557 26. led 2021 znew
lrwxrwxrwx. 1 root root 6 17. bře 2021 zsoelim -> soelim
U souborů, ve výstupu ls -l, je jméno zopakováno.
První jméno označuje vlastníka souboru; druhé je jméno skupiny
která soubor vlastní.
Každý uživatel má svoji vlastní skupinu, která se používá když
něco není potřeba sdílet skupinově.
Uživatel může být členem více skupin. Podívej se, v jakých skupinách jsi ty:
$ groups
hanka wheel
Skupina wheel je pro uživatele, kteří mají přístup k admistrátorským
oprávněním. Můžou tak např. přidávat další uživatele.
Příkaz groups bere i argumenty – uživatele, jejichž skupiny vypíše.
Koukni se třeba, že uživate root není ve skupině wheel:
$ groups hanka root
hanka : hanka wheel
root : root
Ještě víc informacíti dá příkaz id, který u každého jména
(uživatele nebo skupiny) ukáže i číslo.
Systém používá tyhle čísla.
Jména jsou „pro lidi“ – používají se při výpisech a nastavování.
$ id
uid=1000(hanka) gid=1000(hanka) skupiny=1000(hanka),10(wheel) kontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ id hanka root
uid=1000(hanka) gid=1000(hanka) skupiny=1000(hanka),10(wheel)
uid=0(root) gid=0(root) skupiny=0(root)Informace o „kontextu“ má co dělat s podsystémem SELinux, používaným pro lepší zabezpečení systému. Pro teď ji ignoruj.
Už víš, že si můžeš dávat vlastní příkazy do ~/bin.
Tenhle adresář je ve tvém domovském adresáři, do kterého ostatní uživatelé
počítače nemají přístup.
Kdybys chtěla dát svůj program k dispozici všem uživatelům,
do adresáře /usr/bin/ (nebo jiného sdíleného adresáře v $PATH),
narazíš.
Na podobných sdílených místech nemázádný tvůj proces právo soubory vytvářet,
měnit ani mazat:
$ cp ~/bin/mujprogram /usr/bin/mujprogram
cp: nelze vytvořit obyčejný soubor '/usr/bin/mcd': Operace zamítnuta
$ echo "..." > /usr/bin/mujprogram
bash: /usr/bin/mujprogram: Operace zamítnuta
$ nano /usr/bin/mujprogram # obdobná chyba nastane při uložení
Když budeš chtít podobně měnit systém, musíš poprosit administrátora systému, aby změny udělal. A když jsi administrátorkou ty, budeš na tyhle změny muset proces pustit pod administrátorským uživatelským účtem. Ten je oddělený od toho obyčejného uživatelského, což má dobrý důvod: je menší šance že systém změníš (nebo zničíš) nechtěně.
Jak to udělat, to si řekneme za chvíli; teď ještě něco k oprávněním.
„Práva“ u souborů zobrazuje ls -l v prvním sloupečku:
$ cd ~/Dokumenty/data-shell/
$ ls -l pizza.cfg
-rw-r--r--. 1 hanka hanka 32 Aug 8 2019 pizza.cfg
Pro ls -l bývá nastavený alias ll, který klidně použij.
Nemusí ale být na všech systémech (a na všech účtech),
proto budu ls -l rozepisovat.
Práva (angl. permissions) jsou součástí módu (angl. mode),
který je zobrazen jako ta zkratkovitá sada symbolů: -rw-r--r--.
Pojďme rozluštit, co to znamená.
První znak udává typ souboru:
- znamená normální soubor;d uvidíš u adresářů;p je roura (pipe), c nebo
d označují „zařízení“ značí jako /dev/null nebo terminály (/dev/tty*),
o odkazech (l) si řekneme později.Po prvním písmenku jsou samotná práva: tři trojice písmen rwx,
kde každé může být nahrazeno pomlčkou: rwx, rw-, r--, -w- apod.
První trojice se vztahuje k vlastníkovi, druhá ke skupině a třetí k ostatním
uživatelům.
Podívejme se napřed na první trojici.
rKdyž je první písmenko trojice, r, udává právo ke čtení.
Pomlčka znamená, že nemá právo soubor přečíst.
Můžeš si to vyzkoušet příkazem chmod (z angl. change mode, změnit mód):
chmod -r jméno_souboru právo odebere,chmod +r jméno_souboru právo naopak přidá.$ ls -l pizza.cfg
-rw-r--r--. 1 hanka hanka 32 Aug 8 2019 pizza.cfg
$ chmod -r pizza.cfg
$ cat pizza.cfg
cat: pizza.cfg: Operace zamítnuta
$ ls -l pizza.cfg
--w-------. 1 hanka hanka 32 Aug 8 2019 pizza.cfg
$ chmod +r pizza.cfg
$ ls -l pizza.cfg
-rw-r--r--. 1 hanka hanka 32 8. srp 2019 pizza.cfg
Všimni si že právo ke čtení se vztahuje na obsah souboru. Jméno, mód, vlastníka a ostatní vlastnosti souboru můžeš zjistit i bez práva ke čtení obsahu.
wDruhé písmenko udává právo ke čtení.
Když je zde místo w pomlčka, vlastník do souboru nesmí zapisovat.
Toto oprávnění se dá změnit pomocí chmod -w a chmod +w:
$ chmod -w pizza.cfg
$ ls -l pizza.cfg
-r--r--r--. 1 hanka hanka 32 8. srp 2019 pizza.cfg
$ echo Nový řádek >> pizza.cfg
bash: pizza.cfg: Operace zamítnuta
$ chmod +w pizza.cfg
$ ls -l pizza.cfg
-rw-rw-r--. 1 hanka hanka 32 8. srp 2019 pizza.cfg
$ echo Nový řádek >> pizza.cfg
$ cat pizza.cfg
alpha: 0.5
beta: 0.2
gamma: off
Nový řádek
xPoslední z trojice je právo spuštění, x, které už znáš:
pomocí chmod +x označuješ spustitelné soubory.
$ ./pizza.cfg
bash: ./pizza.cfg: Operace zamítnuta
$ chmod +x pizza.cfg
$ ls -l pizza.cfg
-r-xr-xr-x. 1 hanka hanka 32 8. srp 2019 pizza.cfg
$ ./pizza.cfg # Soubor bez "shebangu" se Bash pokusí spustit jako skript
./pizza.cfg: řádek 1: alpha:: příkaz nenalezen
./pizza.cfg: řádek 2: beta:: příkaz nenalezen
./pizza.cfg: řádek 3: gamma:: příkaz nenalezen
$ chmod -x pizza.cfg
$ ls -l pizza.cfg
-r--r--r--. 1 hanka hanka 32 8. srp 2019 pizza.cfg
Všechny soubory s příkazy jsou spustitelné:
$ type cat gedit
cat je zahashován (/usr/bin/cat)
gedit je /usr/bin/gedit
$ ls -l /usr/bin/cat
-rwxr-xr-x. 1 root root 37032 26. bře 2021 /usr/bin/cat
$ ls -l /usr/bin/gedit
-rwxr-xr-x. 1 root root 16072 2. dub 2021 /usr/bin/gedit
x u adresářůZvláštní význam má právo x u adresářů, u kterých je téměř vždy nastaveno.
Když se budeš dívat na adresáře, bude se hodit přepínač -d,
se kterým ls místo obsahu adresáře popíše adresář samotný.
Vyzkoušej si:
$ ls -l .
$ ls -l -d .
drwxr-xr-x. 8 hanka hanka 4096 6. říj 23.40 .
A co znamená to x?
To je právo adresář procházet, tedy přistupovat k tomu, co je v něm.
Když x pro nějaký adresář odebereš, přijdeš o právo jakkoli pracovat se
soubory (a podadresáři) v něm:
$ chmod -x .
$ ls .
ls: nelze přistoupit k '.': Operace zamítnuta
$ cat pizza.cfg
cat: pizza.cfg: Operace zamítnuta
$ cat ~/Dokumenty/data-shell/pizza.cfg
cat: /home/hanka/Dokumenty/data-shell/pizza.cfg: Operace zamítnuta
To se vztahuje i na adresář . (neboli ./.), takže nejde jen tak
aktuálnímu adresáři právo x zpět přidat:
$ chmod +x .
chmod: nelze přistoupit k '.': Operace zamítnuta
V tomhle případě můžeš do nadřazeného adresáře – to ještě smíš.
Z něj sice nemůžeš “zpět” do data-shell:
$ cd ..
$ cd data-shell/
bash: cd: data-shell/: Operace zamítnuta
Ale můžeš pro data-shell přidat právo x a situaci vrátit „do normálu“:
$ chmod +x data-shell
$ cd data-shell/
$ ls
creatures diplomka_archiv north-pacific-gyre plan.txt writing
data molecules pizza.cfg solar.pdf
$ ls -ld . pizza.cfg
drwxr-xr-x. 8 hanka hanka 4096 6. říj 23.40 .
-r--r--r--. 1 hanka hanka 32 8. srp 2019 pizza.cfg
'rwx' se opakuje 3× – pro vlastníka, skupinu a ostatní.
Vlastník i skupina, která soubor vlastní, jsou ve výstupu ls -l vidět:
$ ls -l pizza.cfg
-rw-rw-r--. 1 hanka hanka 36 8. lis 14.59 pizza.cfg
Práva pro konkrétní kategoriii z těchto tří můžeš nastavit tak, že příkazu
chmod dáš před + nebo - jedno z písmen
u (user – uživatel, vlastník), g (group – skupina)
a o (others, ostatní) nebo a (all – všechny tři). Například:
$ chmod u+x .
$ chmod g+x .
$ chmod o+x .
$ chmod a-x .
Kromě + a - rozumí chmod symbolu =, které práva nastaví na danou sadu
(tj. zadaná přidá a nezadaná odebere).
A několik specifikací se dá spojit pomocí čárky, takže můžeš konkrétní práva nastavit třeba takto:
$ chmod u=rw,g=r,o= pizza.cfg
Když so podíváš na svůj domovský adresář, zjistíš že to do něj nikdo jiný
nevleze: rwx je tu jen pro tebe.
$ ls -ld ~
drwx------. 25 hanka hanka 4096 2. lis 14.31 /home/hanka
Když tahle práva odebereš i sobě (chmod u-rwx ~),
bude tvůj systém podobně nepoužitelný jako kdyby chtěl tvůj uživatelský učet
používat někdo jiný.
Běžící procesy se neukončí, ale můžeš mít problém například
otevřít nový terminál nebo prohlížeč.
Příkaz chmod u+rwx ~ ale vše vrátí do pořádku.
Skupinu můžeš u souboru který vlastníš změnit příkazem
chgrp (z angl. change group, změň skupinu):
$ chgrp wheel pizza.cfg
$ ls -l pizza.cfg
--w-rw----. 1 hanka wheel 36 8. lis 14.59 pizza.cfg
To ovšem pro tebe nic nezmění.
Vždy totiž platí jen první trojice rwx, která se na soubor vztahuje, takže:
rwx platí pro vlastníka,rwx platí pro všechny ze skupiny kromě vlastníka,rwx platí pro všechny ostatní – ty, kdo nejsou ani vlastníkem ani
nepatří do skupiny.A vlastníka souboru změnit nemůžeš.
Tuhle operaci bys totiž nemohla vzít zpět
(to by musel provést nový vlastník), takže tohle lze udělat jen
z administrátorského účtu.
Tam k tomu slouží příkaz chown (z angl. change owner, změň vlastníka)
Pojďme se podívat jak se přihlásit pod jiným účtem;
za domácí úkol si pak s chgrp a chown pohraj.
Kdo jsi – tedy pod jakým účtem jsi přihlášena – ti řekne příkaz id:
$ id
Chceš-li se přihlásit pod jiným účtem, můžeš použít příkaz su.
Kdyby na systému existoval uživatel pepa, mohla bys napsat:
$ su pepa
(su je z angl. set user, ale lépe
se to pamatuje jako moravské „od včil su Pepa“).
Pojď si to vyzkoušet s účtem root, který jsi už viděla ve výstupu
ps a ls:
$ su root
Heslo:
Zjistíš že k účtu root neznáš heslo.
Tak to ukonči pomocí Ctrl+C, zkusíme to jinak.
V nastavení GNOME Shell (tom „klikacím“, z menu vpravo nahoře)
vyber sekci Uživatelé.
Tady můžeš přidávat nové uživatelské účty.
Aktuálně tam bude jen jeden – systémové účty jako root jsou skryté.
Při instalaci systému jsi nastavila, že jsi správce. To znamená že si tvoje procesy můžou zažádat o administrátorská práva; typicky je ale dostanou až po zadání hesla.
Klikni tedy na tlačítko Odemknout a zadej svoje heslo.
Kdykoli se tě systém zeptá na heslo, znamená to že se buď přihlašuješ, nebo dělat něco, co ovlivní celý systém (tj. víc než jen tvůj účet) – a je to tedy potenciálně nebezpečné. Přidání uživatele zas tak nebezpečné není, ale rozhodně to ovlivní víc než jen tvůj účet.
Přes tlačítko Přidat uživatele teď přidej nového uživatele
s uživatelským jménem test1.
Heslo k novému účtu musí být složitější než 1234; zapiš si ho na papír.
Když teď Nastavení zavřeš a otevřeš znovu, možnost měnit ostatní účty budeš muset znovu „odemknout“ a zadat svoje heslo.
Gnome GUI na uživatele.
Jsem administrátor.
Vytvořit nového uživatele test1 – chce to heslo, i když jsem "administrátor".
Co je to administrátor?
Zavřít nastavení, otevřít znovu – chce to heslo znovu. Administrátor – systém mi přidělí oprávnění, když zadám své heslo. „Být“ administrátor chci co nejmíň.
Přepni se teď do příkazové řádky a přepni se na nový účet test.
Když budeš vyplňovat heslo, na obrazovku se nic nevypíše (ani hvězdičky/tečky
jako když zadáváš heslo grafických aplikací).
To je u zadávání hesel do příkazové řádky normální:
$ su test1
Heslo:
$ whoami
test1
Pak se porozhlédni. Zjistíš, že se nezměnil aktuální adresář; dokud v něm budeš, můžeš se dívat na soubory – když už někde „jsi“ systém nekontroluje, jestli tam máš přístup:
$ pwd
/home/hanka/Dokumenty/data-shell
$ ls
creatures molecules notes.txt solar.pdf
data north-pacific-gyre pizza.cfg writing
$ ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1624 1614 0 80 0 - 118849 - tty2 00:00:00 gnome-sess
4 S 0 11788 2835 0 80 0 - 63928 - pts/1 00:00:00 su
4 S 1001 11794 11788 0 80 0 - 58240 - pts/1 00:00:00 bash
4 S 1001 12107 12034 0 80 0 - 56507 - pts/1 00:00:00 ps
Když se ale přepneš do domovského adresáře uživatele test1, zjistíš,
že se nejde přepnout zpátky:
$ cd
$ pwd
/home/test1
$ cd -
bash: cd: /home/hanka/Dokumenty/data-shell: Operace zamítnuta
Navíc tu chybí adresáře jako Obrázky a Video.
Ty totiž vytváří grafické rozhraní – GNOME – které uživatel test
ještě nespustil:
$ ls
$ ls -a
. .bash_logout .bashrc .xauthf9T9mu
.. .bash_profile .mozilla .xauthIdeOEt
Přepni tedy uživatele „graficky“: v menu vpravo nahoře vyber Přepnout uživatele (NE „odhlásit“). Přihláění bude trvat déle – například o vytvoření výše zmíněných adresářů.
Když si teď pustíš Nastavení a budeš chtít odemknout nastavení uživatelů,
bude to po tobě chtít heslo správce, nikoli heslo uživatele test1.
Test totiž nemá právo přidávat účty; na to musí poprosit administrátora.
Přepni se teď zpátky na svůj hlavní účet (přes Přepnout uživatele, ne „odhlásit“).
Zpátky ke konzoli.
Jsi-li v ní stále přihlášena jako test1, napiš exit.
(Příkaz su pouští nový shell; když ho ukončíš, vrátíš se do shellu
ve kterém jsi pustila su.)
$ exit
$ whoami
hanks
Superuživatel root nemá heslo, takže su root nebude fungovat:
$ su root
Zbytek tohoto textu jsou zatím jen zkratkovité poznámky. Dopíšu je pro další běh kurzu.
$ less /etc/passwd
$ less /etc/shadow
$ ls -l /etc/passwd /etc/shadow
Za zmínku stojí superuživatel root, který má zvláštní postavení:
může na systému dělat cokoli.
Oprávnění se na něj nevztahují.
Změnit uživatele může jen administrátor.
Jak tedy funguje su?
$ su test1
$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
hanka 1504 0.0 0.1 371584 2812 tty2 Ssl+ 13:37 0:00 /usr/libe...
hanka 1507 1.1 3.3 1723936 67372 tty2 Sl+ 13:37 1:03 /usr/libe...
hanka 1570 0.0 0.1 467944 3192 tty2 Sl+ 13:37 0:00 /usr/libe...
hanka 15640 0.0 0.3 227968 6084 pts/0 Ss 14:31 0:00 bash
root 18130 0.0 0.4 246780 8444 pts/0 S 15:10 0:00 su test1
test1 18140 0.1 0.2 227404 5396 pts/0 S 15:10 0:00 -bash
test1 18171 0.0 0.1 228432 3980 pts/0 R+ 15:10 0:00 ps -a -u
$ type su
su je /usr/bin/su
$ ls -l /usr/bin/su
-rwsr-xr-x. 1 root root 58384 12. úno 2021 /usr/bin/su
Všimni si zvláštních písmenek v módu: rws – to s místo x znamená
setuid, program se spouští s právy vlastníka.
Je tedy jedno kdo su spustí; proces bude mít vždycky práva superuživatele
root, tj. může dělat cokoli.
Program su ale umí dělat jen jednu věc: zeptá na heslo a spustí shell pod
jiným uživatelským účtem.
Programy s módem setuid jsou napsány zvlášť opatrně, aby umožnily opravdu jen to k čemu slouží.
$ exit
$ whoami
hanka
$ ls -l /usr/bin/sudo
$ whoami
hanka
$ sudo whoami
root
$ sudo ps -a -u
$ sudo ll
$ sudo ls -l
$ sudo less /etc/shadow
Jsme ve virtuálním počítači, pojďme ho trochu rozbít:
$ nano /usr/bin/zkouska
$ sudo nano /usr/bin/zkouska
Když jsem (přes sudo) superuživatelem, su se mě neptá na heslo:
$ sudo su test1
Ale sudo funguje to jen pro administrátory (wheel):
$ sudo su hanka
Uživatel pro kterého funguje sudo se ovšem může přihlásit jako superuživatel!
$ sudo su root
# pwd
# exit
Všimni si výzvy (promptu) # místo $ – občas ho najdeš v tutoriálech;
znamená, že musíš být root.
Dnes se častěji používá sudo před každým příkazem – být administrátorem
je nebezpečné.
Navíc sudo se dá nastavovat – pro každého uživatele říct, jaké příkazy
je oprávněn přes sudo spouštět.
Potřebuješ-li pustit příkaz jako root,
všimni si, že se sudo neptá na heslo pokaždé.
Pro konkrétní terminál si ho vždy nějakou dobu pamatuje, a to i mezi spuštěními.
Potřebuješ-li opravdu pustit nový shell jako root
(např. zachraňuješ počítač),
lepší než sudo su root je sudo -i (interaktivní):
$ sudo -i
# pwd
# exit
Další věc, kterou může dělat jen administrátor, je změna hesla.
Existuje ale příkaz passwd který heslo mění – a má příznak setuid.
$ type passwd
passwd je /usr/bin/passwd
[test1@fedora data-shell]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32712 30. led 2021 /usr/bin/passwd
Zkus si změnit heslo na něco jednoduchého:
$ passwd
Změna hesla uživatele hanka.
Current password:
Nové heslo:
ŠPATNÉ HESLO: Heslo je kratší než 8 znaků
passwd: Chyba manipulace s autentizačním tokenem
Nejde to! Stejně tak nesmíš měnit heslo jiného uživatele:
$ passwd test1
passwd: Pouze root smí zadat uživatelské jméno.
Ale root může vše!
$ sudo passwd test1
Změna hesla uživatele test1.
Nové heslo:
ŠPATNÉ HESLO: Heslo je kratší než 8 znaků
Opakujte nové heslo:
passwd: všechny autentizační tokeny byly úspěšně změněny.
(Hláška ŠPATNÉ HESLO se sice objeví, ale je jen informační – heslo může
být klidně jednopísmenné.)
$ useradd test2
$ sudo useradd test2
$ sudo ls -l /home/test2
$ sudo ls -al /home/test2
$ sudo ls -al ~test2
$ cat /etc/passwd
$ userdel test2
$ sudo ls -al ~test2
$ sudo ls -al /home/test2
$ sudo useradd test2
$ groups
$ groups test1
$ sudo groupadd editors
$ sudo usermod test1 -aG editors
$ groups test1
$ sudo usermod hanka -aG editors
$ groups hanka
$ groups
Uživatel a skupiny pro daný proces jsou vždy nastavené při přihlášení. Aby se změny členství ve skupinách projevily, musíš se znovu přihlásit:
$ groups
$ su hanka
$ groups
$ ps a