Smazání uživatelského profilu v Linuxu je komplexnější, než by se na první pohled mohlo zdát. Správci systému by měli usilovat o odstranění všech stop po účtu a jeho přístupových práv. V tomto článku si ukážeme, jak toho dosáhnout krok za krokem.
Pokud je vaším cílem pouze odstranění uživatelského účtu ze systému bez ukončování spuštěných procesů nebo provádění dalších úklidových operací, postupujte podle instrukcí v sekci „Odstranění uživatelského účtu“. V distribucích založených na Debianu se používá příkaz `deluser`, zatímco v ostatních distribucích Linuxu se používá příkaz `userdel`.
Uživatelské účty v Linuxu
S nástupem prvních systémů sdílení času v 60. letech 20. století, které umožnily více uživatelům pracovat na jednom počítači, vyvstala potřeba izolovat a oddělit soubory a data jednotlivých uživatelů od ostatních. Tak se zrodily uživatelské účty a hesla.
Uživatelské účty s sebou nesou administrativní zátěž. Je nutné je vytvářet, když uživatel potřebuje přístup k systému, a rušit, když tento přístup již není nutný. V Linuxu existuje přesně stanovený postup pro správné a systematické odstranění uživatele, jeho souborů a účtu z počítače.
Jako správce systému nesete za tento proces zodpovědnost. Následuje detailní návod, jak na to.
Náš modelový případ
Důvodů pro smazání účtu může být mnoho. Zaměstnanci se mohou přesouvat do jiných týmů nebo opouštět společnost. Účet mohl být vytvořen pro krátkodobou spolupráci s externím pracovníkem. Běžné je to také v akademickém prostředí, kde výzkumné projekty často propojují různé katedry, univerzity a komerční subjekty. Po skončení projektu je pak povinností správce systému provést úklid a smazat nepotřebné účty.
Nejhorší scénář nastává, když někdo odchází z důvodu vážného pochybení. Takové události obvykle přicházejí náhle a bez varování. Správce systému má pak málo času na přípravu a musí účet okamžitě uzamknout, zrušit a smazat – s tím, že kopie uživatelských souborů je zálohována pro případné forenzní analýzy.
V našem modelovém případě si představíme, že uživatel jménem Eric spáchal něco, co vyžaduje jeho okamžité odvolání z pracoviště. V tuto chvíli o tom nemá tušení, pracuje a je přihlášený. Jakmile dáte znamení ochrance, bude vyveden z budovy.
Vše je připraveno. Všechny oči jsou upřeny na vás.
Ověření přihlášení
Nejprve zkontrolujeme, zda je Eric skutečně přihlášen a s kolika relacemi pracuje. K tomu použijeme příkaz `who`, který zobrazí seznam aktivních relací.
who
Eric je přihlášený jednou. Nyní se podíváme na jeho běžící procesy.
Kontrola uživatelských procesů
Pomocí příkazu `ps` zobrazíme seznam procesů spuštěných daným uživatelem. Volba `-u` (uživatel) nám umožní omezit výstup na procesy spuštěné pod účtem Erica.
ps -u eric
Alternativně můžeme použít příkaz `top`, který zobrazuje stejné procesy s podrobnějšími informacemi. `top` má také volbu `-U` (uživatel), která omezí výstup na procesy vlastněné konkrétním uživatelem. Všimněte si, že tentokrát jde o velké „U“.
top -U eric
Vidíme využití paměti a CPU každým procesem a můžeme rychle identifikovat jakoukoli podezřelou aktivitu. Chystáme se násilně ukončit všechny Ericovy procesy, proto je dobré provést rychlou kontrolu, abychom se ujistili, že ukončením procesů uživatelského účtu Eric nebudeme rušit ostatní uživatele.
Zdá se, že Eric toho moc nedělá, pouze si prohlíží soubor. Můžeme tedy pokračovat. Nicméně, před ukončením jeho procesů nejprve zmrazíme jeho účet uzamčením hesla.
Uzamčení účtu
Než ukončíme procesy, zamkneme účet, protože po ukončení procesů se uživatel odhlásí. Pokud změníme heslo dříve, nebude se moci znovu přihlásit.
Zašifrovaná uživatelská hesla jsou uložena v souboru `/etc/shadow`. Tyto další kroky byste normálně neprováděli, ale abychom si ukázali, co se děje v souboru `/etc/shadow`, když zamkneme účet, provedeme malou odbočku. Pomocí následujícího příkazu se podíváme na první dvě pole záznamu uživatelského účtu Eric.
sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow
Příkaz `awk` analyzuje a případně manipuluje s poli z textových souborů. Volba `-F` (oddělovač polí) říká příkazu `awk`, že soubor používá jako oddělovač polí dvojtečku „:“. Hledáme řádek se vzorem „eric“. Pro vyhovující řádky vytiskneme první a druhé pole. Jedná se o název účtu a zašifrované heslo.
Záznam pro uživatelský účet Eric byl vypsán.
Pro uzamčení účtu použijeme příkaz `passwd`. Použijeme volbu `-l` (zámek) a předáme jméno uživatelského účtu, který chceme uzamknout.
sudo passwd -l eric
Pokud znovu zkontrolujeme soubor `/etc/shadow`, uvidíme, co se stalo.
sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow
Na začátek zašifrovaného hesla byl přidán vykřičník. Nepřepisuje první znak, ale přidá se na začátek hesla. To je vše, co je potřeba k tomu, aby se uživatel nemohl přihlásit k tomuto účtu.
Nyní, když jsme zabránili uživateli v opětovném přihlášení, můžeme ukončit jeho procesy a odhlásit ho.
Ukončení procesů
Existuje mnoho způsobů, jak ukončit uživatelské procesy, ale níže uvedený příkaz je široce dostupný a modernější než některé alternativy. Příkaz `pkill` vyhledá a ukončí procesy. Předáme signál `KILL` a použijeme volbu `-u` (uživatel).
sudo pkill -KILL -u eric
Zpět na příkazový řádek se dostanete poměrně antiklimaktickým způsobem. Pro ověření, že se něco stalo, znovu použijte příkaz `who`:
who
Jeho relace je pryč. Byl odhlášen a jeho procesy byly ukončeny. Tím se situace trochu zklidnila. Nyní si můžeme trochu oddechnout a pokračovat v úklidu, zatímco ochranka jde k Ericovu stolu.
Archivace domovského adresáře uživatele
Není vyloučeno, že v budoucnu bude vyžadován přístup k souborům uživatele. Buď jako součást vyšetřování, nebo proto, že jeho nástupce bude muset využívat jeho starou práci. K archivaci celého domovského adresáře použijeme příkaz `tar` .
Použité možnosti jsou:
c: Vytvoření archivu.
f: Použití zadaného názvu souboru pro archiv.
j: Použití komprese bzip2.
v: Zobrazení podrobného výstupu během vytváření archivu.
sudo tar cfjv eric-20200820.tar.bz /home/eric
V terminálu se zobrazí velké množství výstupu. Pro ověření, že archiv byl vytvořen, použijte příkaz `ls`. Použijeme volby `-l` (dlouhý formát) a `-h` (lidsky čitelné).
ls -lh eric-20200802.tar.bz
Byl vytvořen soubor o velikosti 722 MB. Ten lze zkopírovat na bezpečné místo pro pozdější kontrolu.
Odstranění cron úloh
Pro jistotu bychom měli zkontrolovat, zda jsou pro uživatelský účet Eric naplánované nějaké cron úlohy. Cron úloha je příkaz, který se spouští v určených časech nebo intervalech. Pomocí příkazu `ls` můžeme zkontrolovat, zda existují nějaké cron úlohy naplánované pro tento uživatelský účet:
sudo ls -lh /var/spool/cron/crontabs/eric
Pokud v tomto umístění něco existuje, znamená to, že pro tento uživatelský účet jsou naplánované cron úlohy. Můžeme je smazat pomocí příkazu `crontab`. Volba `-r` (odstranit) odebere úlohy a volba `-u` (uživatel) říká příkazu `crontab`, čí úlohy se mají odstranit.
sudo crontab -r -u eric
Úlohy jsou odstraněny bez jakéhokoli potvrzení. Vzhledem k tomu, že Eric mohl tušit, že bude vyhozen, je možné, že si naplánoval nějakou škodlivou cron úlohu. Tento krok je tedy důležitou prevencí.
Odstranění tiskových úloh
Je možné, že měl uživatel v tiskové frontě nějaké čekající úlohy. Pro jistotu můžeme tiskovou frontu vyčistit od všech úloh spojených s uživatelským účtem Eric. Příkaz `lprm` odebere úlohy z tiskové fronty. Volba `-U` (uživatelské jméno) umožňuje odstranit úlohy vlastněné daným uživatelským účtem:
lprm -U eric
Úlohy jsou odstraněny a vy se vrátíte na příkazový řádek.
Smazání uživatelského účtu
Soubory z adresáře `/home/eric/` jsme již zálohovali, takže můžeme přistoupit k odstranění uživatelského účtu a také smazání adresáře `/home/eric/`.
Příkaz, který se použije, závisí na používané distribuci Linuxu. Pro distribuce Linuxu založené na Debianu je to příkaz `deluser` a pro zbytek linuxového světa je to `userdel`.
Ve skutečnosti jsou oba příkazy dostupné i v Ubuntu. Očekával bych, že jeden bude aliasem druhého, ale jedná se o odlišné binární soubory.
type deluser
type userdel
Přestože jsou oba příkazy dostupné, doporučuje se použít `deluser` v distribucích odvozených od Debianu:
“`userdel` je nízkoúrovňový nástroj pro odstraňování uživatelů. V Debianu by správci měli namísto toho obvykle používat `deluser(8)`.“
Je to dost jasné, takže příkaz, který použijeme na tomto počítači Ubuntu, je `deluser`. Protože chceme také odstranit jeho domovský adresář, použijeme volbu `–remove-home`:
sudo deluser --remove-home eric
Pro distribuce mimo Debian by se měl použít příkaz `userdel` s volbou `–remove`:
sudo userdel --remove eric
Všechny stopy po uživatelském účtu Eric byly smazány. Můžeme ověřit, že adresář `/home/eric/` byl odstraněn:
ls /home
Skupina `eric` byla také odstraněna, protože uživatelský účet `eric` byl jediným jejím členem. To můžeme ověřit poměrně snadno pomocí příkazu `grep` pro filtrování obsahu `/etc/group`:
sudo less /etc/group | grep eric
Závěr
Eric byl za své prohřešky odstraněn. Ochranka ho stále odvádí z budovy a vy jste již zajistili a archivovali jeho soubory, smazali jeho účet a vyčistili systém od všech zbytků.
Přesnost má vždy přednost před rychlostí. Než cokoliv uděláte, promyslete si každý krok. Nechcete, aby někdo přišel k vašemu stolu a řekl: „Ne, ten druhý Eric.“