Modul 3 · 3.1
Používatelia, skupiny a oprávnenia súborov
Modul 3: Používatelia, práva a sudo · Čas čítania: 12 minút
Cieľ lekcie: Po tejto lekcii dokážete vytvárať a prezerať používateľov a skupiny, čítať oprávnenia súboru alebo priečinka v ls -l a správne ich nastaviť pomocou chmod a chown bez toho, aby ste všetko otvorili dokorán.
Kľúčové pojmy: root (UID 0), bežný používateľ, systémový používateľ, /etc/passwd, /etc/shadow, skupina, adduser, id, rwx, vlastník, skupina, ostatní, osmičkový zápis (644, 755, 600), chmod, chown, umask, setuid, 777
Každý je číslo
Linux bol od začiatku navrhnutý pre viacerých používateľov na jednom stroji. Každý bežiaci proces beží v mene nejakého používateľa a každý súbor má vlastníka. Pre systém je používateľ predovšetkým číslo, UID:
- root má UID 0. Root smie všetko: čítať a meniť každý súbor, zastaviť každú službu, vytvoriť každého používateľa. Žiadne "ste si istí?" neexistuje.
- Bežní používatelia, napríklad
anna, dostávajú v Debiane a Ubuntu UID od 1000. Smú zapisovať do vlastného domovského priečinka a inak len málo. - Systémoví používatelia majú nízke číslo a väčšinou žiadne heslo ani shell. Pod takýmto používateľom bežia služby: nginx pod
www-data, PostgreSQL podpostgres. Ak niekto takú službu napadne, má útočník len práva tohto používateľa, nie práva roota.
Kým ste, zistíte príkazom id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna má UID 1000, vlastnú skupinu anna a je aj v skupinách sudo a users.
Kde sú uložení používatelia
Zoznam používateľov je v súbore /etc/passwd, jeden riadok na používateľa:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashPolia oddelené dvojbodkami: meno, x (heslo je uložené inde), UID, hlavná skupina, popis, domovský priečinok, shell. Pri www-data je ako shell uvedené /usr/sbin/nologin: prihlásiť sa nedá.
Samotné heslá sú uložené zašifrované (zahašované) v /etc/shadow. Tento súbor môže čítať iba root. Znak ! alebo * na začiatku poľa s heslom znamená: prihlásenie heslom nie je možné. Takto je root v Ubuntu predvolene uzamknutý, a v Debiane vtedy, ak ste pri inštalácii nezadali heslo pre roota.
Vytváranie používateľov a skupín
V Debiane a Ubuntu použite priateľský príkaz adduser:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser vytvorí používateľa, vlastnú skupinu s rovnakým menom, domovský priečinok a vyžiada si heslo. Existuje aj nízkoúrovňový useradd (v AlmaLinux a Rocky Linux je to bežný príkaz), ktorý však bez volieb urobí menej: žiadne heslo a v niektorých systémoch ani domovský priečinok.
Skupina je spôsob, ako prideliť práva viacerým používateľom naraz. Pridanie používateľa do skupiny:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # to isté, funguje všadeVšimnite si -a pri usermod: bez -a nahradíte všetky dodatočné skupiny používateľa iba touto jednou. Nová skupina začne platiť až po opätovnom prihlásení.
Zablokovanie účtu bez jeho odstránenia (napríklad účtu bývalého kolegu):
root@web1:~# usermod -L -e 1 jan-L uzamkne heslo, -e 1 nechá účet expirovať. Pozor: uzamknuté heslo nie vždy zastaví SSH kľúč. Odstráňte preto aj kľúče v /home/jan/.ssh/authorized_keys (lekcia 2.3); expirovaný účet (-e 1) sshd odmietne.
Čítanie oprávnení
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsPrvý blok desiatich znakov je kľúčom ku všetkému:
- Znak 1: typ.
-je bežný súbor,dpriečinok (adresár),lsymbolický odkaz (symlink). - Znaky 2 až 4: čo smie vlastník.
- Znaky 5 až 7: čo smie skupina.
- Znaky 8 až 10: čo smú ostatní (všetci ostatní).
Potom nasleduje počet odkazov, vlastník, skupina, veľkosť a dátum.
Písmená pri súbore znamenajú:
| Písmeno | Význam pri súbore |
|---|---|
r | čítanie |
w | zmena |
x | spustenie ako program alebo skript |
A pri priečinku niečo trochu iné:
| Písmeno | Význam pri priečinku |
|---|---|
r | zobrazenie názvov súborov v priečinku |
w | vytváranie, premenovanie a mazanie súborov v priečinku |
x | vstup do priečinka a otváranie súborov v ňom |
To posledné mnohých prekvapí. Bez x na priečinku sa k súborom v ňom nedostanete, ani keď sú samy osebe čitateľné. A kto má w na priečinku, môže v ňom súbory mazať, aj keď patria niekomu inému.
V príklade: index.html smie čítať každý; config.php (s heslom k databáze) smie Anna čítať a meniť, skupina www-data (teda webový server) len čítať a ostatní nič. Do uploads smie webový server zapisovať, pretože tam idú súbory nahrané návštevníkmi.
Oprávnenia ako číslo
Oprávnenia sa často zapisujú ako tri číslice, osmičkové číslo. Každé písmeno má hodnotu: r = 4, w = 2, x = 1. Sčítajte ich pre každú skupinu:
| Oprávnenia | Číslo | Použitie |
|---|---|---|
rw-r--r-- | 644 | bežný súbor, ktorý smie čítať každý |
rw-r----- | 640 | súbor pre vlastníka a skupinu, napríklad konfigurácia s heslom |
rw------- | 600 | tajný súbor, napríklad authorized_keys alebo súkromný kľúč |
rwxr-xr-x | 755 | priečinok alebo program, ktorý smie používať každý |
rwx------ | 700 | súkromný priečinok, napríklad ~/.ssh |
Zmena oprávnení: chmod a chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod mení oprávnenia, číslom alebo písmenami (u, g, o pre vlastníka, skupinu, ostatných; + alebo - a písmeno). chown eigenaar:groep mení vlastníka a skupinu; to smie iba root. S -R fungujú oba príkazy na celý priečinok a práve tu sa často robí chyba: chmod -R 644 na priečinku urobí všetky podpriečinky nepoužiteľnými, pretože priečinky potrebujú x. Pre celý strom radšej použite find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Nikdy 777
"Nefungovalo to, tak som tam dal 777." 777 znamená: každý na serveri to smie čítať, meniť a spúšťať. Ak sa niekedy pokazí jediná služba alebo jediná webová stránka na vašom serveri, útočník môže zapisovať všade, kde je 777, vrátane vašich PHP súborov. Skutočným problémom je takmer vždy vlastník alebo skupina: dajte webovému serveru cez skupinu presne to právo, ktoré potrebuje, a len na priečinok, kde ho potrebuje.
Predvolené oprávnenia a špeciálne bity
Nové súbory dostávajú oprávnenia podľa umask. Pri bežnej umask 022 majú nové súbory 644 a nové priečinky 755. Svoju umask zobrazíte príkazom umask.
Niekedy uvidíte s namiesto x, napríklad pri /usr/bin/passwd (-rwsr-xr-x). To je bit setuid: program beží s právami vlastníka (roota), aj keď ho spustí bežný používateľ. Pre niekoľko systémových programov je to nutné, no nikdy ho sami nenastavujte na skript. Neočakávaný súbor so setuid je známym znakom prieniku; príkazom find / -perm -4000 -type f 2>/dev/null zobrazíte všetky.
V AlmaLinux a Rocky Linux
adduser je tam iný názov pre useradd; použite useradd -m anna a potom passwd anna. Skupiny pridáte pomocou usermod -aG. SELinux pridáva ďalšiu vrstvu popri oprávneniach z tejto lekcie: súbor so správnymi oprávneniami môže byť aj tak odmietnutý, ak má nesprávny SELinux štítok (ls -Z ho zobrazí).
Zhrnutie
- Každý používateľ má UID; root (0) smie všetko, služby bežia pod vlastnými systémovými používateľmi bez shellu.
- Používatelia sú v
/etc/passwd, haše hesiel v/etc/shadow. Používateľov vytvárajte pomocouaddusera skupiny pridávajte pomocouusermod -aG. ls -lzobrazuje typ, oprávnenia vlastníka, skupiny a ostatných, a potom vlastníka a skupinu. Pri priečinku znamenáxvstup awvytváranie a mazanie súborov.- Bežné čísla: 644 a 755 pre verejné, 640 pre konfiguráciu s tajnými údajmi, 600 a 700 pre súkromné. Nikdy 777.
- Na nastavenie oprávnení pre celý strom použite
find; dávajte pozor na súbory so setuid.
Kvíz
Úloha
Úloha Z3.1: Čítanie oprávnení. Otvorte vzorový súbor rechten-1.txt: výstup príkazu id pre troch používateľov a príkazu ls -l vo webovom priečinku. Pri každej otázke odpovedzte, kto čo smie (napríklad: "môže webový server meniť config.php?", "ktorý súbor má príliš široké oprávnenia?", "aké číslo zodpovedá .env?"). Program porovná vaše odpovede s pevným kľúčom a pri každej otázke vysvetlí prečo.
Ďalšie čítanie
Postupy v týchto článkoch platia pre hostingové balíky a VPS od WebOké; u iných poskytovateľov to funguje podobne.
- Zakázané (403): Nemáte oprávnenie na prístup k / na tomto serveri
- Prihlásenie na váš VPS cez SSH (a vytvorenie SSH kľúča)
- Bezplatný kurz WordPress 7.4: Zabezpečenie stránky: oprávnenia, hlavičky a bezpečnostné pluginy
- Príručka Debianu k adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Príručka Debianu k chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
- Ako čítať a správne nastaviť oprávnenia súborov na vašom VPS
