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).