Tento článek popisuje mou cestu poznávání architektury souborového systému Linuxu a používání mých znalostí k napsání skriptu shellu pro vytváření uživatelů Linuxu. Ve druhém ročníku vysoké školy jsem se dozvěděl o souborovém systému Linux, když mě napadl koncept uživatelů. Snažil jsem se vytvořit uživatele v operačních systémech založených na Linuxu.
Skript je navržen pro operační systémy založené na Red Hat a lze jej s drobnými úpravami použít i pro jiné distribuce Linuxu. Všimněte si, že používá ksh
.
[ Také by se vám mohlo líbit: Základy správce systému Linux:Správa uživatelských účtů ]
Zaměření je na soubory umístěné v /etc
adresář, ve kterém jsou uloženy informace o konfiguraci systému. Ukážu, jak pracovat se systémovými soubory a jak vytvořit nového uživatele. Podmínkou je přístup root.

Zde jsou soubory, které se změní při vytváření nového uživatele v Linuxu:
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
- /home/USER
- /var/spool/mail/USER
Systém přidává zabezpečení domovského adresáře a poštovní schránky uživatele (USER) nastavením vlastnictví na uživatele a na uživatelskou skupinu.
/etc/passwd
Tento soubor ukládá informace o uživateli, jako je uživatelské jméno, ID uživatele, ID skupiny, celé jméno (komentář) a prostředí. Data jsou uložena v následujícím formátu: UserName:Link:UserID:GroupID:Comment:HomeDirectory:Shell
Každý řádek souboru obsahuje následující informace o uživatelích:
- Uživatelské jméno:Označuje uživatelské jméno poskytnuté uživateli pro snadný přístup.
- Odkaz:Představuje, že heslo uživatele je uloženo v
/etc/shadow
soubor. Pokud x je odstraněn, heslo nebude zkontrolováno a uživatel se nebude moci přihlásit. - ID uživatele:Běžně známé jako UID a používá se k jedinečné reprezentaci uživatele. Pohybuje se od 0 do 65 535.
- UID =0 -> účet uživatele root
- UID =1 000 až 60 000 -> účty jiné než root/obecné
- UID =1 až 999 a 60 001 až 65 535 -> Uživatelé systému
- GroupID:Stejné jako UserID, ale používá se k jedinečné reprezentaci skupiny.
- Komentář:Další informace o uživateli. Obvykle celé jméno uživatele.
- HomeDirectory:Umístění domovského adresáře uživatele.
- Shell:Výchozí prostředí uživatele.
/etc/shadow
Tento soubor uchovává informace o heslu uživatele a obsahuje heslo v zašifrované podobě.
Data jsou uložena v následujícím formátu:
UserName:EncryptedPassword:LastPasswordChange:MinPwdAge:MaxPwdAge:WarningPeriod:InactivityPeriod:ExpirationDate:Unused
- Uživatelské jméno:Označuje uživatelské jméno poskytnuté uživateli.
- Šifrované heslo:Heslo je zašifrováno pomocí hashovacích algoritmů, jako je sha256, sha512, md5 atd., a uloženo v souboru.
- Poslední změna hesla:Ukládá datum epochy od poslední změny hesla.
- Minimální stáří hesla:Ukládá počet dní do příští změny hesla.
- Ve výchozím nastavení je 0 -> Žádný minimální věk
- Max Password Age:Ukládá maximální počet dní, po kterých musí uživatel změnit heslo.
- Ve výchozím nastavení 99 999 -> Žádný maximální věk
- Výstražná doba:Počet dní, po kterých se zobrazí upozornění na změnu hesla.
- Ve výchozím nastavení je NULL
- Doba nečinnosti:Určuje počet dní po vypršení platnosti uživatelského hesla, než bude účet deaktivován.
- Datum vypršení platnosti:Datum epochy do deaktivace účtu.
- Nepoužité:Vyhrazeno pro budoucí použití.
Další soubory
/etc/group
a/etc/gshadow
soubory jsou pro skupiny v Linuxu a ukládají data ve formátu GroupName:Link:GroupID:MemberList a GroupName:Password:Reserved:MemberList respektive.- Domovský adresář uživatele má být vytvořen v
/home
adresář s daty z/etc/skel
složka. - Poštovní schránka vytvořená v
/var/spool/mail
adresář.
Skript
Následuje skript shellu, který jsem napsal za účelem vytvoření nových uživatelů rozdělených na části:
uname=$1
id -u $uname&>/dev/null
Nejprve zkontroluje, zda uživatel již existuje:
if [ $? -ne 0 ]
then
for i in {1000..60000}
do
id -u $i&>/dev/null & id -g $i&>/dev/null
if [ $? -ne 0 ]
then
break
fi
done
uid=$i
echo "$uname:x:$uid:$uid::/home/$uname:/bin/bash">>/etc/passwd
lastpwdchange=$(datediff 1970-01-01 `date +"%Y-%m-%d"`)
echo "$uname::$lastpwdchange:0:99999:7:::">>/etc/shadow
echo "$uname:x:$uid:">>/etc/group
echo "$uname:!::">>/etc/gshadow
mkdir /home/$uname
cp -a /etc/skel/. /home/$uname/
chown $uname:$uname /home/$uname/ -R
chmod 0700 /home/$uname/ -R
touch /var/spool/mail/$uname
chown $uname:$uname /var/spool/mail/$uname
echo "User successfully created"
else
echo "User already exists : try using a unique username">&2
fi
Pokud uživatel již existuje, ukončete program nebo uživatele vytvořte.
Celý kód je veřejně dostupný na GitHubu.
Spusťte skript prostředí
[ Poznámka redakce:I když se tento skript může zdát docela jednoduchý, vždy se ujistěte, že rozumíte všem skriptům, které najdete, a důvěřujte jim, než je nainstalujete nebo eskalujete jejich oprávnění ve vašem systému. ]
1) Umístěte skript shellu do adresáře /usr/bin/
aby byl přístupný jako příkaz.
2) Přidejte oprávnění ke spouštění pro uživatele root:
# chmod u+x /usr/bin/ksh_useradd
3) Spusťte příkaz s uživatelským jménem jako argumentem:
ksh_useradd USERNAME
4) Skript vytvoří uživatelský účet. Před prvním přihlášením musíte pro nového uživatele nastavit heslo.

[ Bezplatný online kurz:Technický přehled Red Hat Enterprise Linux. ]
Sbalit
Tento skript může usnadnit proces vytváření uživatelů, než si pamatovat přepínače pro useradd
příkaz. Jistě, můžete použít useradd
příkaz k vytvoření uživatelů, nastavení oprávnění a vytvoření poštovní schránky uživatele, ale tento skript provádí stejné akce jako useradd
a pomůže vám zjistit, co se děje v zákulisí vašeho souborového systému. Doufám, že výše uvedená vysvětlení vám pomohou porozumět konfiguračním souborům souvisejícím s vytvářením uživatelů a jejich polím trochu jasněji.