Linux: Kniha kouzel, vanilková příchuť 2.14 (15. července 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

15. Správa uživatelských účtů

Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022 do 1. března 2025 ve stavu dlouhodobé pasivní údržby; nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel pro novější verze linuxových operačních systémů, kontaktujte autora nebo rovnou vytvořte odnož.

1. Úvod

Tato kapitola se zabývá vytvářením, zkoumáním a rušením uživatelských účtů a jejich skupin. Dále se zabývá nastavováním účtů a skupin z pozice superuživatele (správce systému) a nastavováním vlastností vlastního účtu (např. hesla) obyčejným uživatelem.

Linuxy jsou víceuživatelské, a než je uživateli umožněna práce se systémem, musí se přihlásit k některému uživatelskému účtu, což určí, jaká oprávnění budou mít programy, které spustí. V Ubuntu a mnoha dalších linuxových distribucích se první uživatelský účet (s UID 1000) vytváří při instalaci, další účty se vytvářejí později. Každý uživatelský účet má svůj domovský adresář, kde se uchovává veškeré nastavení specifické pro daný účet a obvykle rovněž většina uživatelských souborů.

2. Definice

  • Uživatelský účet je v této kapitole systémový účet jednoznačně identifikovaný pomocí uživatelského jména (také „přihlašovacího jména“; pozor, neplést si s „celým jménem“) a také pomocí čísla UID. Existují tři typy uživatelských účtů: běžný účet (UID ≥ 1000), systémový účet (UID 1 až 999) a superuživatel (UID 0). Každý soubor nebo běžící proces přísluší nějakému uživatelskému účtu.
  • Běžné účty slouží k přihlášení osob k systému, a to jak v grafickém, tak i v textovém režimu.
  • Systémové účty slouží k vnitřním účelům systému, zejména k omezení práv některých démonů.
  • Superuživatel „root“ slouží ke správě systému. Má nejvyšší možná oprávnění, neplatí pro něj většina omezení a jako jediný může spouštět procesy s právy jiných uživatelů a skupin bez znalosti jakéhokoliv hesla.
  • Skupina je množina uživatelských účtů, jednoznačně identifikovaná názvem skupiny a také číslem GID. Skupina může být prázdná. Skupiny obvykle slouží k přidělování dodatečných práv k těm, která má daný uživatelský účet sám o sobě; umožňují také efektivně nastavit sdílení adresářů a souborů mezi uživateli. Každý soubor nebo běžící proces přísluší nějaké skupině (vždy jen jedné).
  • Každý uživatel je členem právě jedné výchozí skupiny (login group)(zpravidla stejnojmenné, ale není to podmínkou).

2/1 Uživatelé a hesla

Existují tři stavy zabezpečení uživatelského účtu:

  • Je-li účet zabezpečený heslem (což je obvyklé u běžných účtů), přihlášení k němu je možné jen po zadání daného hesla.
  • Je-li účet uzamčený (což je běžné u systémových účtů a v Ubuntu je to výchozí stav i u superuživatele), přihlásit se k němu není možné; jeho práva však lze získat použitím příkazu sudo.
  • Je-li účet nezabezpečený, přihlášení k němu je možné bez omezení.

3. Zaklínadla: Správa uživatelů

3/1 Vytvořit/vypsat/smazat uživatele

@vytvořit nový běžný uživatelský účet (jen interaktivně)#1 (1)(2)
sudo adduser --gecos "Celé jméno" [--debug] [--shell shell] [--ingroup název-výchozí-skupiny] [--uid konkrétní-UID] nové-přihlašovací-jméno
Zadejte heslo pro nového uživatele. Potvrďte klávesou Enter.
Znovu zadejte totéž heslo a znovu potvrďte.
@vytvořit nový zamknutý běžný uživatelský účet (lze i ze skriptu)#2
sudo adduser --gecos "Celé jméno" --disabled-password [--debug] [--shell shell] [--ingroup název-výchozí-skupiny] [--uid konkrétní-UID] nové-přihlašovací-jméno
@smazat uživatelský účet#3
sudo deluser [--remove-home] uživatelské-jméno
@existuje uživatelský účet? (uspěje, pokud ano)#4
getent passwd uživatel >/dev/null
@vypsat všechny uživatelské účty kromě systémových/úplně všechny#5
getent passwd | sed -E '/^([^:]*:){2}(0|[0-9]{4,}):/!d;s/:.*//' [| LC_ALL=C.UTF-8 sort]
getent passwd | cut -d : -f 1 [| LC_ALL=C.UTF-8 sort]
@vypsat uživatele, kteří jsou právě přihlášeni k systému (pro člověka/pro skript)#6
who
@vytvořit nový systémový uživatelský účet#7
sudo adduser --system [--gid GID-skupiny] [--uid konkrétní-UID] nové-přihlašovací-jméno

3/2 Heslo uživatele

@nastavit heslo (pro člověka)#1
sudo passwd uživatelské-jméno
Dvakrát zadat nové heslo. Pokaždé potvrdit Enter.
@nastavit heslo (pro skript)#2
printf %s\n "uživatelské-jméno:heslo" ["další-uživatelské-jméno:další-heslo"] | sudo chpasswd
@zamknout uživatelský účet#3
sudo passwd -l uživatelské-jméno
@odemknout uživatelský účet (alternativy)#4 (3)
printf %s\n "uživatelské-jméno:nové-heslo" | sudo chpasswd
sudo passwd -u uživatelské-jméno
@nastavit vypršení hesla/okamžitě vypršet (nezkoušeno)#5 (4)
sudo passwd -x dnů-platnosti [-w kolik-dnů-předem-varovat] uživatelské-jméno
sudo passwd -e uživatelské-jméno
@vypnout zabezpečení heslem (umožní přihlášení bez hesla)#6 (5)
sudo passwd -d uživatelské-jméno
@test na typ zabezpečení uživatele: vyžaduje heslo?/je zamčený?/umožňuje přihlášení bez hesla?#7

3/3 Vypsat nastavení uživatelského účtu (kromě hesla)

@vypsat skupiny, ve kterých je účet členem (pro člověka/pro skript)#1
groups uživatel
id -Gn uživatel | tr " " \\n | [LC_ALL=C.UTF-8] sort
@UID#2
id -u uživatelské-jméno
@celé jméno#3
getent passwd uživatel | cut -d : -f 5 | cut -d , -f 1
@domovský adresář#4
getent passwd uživatel | cut -d : -f 6
@uživatelské jméno (podle UID)#5
id -un UID
@získat avatar#6 (6)
[sudo] cp ~uživatelské jméno/.face cíl.png
@vypsat uživatelovu výchozí skupinu (názvem/GID)#7
id -Gn uživatel | sed -E 's/\s.*//'
id -G uživatel | sed -E 's/\s.*//'
@příkazový interpret#8
getent passwd uživatel | cut -d : -f 7

3/4 Změnit nastavení uživatelského účtu (kromě hesla)

@celé jméno (pozor – neplést si s uživatelským jménem!)#1
sudo chfn -f "nové jméno" uživatelské-jméno
@domovský adresář (bez přesunu/přesunout)#2
sudo usermod -d /nový/adresář uživatelské-jméno
sudo usermod -m -d /nový/adresář uživatelské-jméno
@avatar#3
convert obrázek -gravity center -crop "$(identify -format "%[fx:min(w,h)]x%[fx:min(w,h)]" obrázek)" +repage -delete -1 png24:- | [sudo] tee ~uživatelské-jméno/.face
@příkazový interpret (shell)#4
sudo chsh [-s /cesta/k/novému/shellu] uživatelské-jméno
@změnit UID#5 (7)
sudo usermod -u nové-UID uživatelské-jméno
@změnit výchozí skupinu#6 (8)
sudo usermod -g název-nové-vých-skup -G "$(id -Gn uživatelské-jméno | tr ' ' ,)" uživatelské-jméno
@změnit uživatelské jméno#7 (9)
sudo usermod -l nové-už-jméno původní-už-jméno

3/5 Automatické přihlašování

@zapnout (lightdm — jen Lubuntu, Ubuntu Budgie, Ubuntu MATE, Ubuntu Studio, Xubuntu)#1
V souboru „/etc/lightdm/lightdm.conf“ v sekci „[Seat:*]“ nastavte:
autologin-user=uživatelské-jméno
autologin-user-timeout=0
@zapnout (sddm — jen Kubuntu)#2
V souboru „/etc/sddm.conf“ v sekci „[Autologin]“ nastavte:
User=uživatelské-jméno
Session=plasma.desktop
@zapnout (gdm — jen Ubuntu)#3
V souboru „/etc/gdm3/custom.conf“ v sekci „[daemon]“ nastavte:
AutomaticLoginEnable=true
AutomaticLogin=uživatelské-jméno
@vypnout (lightdm — jen Lubuntu, Ubuntu Budgie, Ubuntu MATE, Ubuntu Studio, Xubuntu)#4
V souboru „/etc/lightdm/lightdm.conf“ v sekci „[Seat:*]“ smažte klíče „autologin-user“ a „autologin-user-timeout“.
@vypnout (sddm — jen Kubuntu)#5
V souboru „/etc/sddm.conf“ v sekci „[Autologin]“ smažte klíče „User“ a „Session“.
@vypnout (gdm — jen Ubuntu)#6
V souboru „/etc/gdm3/custom.conf“ v sekci „[daemon]“ nastavte:
AutomaticLoginEnable=false
AutomaticLogin=

4. Zaklínadla: Samospráva uživatele

4/1 Vypsat nastavení

@skupiny, ve kterých je členem (pro člověka/pro skript)#1
groups
id -Gn | tr " " \\n | [LC_ALL=C.UTF-8] sort
@domovský adresář (doporučená varianta/spolehlivá varianta)#2
printf %s\\n "$HOME"
getent passwd $(whoami) | cut -d : -f 6
@uživatelské jméno/UID#3
whoami
id -u
@celé jméno#4
getent passwd $(whoami) | cut -d : -f 5 | cut -d , -f 1
@získat avatar#5 (10)
cp ~/.face cíl.png
@příkazový interpret#6
getent passwd "$(whoami)" | cut -d : -f 7
@výchozí skupina (názvem/GID)#7
id -Gn | sed -E 's/\s.*//'
id -G | sed -E 's/\s.*//'

4/2 Změnit nastavení

@heslo (pro člověka)#1
passwd
Na výzvu zadejte původní heslo. Potvrďte klávesou Enter.
Dvakrát zadejte nové heslo. Každé potvrďte klávesou Enter.
@změnit avatar#2 (11)
convert obrázek -gravity center -crop "$(identify -format "%[fx:min(w,h)]x%[fx:min(w,h)]" obrázek)" +repage -delete -1 png24:- >~/.face
@příkazový interpret (pro člověka)#3
chsh [-s /cesta/k/novému/interpretu]
Na výzvu zadejte svoje heslo a potvrďte klávesou Enter.
@změnit celé jméno (musí povolit správce)#4 (12)
^sudo sed -iE '/^CHFN_RESTRICT/s/\<rwh\>/f&/' /etc/login.defs
chfn -f "Nové celé jméno"
Na výzvu zadejte svoje heslo a potvrďte klávesou Enter.
@změnit celé jméno pomocí sběrnice DBUS#5 (13)
ofa=org.freedesktop.Accounts
ofacesta="$(dbus-send --system --dest=$ofa --type=method_call --print-reply=literal /${ofa//./\/} ${ofa}.FindUserByName "string:$(whoami)" | tr -d " ")"
novejmeno="Nové celé jméno"
dbus-send --system --dest=$ofa --type=method_call --print-reply=literal "$ofacesta" ${ofa}.User.SetRealName "string:${novejmeno//[,=:]/}$(getent passwd "$(whoami)" | sed -E 's/^([^:]*:){4}[^,:]*([^:]*):.*$/\2/')"

5. Zaklínadla: Správa skupin

5/1 Vytvořit/vypsat/zrušit

@vytvořit skupinu (běžnou/systémovou)#1
sudo addgroup [--gid konkrétní-GID] název-nové-skupiny
sudo addgroup --system [--gid konkrétní-GID] název-nové-skupiny
@smazat skupinu#2
sudo delgroup [--only-if-empty] skupina
@vypsat všechny skupiny kromě systémových/úplně všechny#3
getent group | sed -E '/^([^:]*:){2}(0|[0-9]{4,}):/!d;s/:.*//' [| LC_ALL=C.UTF-8 sort]
getent group | cut -d : -f 1 [| LC_ALL=C.UTF-8 sort]
@vypsat GID skupiny podle názvu/název podle GID#4
getent group název-skupiny | cut -d : -f 3
getent group GID | cut -d : -f 1
@existuje skupina?#5
getent group skupina >/dev/null

5/2 Přidat/vypsat/odebrat účty

@přidat účet do skupiny (alternativy)#1 (14)
[sudo] gpasswd -a uživatel skupina
sudo adduser uživatel skupina
@odebrat účet ze skupiny (alternativy)#2 (15)(16)
[sudo] gpasswd -d uživatel skupina
sudo deluser uživatel skupina
@vypsat účty ve skupině (po řádcích)#3
lkk veskupine skupina
@je účet členem skupiny? (podle názvu/podle GID)(uspěje, pokud ano)#4
id -Gn uživatel | fgrep -qw název_skupiny
id -G uživatel | fgrep -qw GID
@vyprázdnit skupinu (odebrat všechny účty)#5
sudo gpasswd -M '' skupina

5/3 Nastavení skupiny (včetně hesla)

@změnit název skupiny#1
sudo groupmod -n nový-název původní-název
@změnit GID skupiny#2 (17)
sudo groupmod -g nové-GID skupina
@nastavit/zrušit správce skupiny#3 (18)
sudo gpasswd -A uživatelské-jméno[,další-správce] název_skupiny
sudo gpasswd -A "" název_skupiny
@nastavit heslo skupiny (pro člověka)#4
sudo gpasswd skupina
Dvakrát zadat nové heslo. Pokaždé potvrdit Enter.
@nastavit heslo skupiny (pro skript)#5
@zrušit heslo skupiny#6 (19)
[sudo] gpasswd -r skupina
@je skupina chráněná heslem?#7

6. Zaklínadla: Ostatní

6/1 Formáty souborů

@formát /etc/passwd#1
přihlašovací-jméno:x:UID:GID-výchozí-skupiny:celé jméno[,další údaje]:/domovský/adresář[:/výchozí/shell]
@formát /etc/group#2 (20)
název-skupiny:x:GID:[první-člen[,další-člen]]

7. Instalace na Ubuntu

Všechny použité nástroje jsou základními součástmi Ubuntu přítomnými i v minimální instalaci, s výjimkou příkazů „convert“ a „identify“, které je potřeba doinstalovat:

sudo apt-get install imagemagick

8. Tipy a zkušenosti

  • Používat hesla skupin se nedoporučuje; jsou neintuitivní, nepraktická a jsou s nimi bezpečnostní problémy.
  • Jméno uživatelského účtu či název skupiny musí začínat malým písmenem anglické abecedy a ve zbytku může obsahovat malá písmena anglické abecedy, číslice, pomlčky a podtržítka.
  • Standardní způsob sdílení určitého adresáře více uživateli spočívá v tom, že vytvoříme skupinu (addgroup), přidáme do ní všechny uživatelské účty (gpasswd -a), které mají adresář sdílet, nastavíme skupinu sdílenému adresáři (chgrp) a nastavíme mu příznak zmocnění skupiny (chmod g+s), aby se skupinová příslušnost rozšířila i na nové podadresáře. V případě malého počtu uživatelů můžeme místo vytvoření nové skupiny použít výchozí skupinu některého z uživatelů.
  • Při výchozím nastavení uživatel nemůže změnit „celé jméno“ vlastního účtu příkazem „chfn“, může ho však změnit z GUI, např. programem „mugshot“.
  • Do každého nově vytvořeného domovského adresáře se nakopíruje obsah adresáře „/etc/skel“.

9. Další zdroje informací

10. Pomocné skripty a funkce

@lkk veskupine – vypíše seznam uživatelských účtů, které jsou v některé z uvedených skupin#1
#!/bin/bash
set -e; for x in "$@"; do getent group "$x"; done >/dev/null; set +e
for x in "$@"
do
gid=$(getent group "$x" | cut -d : -f 3)
sed -E "/^([^:]*:){3}${gid}:/!""d;s/:.*//" /etc/passwd
getent group "$gid" | cut -d : -f 4 | sed -E '/^$/d;s/,/\n/g'
done | LC_ALL=C.UTF-8 sort -u

11. Zákulisí kapitoly

V této verzi kapitoly chybí:

  • vysvětlení významu důležitých systémových skupin (jako např. skupiny „sudo“)

Tato kapitola záměrně nepokrývá:

  • nastavování přihlašování do systému a většina nastavení specifických pro určité grafické prostředí (např. nastavení pozadí plochy)
1 Pozor! Celé jméno uživatele nesmí obsahovat znaky čárka a rovná se (, a =), nemělo by obsahovat ani znak dvojtečka. Při použití ne-ASCII znaků program vypíše varování, což je ale na dnešních systémech dost absurdní; doporučuji toto varování ignorovat.
2 Pokud nezadáte parametr „--ingroup“, s vytvořením nového uživatele se pro něj rovněž vytvoří nová, stejnojmenná výchozí skupina.
3 Poznámka: Ve většině případů je správným postupem odemknutí hesla jeho nové nastavení. Příkaz „sudo passwd -u“ je možno použít pouze u účtů, které byly zamknuty příkazem „sudo passwd -l“, v případech, kdy chceme zachovat původní heslo.
4 Vyprší-li platnost hesla, uživatel bude po příštím přihlášení donucen si heslo změnit. Poznámka: vypršení hesla jsem podrobně nezkoušel/a.
5 Varování: Než použijete tento příkaz, dobře si rozmyslete, co děláte. Uživatelský účet bez hesla může představovat závažnou bezpečnostní díru ve vašem systému. Nepoužívejte tuto možnost, pokud vám stačí automatické přihlášení („autologin“).
6 Avatar čtvercový obrázek je ve formátu PNG. Počet pixelů tvořících stranu čtverce může být různý.
7 Tento příkaz také rekurzivně projde domovský adresář uživatele a všechny adresářové položky, jejichž je daný uživatel vlastníkem, přepíše na nové UID, aby uživatel jejich vlastníkem zůstal.
8 Tento příkaz také rekurzivně projde domovský adresář uživatele a všechny adresářové položky příslušné k původní výchozí skupině přepíše na novou výchozí skupinu.
9 Tento příkaz nepřejmenuje domovský adresář uživatele!
10 Avatar čtvercový obrázek je ve formátu PNG. Počet pixelů tvořících stranu čtverce může být různý.
11 Pozor, pokud konverze obrázku selže, uvedený příkaz smaže váš současný avatar bez náhrady.
12 Ve výchozím nastavení Ubuntu je tento příkaz běžným uživatelům zakázaný. Uživatelé však mohou svoje celé jméno změnit pomocí sběrnice DBUS nebo v GUI programem „mugshot“ ze stejnojmenného balíčku. Změna pomocí „chfn“ se povolí tak, že v souboru „/etc/login.defs“ do konfigurační volby „CHFN_RESTRICT“ doplníte písmeno „f“ nebo ji nastavíte na hodnotu „no“.
13 Tato metoda sice také určité oprávnění požaduje, ale ve výchozím nastavení v Ubuntu všichni uživatelé toto oprávnění mají, takže si svoje celé jméno mohou změnit. Navíc nevyžaduje zadání hesla.
14 Použít „gpasswd“ bez sudo je oprávněn pouze správce skupiny.
15 Použít „gpasswd“ bez sudo je oprávněn pouze správce skupiny.
16 Uživatele nelze odebrat z jeho výchozí skupiny. Pokud to chcete udělat, musíte mu nejprve nastavit jinou výchozí skupinu.
17 Poznámka: příslušnost souborů na disku ke skupinám se ukládá ve formě GID a tímto příkazem se nezmění, takže se ztratí příslušnost těchto souborů ke skupině (soubory budou odkazovat na původní GID, ale skupina již bude identifikována jiným).
18 Správce skupiny může přidávat do skupiny a odebírat ze skupiny odstatní uživatele a nastavovat skupině heslo, ale to vše pouze s pomocí příkazu „gpasswd“.
19 Použít „gpasswd“ bez sudo je oprávněn pouze správce skupiny.
20 Výchozí skupina uživatele nemusí být v souboru /etc/group uvedena. Uživatelský účet je jejím členem i v případě, že zde uvedena není!
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.
[BY-SA]

Veškerý obsah této stránky (text, obrázky, zdrojový kód) je možno upravovat a šířit pod podmínkami licence Creative Commons Attribution-ShareAlike 4.0 International. Upozorňuji, že uvedená licence vyžaduje uvedení seznamu autorů, licence a zdroje a poskytnutí stejné či kompatibilní licence k provedeným změnám, jsou-li nějaké. Příslušné údaje jsou dostupné na stránce „Přehled autorů“. Šíření obsahu bez těchto údajů nebo šíření upravené verze bez poskytnutí adekvátní licence k provedeným úpravám je pravděpodobně porušení licenčních podmínek a může být postihováno. Poskytování zdrojového kódu při šíření není touto licencí vyžadováno.

Pro nové verze, další informace, aktuální zdrojový kód a možnost se zapojit do projektu „Linux: Kniha kouzel“ navštivte jeho repozitář na GitHubu.