Příkazy pro správu uživatelů a skupin

Jedná se o jednu z nejčastěji používaných skupin příkazů a obvykle jedním z prvních příkazů, které člověk po instalaci systému provede je příkaz pro vytvoření uživatele a pro nastavení hesla.

Vytváření uživatelů

Příkaz pro vytvoření uživatele se nazývá useradd. V některých Linuxových systémech (Slackware) lze nalézt i jeho interaktivní variantu adduser, kdy je tato pro některé uživatele výhodnější, protože si nemusí pamatovat význam jednotlivých parametrů, navíc si mohou zadané hodnoty před samotným vytvořením uživatele zkontrolovat a jsou hned vyzváni i k zadání hesla pro nově vytvářeného uživatele.

V CentOSu sice příkaz adduser také nalezneme, ale jedná se pouze o symbolický link na příkaz useradd.

Díky tomu, že jsou v souboru /etc/login.defs a /etc/default/useradd (hodnoty v tomto souboru lze měnit pomocí příkazu useradd s parametrem -D nebo klasicky přímou editací souboru v nějakém textovém editoru) nastaveny implicitní hodnoty parametrů, které využívá příkaz useradd pro vytváření nových uživatelů, tak je založení uživatele velice jednoduché o čemž svědčí následující příklad:

useradd tachec

Tímto jsme založili uživatele tachec, který bude mít domovský adresář v adresáři /home/tachec a jako výchozí shell mu byl nastaven /bin/bash. Zároveň byl do domovského adresáře nakopírován celý obsah adresáře /etc/skel, který slouží jako šablona (kostra) pro nově vytvářené uživatele. Takže jakékoliv soubory či adresáře (např. public_html), které si v adresáři /etc/skel vytvoříte budou při vytváření nového uživatele defaultně nakopírovány do jeho domovského adresáře a daný uživatel se stane vlastníkem těchto souborů. Parametrem -k můžeme specifikovat cestu k jinému adresáři sloužícímu jako šablona pro nově vytvářené uživatele.

V CentOSu je zároveň s novým uživatelem vytvořena i skupina se stejným jménem jako je jméno nově vytvořeného uživatele a jedná se o primární (inicializační) skupinu daného uživatele. Toto chování můžeme potlačit parametrem -n příkazu useradd. Pak bude inicializační skupina uživatele nastavena na skupinu users.

Pokud chceme při vytváření uživatele specifikovat i další skupiny, jejichž bude členem, tak použijeme parametr -G a za něj uvedeme seznam skupin oddělených čárkou (bez mezer). Pozor, tyto skupiny musí v systému existovat.

Pomocí parametru -u můžeme specifikovat UID nově vytvářeného uživatele, parametrem -c se specifikuje celé jméno uživatele (a případně další údaje), které je pak viditelné při použití programu finger a jemu podobných. Lze samozřejmě specifikovat i domovský adresář uživatele - parametr -d a to zda se má vytvoření tohoto adresáře případně potlačit - parametr -M.

Občas se hodí parametr -p pro zadání hesla. Toto nalezne uplatnění především při dávkovém zpracování příkazu useradd. Pozor, heslo je zapotřebí zadat již v šifrované podobě. Pro zašifrování hesla můžeme využít program openssl jak ukazuje níže uvedený příklad:

useradd -d /home/tachec -c "Uzivatel Tachec" -p `openssl passwd -1 silneheslo` tachec 

Dalším parametrem, který se často využívá je parametr -s, který udává defaultní shell uživatele. Obecně platí, čím míň uživatelů s platným shellem, tím z hlediska bezpečnosti lépe. Takže uživatelům, kteří nemusí mít platný shell (např. FTP, mail, samba, ...uživatelé) jej nastavíme pomocí parametru -s na /sbin/nologin. Někdy se hodí nastavit shell na nějaký vlastní skript nebo na příkaz passwd, který slouží ke změně hesla uživatele a bude probírán níže.

Poslední z parametrů, který stojí za zmínku je parametr týkající se expirace účtu, parametr -e, kterým můžeme nastavit den (ve formátu YYYY-MM-DD), kdy bude účet automaticky zablokován.

Modifikace uživatelů

Pro modifikaci uživatelů se používá příkaz usermod, který má většinu parametrů shodných s parametry příkazu useradd, takže zde zmíním pouze odlišné věci.

Je dobré si dát pozor na parametr -G, sloužící k přidávání nebo odebírání ze skupin, který se pro někoho může chovat možná trochu nelogicky. Pokud chcete uživatele přidat do nějaké skupiny, či více skupin, tak tyto skupiny budou následovat za parametrem -G oddělené čárkami (opět bez mezer) a je-li uživatel již v nějakých skupinách kromě inicializační (primární), tak nesmíte zapomenout přidat parametr -a. Pokud jej nepřidáte, tak bude uživatel vyjmut ze všech skupin, které nevyjmenujete v seznamu skupin. Osvětlení na příkladech:

usermod -G apache,sys,adm -a tachec

Tímto přidáme uživatele do skupin apache, sys a adm. Pokud uživatel zatím není v žádné skupině (kromě inicializační) tak parametr -a můžeme vynechat.

Pokud bychom v budoucnu chtěli uživatele přidat ještě do další skupiny (třeba users) a v příkazu usermod zapomeneme ještě parametr -a, viz příklad níže:

usermod -G users tachec

tak bude uživatel tachec členem pouze své inicializační skupiny a skupiny users. Tzn. tímto způsobem se ze skupin vyjímá.

Pokud budeme chtít vyjmout uživatele tachec ze všech skupin a nechat jej pouze v inicializační skupině tachec, tak použijeme tento příkaz:

usermod -G tachec tachec

Někdy je rychlejší uživatele přidat do skupiny nebo odebrat ze skupiny přímou editací souborů ze skupinami, který leží v souboru /etc/group. Rozbor souborů s uživatelskými účty bude probán níže.

Mazání uživatelů

Uživatele lze ze systému odstranit jednoduše pomocí příkazu userdel. Tento příkaz má pouze jediný parametr a tím je parametr -r při jehož použití dojde i ke smazání domovského adresáře a případně ke smazání fronty příchozích mailů. Pozor, parametr -r nesmaže soubory a adresáře, které tento uživatel vlastní (například v adresáři /tmp). Tyto soubory musíme smazat sami, což s využitím příkazu find není nikterak složitá práce.

userdel -r tachec

Nastavení hesla

Pokud vytvoříte uživatele výše uvedeným příkazem useradd a nepoužijete parametr -p, tak bude heslo uživatele defaultně nastaveno na řetězec !!, což znamená, že se uživatel zatím nepřihlásí. Heslo pro daného uživatele se nastavuje pomocí příkazu:

passwd tachec

Jako uživatel root můžeme nastavit slabé heslo s malým počtem znaků nebo dokonce prázdné heslo, ale z hlediska bezpečnosti se toto samozřejmě nedoporučuje. Každý uživatel si může heslo změnit pomocí příkazu passwd bez parametru. Pokud bude nové heslo příliš jednoduché (bude se jednat o slovo vyskytující se ve slovníku nebo bude příliš krátké, bude osahovat příliš velký počet stejných znaků, či bude vycházet z původního hesla), tak nebude jeho změna systémem akceptována. Tyto restrikce lze přenastavit - úzce souvisejí s knihovnou PAM.

Příkaz passwd slouží kromě změny hesla uživatele také k zablokování účtu a k nastavení expirace hesla a expirace účtu.

Administrátor (tedy uživatel root) zablokuje uživatelský účet pomocí následujícího příkazu:

passwd -l tachec

Tímto příkazem se přidá řetězec !! před heslo uživatele. Odblokování účtu se provede příkazem:

passwd -u tachec

Chceme-li mít uživatele s prázdným heslem, což silně nedoporučuji z hlediska bezpečnosti nastavovat pro uživatele s platným shellem, tak k tomu slouží parametr -d.

Minimální dobu platnosti hesla, tzn. počet dnů, kdy již nelze měnit heslo po dané změně hesla, nastavíme pomocí parametru -n následovně:

passwd -n 14 tachec

Tímto jsem povolil změnu hesla pouze 1x za 14 dnů, ne častěji.

Maximální doba platnosti hesla se používá častěji než doba minimální a slouží k tomu, aby si uživatelé měnili heslo každých n dnů. Takže heslo, které si uživatel musí změnit každých 60 dnů nastavíme takto:

passwd -x 60 tachec

S parametrem -x také úzce souvisí parametr -w, kterým se udává počet dnů (před vypršením platnosti hesla), kdy se začne při zalogování vypisovat upozornění, že dojde v brzké době k expiraci hesla.

Parametrem -i lze nastavit počet dnů po expiraci hesla, kdy dojde k zablokování účtu. Tzn. pokud je nastavena doba platnosti hesla na 60 dnů a parametr -i je nastaven na hodnotu 10, tak bude uživateli účet zablokován v případě, že se nepřihlásil do deseti dnů po expiraci hesla a toto heslo si nezměnil. Takto zablokovaný účet může odblokovat jedině uživatel root. Uživatel je při pokusu o přihlášení na zablokovaný účet samozřejmě informován o tom, že jeho účet byl zablokován a že má kontaktovat správce systému.

passwd -x 60 -w 10 -i 10 tachec  

Někdo používá pro nastavení expirace hesel a účtů uživatelů raději příkaz chage. Volby tohoto příkazu jsou jiné (abychom se stále mohli učit něco nového) než volby příkazu passwd. Minimální doba platnosti hesla se v příkazu chage nastavuje parametrem -m, maximální doba platnosti parametrem -M a podobně. Největší výhodu příkazu chage spatřuji v tom, že při zadání parametru -l vypíše dané doby platnosti pro zadaného uživatele a může jej využít i běžný uživatel pro zjištění expirací týkajících se jeho vlastního účtu.

chage -l tachec

Minimum:        0
Maximum:        60
Warning:        10
Inactive:       10
Last Change:            Apr 23, 2007
Password Expires:       Jun 22, 2007
Password Inactive:      Jul 02, 2007
Account Expires:        Never

Pro mnohé je další výhodou příkazu chage i to, že dokáže pracovat v interaktivním režimu, takže si člověk nemusí pamatovat jeho volby. Interaktivní režim se spustí automaticky, pokud jako parametr tohoto příkazu zadáme pouze jméno uživatele jehož expirační parametry chceme změnit:

chage tachec

Vytváření a modifikace skupin

Pro vytváření skupin slouží příkaz groupadd a jeho použití je poměrně jednoduché:

groupadd devel

Příkaz groupadd má pouze pár parametrů, jedním z nich, který se může hodit je parametr -g pomocí kterého můžeme specifikovat GID, tzn. identifikační číslo skupiny.

Existující skupinu můžeme smazat pomocí příkazu groupdel. Jediným parametrem tohoto příkazu je skupina, kterou chceme smazat.

groupdel devel

Pokud budeme chtít provést modifikaci existující skupiny, tak použijeme příkaz groupmod. Pomocí parametru -g můžeme změnit GID skupiny a pomocí parametru -n lze změnit název skupiny.

groupmod -n vyvojari devel

Přidávání a odebírání uživatelů ze skupin jsme si již ukázali výše, k tomu slouží příkaz usermod. Existuje ještě jeden příkaz, který slouží k přidávání a odebírání uživatelů ze skupin a tím příkazem je gpasswd. Aby nebylo přidávání a odebírání uživatelů ze skupin omezeno pouze na správce systému (uživatele root), tak může správce systému nadefinovat správce jednotlivých skupin, kteří se o dané skupiny budou starat. Následujícím příkazem zvolíme uživatele ondra správcem skupiny users:

gpasswd -A ondra users

Uživatel ondra má pak právo přidat třeba uživatele tachec do skupiny users:

gpasswd -a tachec users

Odebrat ze skupiny lze stejným příkazem jako výše uvedený s tím rozdílem že zaměníme parametr -a za parametr -d.

Se skupinami ještě souvisí příkaz groups díky kterému můžeme zjistit v jakých skupinách se daný uživatel nachází:

groups ondra

ondra : ondra

Podobnému účelu jako příkaz groups slouží i příkaz id, jenž vypisuje UID a GID uživatele a čísla skupin jejichž je členem.

id 

uid=500(ondra) gid=500(ondra) groups=500(ondra)

Informace o uživateli

Jistě si vzpomínáte, že jsem uvedl, že příkazem useradd s parametrem -c se nastavují některé informace o uživateli, jako např. jeho celé jméno a podobně. Pomocí příkazu chfn lze tyto údaje doplnit o číslo kanceláře a číslo soukromého a služebního telefonu.

chfn -f 'Ondrej Krejcik' -o 123 -p 123456789 -h 987654321 tachec

Příkaz chfn je i interaktivní - podobně jako příkaz chage. Informace o uživateli získáme příkazem finger:

finger tachec

Login: tachec                           Name: Ondrej Krejcik
Directory: /home/tachec                 Shell: /bin/bash
Office: 123, 123456789                  Home Phone: 987654321
Never logged in.
No mail.
No Plan.

Defaultní shell

Uživateli nemusí vyhovovat shell, který má od správce nastaven a aby si jej při každém přihlášení nemusel stále ručně měnit, tak lze využít příkaz chsh, kterým se defaultní shell, jenž se spustí po úspěšném přihlášení do systému, změní. Seznam všech dostupných shellů v systému lze získat pomocí parametru -l příkazu chsh.

Změna identity

Při správě systému budeme často potřebovat pracovat pod identitou uživatele root, případně pod identitou jiného uživatele a přesně k tomuto slouží příkaz su. Pozor, v CentOSu doporučuji zadat tento příkaz následovně:

su -

Pokud jej zadáte bez parametru (bez pomlčky), tak se bude dědit proměnné prostředí původního uživatele a pak se můžete divit tomu, že nemáte k dispozici spoustu příkazů. Je to dáno tím, že bežný uživatel nemá v proměnné PATH definovánu cestu do adresářů /sbin, /usr/sbin a /usr/local/sbin.

Ze stejného soudku je příkaz newgrp, který slouží ke změně skupiny pod kterou uživatel působí. Tímto můžeme změnit skupinu na kteroukoliv skupinu jíž jsme členem a pak budou nově vytvářené soubory a adresáře mít nastavenou právě tuto skupinu do níž jsme se přepnuli.

Rozbor souborů s uživatelskými účty

/etc/passwd

Soubor /etc/passwd je hlavním souborem a dříve obsahoval veškeré údaje o uživateli včetně jeho hesla. V současné době je heslo uživatele odděleně (kvůli bezpečnosti, aby uživatelé neměli přístup ani k hashované podobě hesla a neměli tak možnost jej lámat) v souboru /etc/shadow.

Příklad jednoho řádku (co údaj o uživateli to jeden řádek) ze souboru /etc/passwd.

tachec:x:501:501:Ondrej Krejcik,123,123456789,987654321:/home/tachec:/bin/bash

Jak vidíte, veškeré údaje v tomto souboru jsou textové a proto není problém tyto údaje vytvořit ručně bez použití příkazu useradd. Oddělovačem jednotlivých položek je znak : a s výhodou lze využít příkaz cut (o něm se zmíním v sekci příkazů týkajících se zpracování textových souborů) pro parsování jednotlivých položek.

Pojďme ale k významu jednotlivých položek. První položka (tachec) udává uživatelské jméno nebo login, chcete-li. Pod tímto jménem se do systému přihlašujeme a působíme pod ním. Druhá položka (x) dříve obsahovala hashované heslo, ale jak jsem psal výše dnes se heslo ukládá do souboru /etc/shadow, takže se zde nachází pouze znak x. Třetí položka (501) obsahuje tzv. ID uživatele (UID). Toto UID je v systému jedinečné a podle něho systém poznává o jakého uživatele se jedná. Samozřejmě toto by pro správce bylo komplikované, pamatovat si uživatele podle čísel, proto se zobrazuje login, ale systém si vnitřně pracuje s UID. Čtvrtá položka (501) obsahuje GID - tedy číslo primární (inicializační) skupiny uživatele. Pro zopakování, v CentOSu se při vytvoření uživatele vytvoří automaticky primární skupina, která má stejné jméno jako uživatel zatímco v jiných systémech může být primární skupina společná pro všechny uživatele a má název users (GID číslo 100). Pátá položka (Ondrej Krejcik,123,123456789,987654321) obsahuje informace o uživateli (GECOS - General Electric Comprehensive Operating System). V šesté položce (/home/tachec) je uložena cesta k domovskému adresáři uživatele a v poslední sedmé položce (/bin/bash) je umístěn defaultní shell uživatele.

S těmito znalostmi jistě každý dokáže založit uživatele i ručně s využitím textového editoru (třeba vipw). Zápis do souboru /etc/passwd pro správné založení uživatele do systému však nestačí, ještě je zapotřebí provést editaci v souboru /etc/shadow a /etc/group.

/etc/shadow

V tomto souboru je uložený hash uživatelského hesla a časové údaje týkající se platnosti hesla (viz příkaz chage).

tachec:$1$PU5VXUcQ$V5/agah5C/2nlkmO.A6Sv1:13828:0:99999:7:::

První položka (tachec) obsahuje login uživatele, v druhé položce ($1$PU5VXUcQ$V5/agah5C/2nlkmO.A6Sv1) je hash hesla uživatele. Třetí položka (13828) udává počet dnů od 1.1.1970, kdy bylo heslo naposledy změněno. Čtvrtá položka (0) udává počet dnů předtím než může být heslo změněno, tzn. já si jej díky hodnotě nula mohu měnit libovolně často. Pátá položka (99999) udává za jak dlouho toto heslo vyexpiruje, tzn. budu jej muset změnit. 99999 dnů je nějakých 273 let, takže se dá mluvit o tom, že toto heslo za dobu našeho působení nikdy nevyexpiruje :-) Šestá položka udává jaký počet dnů před expirací hesla má začít upozorňovat uživatele o tom, že mu brzy vyprší platnost hesla. A poslední (sedmá) položka udává po kolika dnech po vypršení hesla má účet zablokovat.

Zkuste si pomocí příkazu chage nastavit nějaké hodnoty a podívat se do souboru /etc/shadow, pak vám bude vše zřejmé.

/etc/group

Posledním souborem, v němž se nachází informace o uživateli je soubor /etc/group, který obsahuje informace o skupinách jejichž jsou uživatelé v systému členem.

tachec:x:501:

První položka (tachec) udává název skupiny, druhá položka (x) udává, že heslo pro přístup do skupiny se nachází v souboru /etc/gshadow. Hesla pro skupiny se příliš nepoužívají, protože z hlediska bezpečnosti není dobré, když jedno heslo sdílí více uživatelů. Třetí položka (501) obsahuje číslo (GID) skupiny a v poslední položce je seznam uživatelů (oddělený čárkami) - členů dané skupiny.

/etc/gshadow

V tomto souboru jsou uložená hesla pro přístup do dané skupiny pomocí příkazu newgrp a správci daných skupin.

users::ondra:tachec

První položka (users) udává název skupiny, druhá položka obsahuje případné heslo pro přístup do dané skupiny, třetí položka (ondra) obsahuje seznam administrátorů dané skupiny (oddělený čárkami) a v poslední položce (tachec) je seznam členů dané skupiny (jednotliví uživatelé v seznamu jsou zase odděleni čárkami).

Naposledy změněno: 29.3.2008 7:31