Jak přidat, upravit a odebrat uživatele v Linuxu?

Správa uživatelských účtů je základní součástí rutinních úkolů každého správce systému, a to bez ohledu na používaný operační systém.

V kontextu operačního systému postaveného na Linuxu se tato správa typicky skládá z vytváření nových uživatelských profilů, modifikace stávajících účtů (například změna domovského adresáře, preferovaného prostředí, uzamčení či odemčení účtu, a také z procesu úplného odstranění uživatelských účtů.

Než se podrobněji podíváme na konkrétní příkazy a postupy pro realizaci těchto úkolů, pojďme se krátce věnovat klasifikaci uživatelských účtů v Linuxu. Mějte také na paměti, že pokud není výslovně uvedeno jinak, uvedené příkazy budou fungovat v drtivé většině běžně používaných distribucí Linuxu.

Typologie Uživatelů

Uživatel Root

Uživatel root disponuje v rámci operačního systému nejvyššími správcovskými pravomocemi. Pouze uživatel root má obvykle možnost instalovat, odinstalovat nebo provádět aktualizace klíčových systémových programů a knihoven. Jedná se o jediný uživatelský účet, který má neomezená oprávnění v celém systému.

Z toho vyplývá, že uživatel root je nejmocnějším uživatelem v daném systému.

Speciální Uživatelé

Tito uživatelé nemají klasické přihlašovací údaje a nedisponují plnými právy uživatele root. Každý z těchto uživatelských účtů má přidělenou specifickou roli.

Tyto účty se vytvářejí automaticky při instalaci aplikací. Mezi příklady speciálních uživatelů patří například bin, sync, lp, mail, operator nebo squid.

Běžní Uživatelé

Běžní uživatelé mají úplná oprávnění pouze v rámci svého pracovního adresáře, obvykle v jejich domovském adresáři. Nemají oprávnění spravovat systém ani instalovat nový software bez speciálních oprávnění, která jim poskytuje například nástroj sudo.

Přidání Nového Uživatel

Debian/Ubuntu

V systémech založených na Debianu nebo Ubuntu existuje několik možností, jak z příkazové řádky (CLI) přidat nového uživatele. Prvním z nich je příkaz adduser, který je v podstatě skript v Perlu a interně využívá příkaz useradd. Právě příkaz useradd si ukážeme později.

Vzhledem k tomu, že přidávání uživatelů vyžaduje administrátorská oprávnění, je nutné příkaz uvést pomocí sudo a přidat uživatelské jméno jako argument. Další detaily se zadávají na výzvu. Kromě jména a hesla jsou ostatní údaje volitelné. Úspěšné vytvoření nového uživatele lze ověřit pomocí příkazu id.

$ sudo adduser johndoe
Adding user `johndoe' ...
Adding new group `johndoe' (1003) ...
Adding new user `johndoe' (1003) with group `johndoe' ...
Creating home directory `/home/johndoe' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for johndoe
Enter the new value, or press ENTER for the default
        Full Name []: John Doe
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y
$
$ id johndoe
uid=1003(johndoe) gid=1003(johndoe) groups=1003(johndoe)
$

CentOS/RHEL/Fedora (včetně Debian/Ubuntu)

Příkaz useradd funguje napříč distribucemi operačních systémů založených na RHEL, a stejně dobře funguje i na systémech Ubuntu/Debian. Nejjednodušší syntaxe pro vytvoření nového uživatele (bez dalších možností) je:

$ sudo useradd <uživatelské_jméno>

Příklad:

$ sudo useradd janedoe

Příkaz useradd umožňuje specifikovat celou řadu parametrů při vytváření uživatele. Mezi nejběžnější patří uživatelské ID (UID), ID skupiny (GID), výchozí shell a domovský adresář. Níže je uveden příklad:

$ sudo useradd -s /bin/sh -d /data/newhome -c "Jane Doe" -u 1005 janedoe

Nově vytvořeného uživatele můžete ověřit pomocí příkazu id:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

Modifikace Uživatele

Často je potřeba upravit některé charakteristiky existujících uživatelů na základě požadavků organizace, uživatelských potřeb nebo systémových migrací. Většina těchto vlastností se dá upravit poměrně snadno, je ovšem potřeba si uvědomit dopad změn na uživatelské prostředí a přístup k souborům, které daný uživatel vlastní nebo ke kterým má přidělená oprávnění.

Výchozí Shell

Výchozí shell je interpretem příkazů, který se spouští při zahájení nové relace v příkazové řádce, ať už lokálně nebo prostřednictvím SSH. Většina moderních systémů používá jako výchozí shell Bash, i když se to může lišit v závislosti na konkrétní distribuci Linuxu nebo preferencích uživatele. Pro změnu výchozího shellu uživatele použijte:

$ sudo usermod -s <shell> <uživatelské_jméno>

Příklad:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/sh
$ sudo usermod -s /bin/bash janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/bash
$

Jak je vidět z výše uvedeného výstupu, shell uživatele janedoe byl změněn z /bin/sh na /bin/bash.

Domovský Adresář

Stejně jako výchozí shell lze i domovský adresář uživatele přesunout do jiného umístění pomocí:

$ sudo usermod -d <cesta_k_novému_adresáři> <uživatelské_jméno>

V níže uvedeném příkladu byl domovský adresář uživatele janedoe změněn na /data/janedoe:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/bash
$ sudo usermod -d /data/janedoe janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$

Před změnou se ujistěte, že nový adresář má nastaveno správné vlastnictví a oprávnění. V opačném případě může uživatel čelit problémům při přihlašování nebo práci v novém domovském adresáři.

Uživatelské ID

Uživatelské ID stávajícího uživatele můžete změnit pomocí:

$ sudo usermod -u <nové_uid> <uživatelské_jméno>

Příklad:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -u 1010 janedoe
$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$

Změna UID má dopad na způsob, jakým Linuxový souborový systém mapuje vlastnictví a oprávnění souborů nebo adresářů. Ujistěte se, že domovský adresář uživatele a veškerý jeho obsah, včetně všech ostatních souborů v celém systému, původně vlastněných daným uživatelem (se starým UID), byly nastaveny na nové UID. Opomenutí může způsobit problémy v relaci příkazové řádky a při přístupu uživatele k souborům.

Výchozí Skupina

Výchozí skupina je standardně skupinové ID uživatele, které se vytvoří během vytváření uživatelského účtu, pokud není zadáno jiné GID. Linux umožňuje změnit výchozí skupinu uživatele pomocí příkazu usermod. Syntax je následující:

$ sudo usermod -g <nové_gid_nebo_název_skupiny> <uživatelské_jméno>

Zde je jeden příklad:

$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$ sudo usermod -g 1001 janedoe
$ getent passwd janedoe
janedoe:x:1010:1001::/data/janedoe:/bin/bash
$

Opět se ujistěte, že je nové ID skupiny nastaveno v domovském adresáři daného uživatele a všech jeho souborech či adresářích, aby se oprávnění k vlastnictví správně aktualizovala.

Přidávání/Odebírání Skupin

Kromě výchozí skupiny může být uživatel v Linuxu členem i sekundárních skupin. Pomocí příkazu usermod lze vždy přidat nebo odebrat další skupiny, do kterých uživatel patří.

$ sudo usermod -a -G <id_skupiny_nebo_název_skupiny> <uživatelské_jméno>

Příklad:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -a -G docker janedoe
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$

Podobně, pokud chcete odebrat uživatele z jedné z jeho sekundárních skupin, použijte příkaz gpasswd, jak je ukázáno níže:

$ sudo gpasswd -d <uživatelské_jméno> <název_skupiny>

Příklad:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$ sudo gpasswd -d janedoe docker
Removing user janedoe from group docker
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

Komentář GECOS

Pole GECOS v souboru /etc/passwd obsahuje doplňující informace o uživateli nebo komentář. Tyto informace můžeme pro stávajícího uživatele upravit pomocí:

$ sudo usermod -c <komentář> <uživatelské_jméno>

Příklad:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -c "Jane Doe - System Admin" janedoe
$ getent passwd janedoe
janedoe:x:1005:1005:Jane Doe - System Admin:/data/janedoe:/bin/bash
$

Mějte na paměti, že pokud komentář obsahuje mezery, je potřeba ho vložit do uvozovek, jak je ukázáno v příkladu výše.

Přihlašovací Jméno

Přihlašovací jméno uživatele lze také změnit pomocí příkazu usermod s parametrem -l:

$ sudo usermod -l <nové_uživatelské_jméno> <původní_uživatelské_jméno>

Příklad:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -l jane_doe janedoe
$ id jane_doe
uid=1005(jane_doe) gid=1005(janedoe) groups=1005(janedoe)
$

Nezapomeňte aktualizovat uživatelské reference v závislosti na novém jménu, ať už se používají kdekoliv. I v příkazech jako id by mělo být použito nové uživatelské jméno.

Odstranění Uživatel

Uživatele lze z Linuxu odebrat pomocí příkazu userdel.

$ sudo userdel <uživatelské_jméno>

Příklad:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo userdel janedoe
$ id janedoe
id: ‘janedoe’: no such user
$

Chcete-li odebrat uživatele společně s jeho domovským adresářem a poštovní schránkou, přidejte také parametr -r.

$ sudo userdel -r <uživatelské_jméno>

Konkrétně pro systémy založené na Ubuntu, můžete k odebrání uživatele použít také příkaz deluser:

$ sudo deluser <uživatelské_jméno>

Podobně pro smazání domovského adresáře a poštovní schránky použijte:

$ sudo deluser --remove-home <uživatelské_jméno>

Podrobné informace a další podporované možnosti naleznete v manuálových stránkách jednotlivých příkazů pomocí:

$ man adduser
$ man useradd
$ man usermod
$ man deluser
$ man userdel

Závěr

Tento článek ukázal různé aspekty správy uživatelů v systému Linux. Vysvětlili jsme různé kategorie uživatelů a způsob jejich přidávání a odebírání. Popsali jsme také různé možnosti, které slouží k modifikaci parametrů stávajícího uživatele. I když jsme nezmínili všechny parametry podporované jednotlivými příkazy, pokryli jsme většinu běžných administrativních úkolů, které se správce systému setká během své každodenní práce.

Mohlo by vás také zajímat: Jak odstranit soubory a adresáře v Linuxu?