Linux: identyfikatory użytkowników, grupy i zarządzanie kontami
Jądro Linux operuje numerycznymi identyfikatorami UID i GID. Imię użytkownika to tylko odzwierciedlenie dla wygody, przechowywane w pliku /etc/passwd. Procesy i pliki są powiązane z wartościami liczbowymi, dlatego zmiana nazwy bez zachowania UID skutkuje utratą dostępu do zasobów.
Sprawdź aktualnego użytkownika:
id
# uid=1001(deployer) gid=1001(deployer) groups=1001(deployer),27(sudo),998(docker)
id -u # Tylko UID
whoami # Tylko nazwa
getent passwd deployer
getent działa z modułami NSS, w tym LDAP, w przeciwieństwie do bezpośredniego odczytu plików.
Model dostępu i właściciele
Każdy inode zawiera właściciela (UID) i grupę (GID). Jądro sprawdza uprawnienia według schematu: proces UID/GID → właściciel? → grupa? → inni. Pierwsze trafienie decyduje o dostępie.
Przykład:
ls -la /var/log/nginx/
# -rw-r----- 1 www-data adm 187234 Mar 26 10:41 access.log
Właścicielem jest www-data, grupa adm. Proces z UID www-data uzyska uprawnienia właściciela, ignorując grupę.
Zakresy UID:
- 0: root
- 1–999: systemowe (demony, bez logowania)
- 1000+: zwykłe konta
- 65534: nobody
Ustawia się je w pliku /etc/login.defs.
Użytkownicy systemowi używają /usr/sbin/nologin lub /bin/false do blokady logowania:
awk -F: '$3 < 1000 && $3 > 0 {print $1, $3, $7}' /etc/passwd
Grupy: dostęp zbiorowy
Podstawowa grupa (GID w /etc/passwd) — dla nowych plików. Dodatkowe (supplementary) — w /etc/group.
Sprawdzenie:
groups # Bieżące
getent group docker # Członkowie grupy
docker:x:998:deployer,ci
Grupy ułatwiają zarządzanie: dodaj użytkownika do docker — uzyska dostęp do socketa bez sudo.
Pliki konfiguracyjne
/etc/passwd (czytanie dla wszystkich):
deployer:x:1001:1001:Deploy Bot,,:/home/deployer:/bin/bash
Pola: nazwa użytkownika | hasło (x) | UID | GID | GECOS | katalog domowy | powłoka.
/etc/shadow (tylko root): hashe SHA-512 lub yescrypt, daty ważności.
deployer:$6$rounds=5000$xPwF...$kE9...hash...:19800:0:99999:7:::
/etc/group:
docker:x:998:deployer,ci-bot
Bezpieczne edytowanie:
vipw # passwd z blokadą
vigr # group
pwck # Sprawdzenie
Tworzenie i konfiguracja użytkowników
useradd z kluczowymi opcjami:
| Klucz | Opis |
|------|-----------|
| -m | Katalog domowy |
| -s | Powłoka |
| -G | Dodatkowe grupy |
| -r | Systemowy |
| -u | UID |
Przykłady:
useradd -m -s /bin/bash -G sudo,docker ivan
useradd -r -s /usr/sbin/nologin ci-bot
passwd ivan # Ustaw hasło
chpasswd <<< 'ivan:secret'
passwd -e ivan # Zmiana przy logowaniu
useradd -m kopiuje zawartość /etc/skel, a następnie przypisuje właściciela katalogu domowego.
umask jest odejmowany od 0666 (pliki) / 0777 (katalogi). Domyślne: 0022.
Środowisko i szablony
/etc/skel — szablon dla nowych katalogów domowych: .bashrc, .profile.
Ustawienia globalne:
/etc/default/useradd: domyślne wartościuseradd/etc/profile.d/*.sh: zmienne środowiskowe dla logowań/etc/login.defs:umask, zakresy UID
Co ważne:
- UID określa dostęp, nie nazwę użytkownika.
- Używaj
getent, a niecat /etc/passwddla modułów NSS. - Grupy to główny mechanizm delegowania uprawnień.
- Edytuj pliki konfiguracyjne wyłącznie przez
vipw/vigr. - Konta systemowe:
nologin, UID < 1000.
— Editorial Team
Brak komentarzy.