Jak změnit uživatelská data pomocí chfn a usermod v systému Linux

Uživatelský účet v operačním systému Linux neobsahuje pouze uživatelské jméno. Existuje celá řada informací, které s ním mohou být spojeny. V tomto článku se podíváme na to, jak lze spravovat tato metadata, a to přímo z příkazové řádky.

Co všechno se skrývá za uživatelským jménem?

Pokud používáte operační systém Linux nebo Unix, máte přidělený uživatelský účet. Toto jméno je identifikátorem, pod kterým se přihlašujete. Zároveň (ve výchozím nastavení) slouží jako jméno vaší přihlašovací skupiny a vašeho domovského adresáře. Všechny tyto aspekty sdílejí stejný identifikační údaj.

Kromě základních informací může každý uživatelský účet obsahovat i další doplňující informace. Například se může jednat o jméno a příjmení, číslo kanceláře, nebo pracovní telefonní číslo. Je možné přidávat i zcela libovolné doplňující informace.

Tato funkcionalita se nejvíce hodí systémovým administrátorům, kteří spravují systémy s mnoha uživatelskými účty. Ale i uživatelé, kteří mají svůj osobní Linuxový systém, ocení možnost nahlédnout pod pokličku systému a mít kontrolu nad těmito nastaveními.

Historické okénko: Pole GECOS

V počátcích Unixu neměli vývojáři k dispozici vlastní tiskárny. Své tiskové úlohy museli posílat do sálového počítače General Electric, na kterém běžela General Comprehensive Operating System (GECOS). Uživatelé Unixu si tedy museli ukládat své přihlašovací údaje, aby je mohli používat v systému GECOS.

Právě pro tento účel bylo vytvořeno pole GECOS. S postupem času tato specifická potřeba zanikla a pole GECOS začalo sloužit k ukládání dalších informací o majiteli uživatelského účtu. I když jeho využití se změnilo, název pole zůstal stejný. Stále je to pole GECOS.

Toto pole je uloženo v souboru `/etc/passwd` společně s dalšími údaji uživatelského účtu:

  • Uživatelské jméno.
  • Uživatelské ID.
  • Skupinové ID.
  • Cesta k domovskému adresáři uživatele.
  • Shell, který se spustí při přihlášení.

Právě z tohoto místa čerpají data příkazy jako finger a pinky, které zobrazují informace o uživatelích.

Příkaz chfn

Pro úpravu informací v poli GECOS slouží příkaz `chfn` (change finger information). Umožňuje vám nastavovat a měnit informace v poli GECOS. Data jsou v tomto poli uložena jako seznam hodnot oddělených čárkami.

Příkaz `chfn` bývá standardně součástí distribucí jako Ubuntu a Manjaro. V případě distribuce Fedora je nutné ho doinstalovat. Lze to provést pomocí následujícího příkazu:

sudo dnf install util-linux-user

Podívejme se, jaké informace může příkaz `finger` zjistit o uživateli s jménem „dave“. Abychom zobrazili co nejvíce informací, použijeme volbu `-l` (dlouhý formát):

finger dave -l

Můžete vidět například:

Vidíme uživatelské jméno, domovský adresář a výchozí shell. Tyto informace souvisí s uživatelským účtem, ale neříkají nic o skutečné osobě, která účet používá. Pro uložení informací o této osobě můžeme použít příkaz `chfn`.

chfn dave

Použitím příkazu `chfn` bez dalších voleb spustíme interaktivní proces. Budeme vyzváni k zadání hodnot pro jednotlivé položky pole GECOS. Aktuální hodnota je zobrazena v hranatých závorkách `[]`. Pokud nechcete hodnotu měnit, stačí stisknout klávesu Enter a původní hodnota zůstane zachována.

My jsme do systému zadali následující informace:

Číslo pokoje: 512
Pracovní telefon: 555-4567
Telefon domů: 555-5432

Nyní si ověříme, že příkaz `finger` načetl nová data:

finger dave -l

Vidíme, že se nové informace zobrazují. Všimli jste si ale, že jsme nebyli dotázáni na jméno a příjmení? To se stane pouze, pokud použijeme příkaz `sudo`. Nemusíme však znovu spouštět celý proces, pokud jsme na sudo zapomněli. Můžeme jednotlivé hodnoty měnit i samostatně.

Samostatná změna hodnot

Jméno a příjmení majitele uživatelského účtu můžeme nastavit pomocí volby `-f` (full name) a s příkazem `sudo`.

sudo chfn -f "Dave McKay" dave

A opět si ověříme pomocí `finger`:

Vidíme, že jméno a příjmení se přidalo. Podobným způsobem můžeme měnit i číslo pokoje, pracovní i domácí telefonní číslo. Pro změnu čísla pokoje použijeme volbu `-r` (room number):

sudo chfn -r 633 dave

V některých distribucích se může místo volby `-r` používat volba `-o` (office number). Pro ověření voleb ve vaší verzi příkazu `chfn` zadejte:

man chfn

Pro změnu pracovního telefonního čísla použijte volbu `-w` (work phone):

sudo chfn -w 555-1122 dave

A nakonec pro změnu domácího telefonního čísla použijte volbu `-h` (home phone number):

sudo chfn -h 555-6576 dave

Opět si pomocí `finger` ověříme, že se všechny změny uložily:

finger dave -l

Všechny příkazy fungovaly a hodnoty se aktualizovaly.

Změna dat ostatních uživatelů

Dosud jsme měnili údaje vlastního uživatelského účtu. Jak ale změnit data GECOS u ostatních uživatelů? Je to stejně jednoduché. Jediný rozdíl je v tom, že musíte použít příkaz `sudo`. Podívejme se, jaká data jsou nastavena pro uživatelský účet „mary“:

finger mary -l

Vidíme, že u tohoto účtu jsou nastaveny pouze výchozí informace. Nyní je doplníme:

sudo chfn mary

Projdeme stejným procesem, jako předtím, budeme vyzváni k zadávání hodnot pro jednotlivé položky a protože používáme příkaz `sudo`, budeme dotázáni i na celé jméno.

Počkejte, co je ta poslední položka s názvem „Jiné?“

Tato položka není podporována všemi verzemi příkazu `chfn`. Zobrazí se pouze pokud používáte `sudo`. Proto jsme ji neviděli při předchozím použití příkazu:

chfn dave

Do datové hodnoty „Jiné“ si můžete uložit jakoukoliv informaci. Nemá žádné předepsané, ani očekávané využití.

Verze `chfn`, které podporují pole „Jiné“, mají také volbu `-o` (other) pro jeho přímou změnu. Kvůli konfliktu mezi volbou `-o` pro „číslo kanceláře“ a volbou `-o` pro „jiné“, používají některé systémy pro „číslo pokoje“ volbu `-r`.

Data uložená pro uživatelský účet „mary“ si můžeme prohlédnout v souboru `/etc/passwd` pomocí příkazu `less`:

less /etc/passwd

Na systémech, které to podporují (podívejte se do manuálové stránky vašeho příkazu `chfn`), můžeme nastavit pole „other“ přímo pomocí volby `-o` (other):

sudo chfn -o "HTG Freelancer" dave

A ověříme si data pro uživatelský účet „dave“ opět pomocí `less`:

less /etc/passwd

To ale vyvolává otázku. Pokud vaše verze `chfn` nepodporuje pole „Jiné“, jak ho můžeme změnit? Můžeme to udělat pomocí příkazu `usermod`.

Příkaz usermod

Příkaz `usermod` nám umožňuje upravovat různé aspekty uživatelského účtu. Můžeme například přidávat nebo odebírat uživatele ze skupin, nebo měnit výchozí shell. Lze ho také použít pro přímou manipulaci s polem GECOS.

Podívejme se blíže na řádek v souboru `/etc/passwd` pro uživatelský účet „mary“. Použijeme příkaz grep, abychom si vybrali pouze daný řádek. To je možné, protože uživatelská jména musí být unikátní. Může existovat pouze jeden uživatelský účet s jménem „mary“.

grep mary /etc/passwd

Zobrazí se nám pole v souboru `/etc/passwd`. Jako oddělovač polí se používá dvojtečka `:`. Zleva doprava jsou to pole:

  • Uživatelské jméno účtu.
  • Písmeno „x“, které značí, že heslo je šifrované v souboru `/etc/shadow`.
  • Uživatelské ID pro účet „mary“.
  • Skupinové ID pro účet „mary“.
  • Pole GECOS.
  • Cesta k domovskému adresáři.
  • Shell, který se spustí při přihlášení uživatele.

Jako oddělovač hodnot v poli GECOS se používá čárka `,`. Hodnoty v poli GECOS jsou zleva doprava:

  • Celé jméno.
  • Číslo pokoje (nebo kanceláře).
  • Pracovní telefonní číslo.
  • Domácí telefonní číslo.
  • Další informace.

Je důležité si uvědomit, že příkaz `usermod` nastaví celé pole GECOS na novou zadanou hodnotu. Pokud zadáte pouze jméno a příjmení, pak jedinou informací v poli GECOS bude jméno a příjmení. To znamená, že musíte zadat všechny existující hodnoty, které chcete zachovat.

Příklad: Uživatelka Mary byla povýšena a stěhuje se do čtvrtého patra. Dostává nové číslo do kanceláře, nové pracovní telefonní číslo a přidáme i její druhé jméno. Změní se i hodnota v poli „Jiné“. Její domácí telefonní číslo se sice nezměnilo, ale musíme ho také uvést v příkazu.

Použijeme volbu `-c` (comment) a příkaz spustíme s `sudo`.

sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary

Použijeme příkaz `grep` pro zobrazení obsahu souboru `/etc/passwd` pro uživatelku Mary, abychom se přesvědčili, že byly nové hodnoty přidány.

grep mary /etc/passwd

Závěr

Nepřesná data jsou k ničemu. Když se mění informace o lidech – stěhování kanceláře, změny jmen, pozic atd. – je snadné aktualizovat jejich metadata, aby odrážela aktuální stav.