Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

Uživatelé, skupiny a oprávnění souborů

Modul 3: Uživatelé, oprávnění a sudo · Doba čtení: 12 min.

Cíl lekce: Po této lekci dokážete vytvářet a prohlížet uživatele a skupiny, číst oprávnění souboru nebo adresáře v ls -l a správně je nastavit pomocí chmod a chown, aniž byste vše otevřeli dokořán.

Klíčové pojmy: root (UID 0), běžný uživatel, systémový uživatel, /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 byl od začátku navržen pro více uživatelů na jednom počítači. Každý běžící proces běží jménem nějakého uživatele a každý soubor má vlastníka. Pro systém je uživatel především číslo, UID:

  • root má UID 0. Root smí všechno: číst a měnit každý soubor, zastavit každou službu, vytvořit jakéhokoli uživatele. Žádné "opravdu chcete pokračovat?" neexistuje.
  • Běžní uživatelé, například anna, dostávají na Debianu a Ubuntu UID od 1000. Smějí zapisovat do svého domovského adresáře a jinak toho mnoho nesmějí.
  • Systémoví uživatelé mají nízké číslo a obvykle nemají heslo ani shell. Pod takovým uživatelem běží služby: nginx pod www-data, PostgreSQL pod postgres. Pokud je taková služba napadena, má útočník jen oprávnění tohoto uživatele, nikoli oprávnění roota.

Kdo jste, zjistíte příkazem 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 také ve skupinách sudo a users.

Kde jsou uživatelé uloženi

Seznam uživatelů je v souboru /etc/passwd, jeden řádek na uživatele:

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/bash

Pole oddělená dvojtečkami: jméno, x (heslo je uloženo jinde), UID, primární skupina, popis, domovský adresář, shell. U www-data je jako shell uvedeno /usr/sbin/nologin: přihlásit se nelze.

Samotná hesla jsou uložena zašifrovaná (jako hash) v souboru /etc/shadow. Ten může číst jen root. Znak ! nebo * na začátku pole s heslem znamená: přihlášení heslem není možné. Takto je root na Ubuntu ve výchozím stavu zamčený, a na Debianu také, pokud jste při instalaci nezadali heslo pro roota.

Vytváření uživatelů a skupin

Na Debianu a Ubuntu použijete přívětivý pří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 vytvoří uživatele, vlastní skupinu se stejným jménem, domovský adresář a vyžádá si heslo. Existuje také nízkoúrovňový useradd (na AlmaLinuxu a Rocky Linuxu je to běžný příkaz), ten však bez voleb udělá méně: nenastaví heslo a na některých systémech nevytvoří domovský adresář.

Skupina slouží k tomu, abyste mohli udělit oprávnění více uživatelům najednou. Přidání uživatele do skupiny:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # totéž, funguje všude

Všimněte si -a u usermod: bez -a nahradíte všechny doplňkové skupiny uživatele jen touto jednou. Nová skupina začne platit až po novém přihlášení.

Zablokování účtu bez jeho smazání (například u bývalého kolegy):

root@web1:~# usermod -L -e 1 jan

-L zamkne heslo, -e 1 nechá účet vypršet. Pozor: zamčené heslo nemusí vždy zastavit SSH klíč. Odstraňte proto také klíče v /home/jan/.ssh/authorized_keys (lekce 2.3); účet s vypršenou platností (-e 1) sshd odmítne.

Čtení oprávnění

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 uploads

První blok deseti znaků je klíčem ke všemu:

  • Znak 1: typ. - je běžný soubor, d adresář (directory), l symbolický odkaz (symlink).
  • Znaky 2 až 4: co smí vlastník.
  • Znaky 5 až 7: co smí skupina.
  • Znaky 8 až 10: co smějí ostatní (všichni ostatní).

Poté následuje počet odkazů, vlastník, skupina, velikost a datum.

Písmena znamenají u souboru:

PísmenoVýznam u souboru
rčtení
wzměna
xspuštění jako program nebo skript

A u adresáře něco trochu jiného:

PísmenoVýznam u adresáře
rzobrazení názvů souborů v adresáři
wvytváření, přejmenování a mazání souborů v adresáři
xvstup do adresáře a otevírání souborů v něm

To poslední mnoho lidí překvapí. Bez x na adresáři se k souborům v něm nedostanete, i když jsou samy čitelné. A kdo má w na adresáři, může v něm soubory mazat, i když patří někomu jinému.

V příkladu: index.html smí číst každý; config.php (s heslem k databázi) smí Anna číst a měnit, skupina www-data (tedy webový server) jen číst a ostatní nic. Do uploads smí webový server zapisovat, protože tam ukládá soubory nahrané návštěvníky.

Oprávnění jako číslo

Oprávnění se často zapisují jako tři číslice, osmičkové číslo. Každé písmeno má hodnotu: r = 4, w = 2, x = 1. Sečtěte je pro každou skupinu:

OprávněníČísloPoužití
rw-r--r--644běžný soubor, který smí číst každý
rw-r-----640soubor pro vlastníka a skupinu, například konfigurace s heslem
rw-------600tajný soubor, například authorized_keys nebo soukromý klíč
rwxr-xr-x755adresář nebo program, který smí používat každý
rwx------700soukromý adresář, například ~/.ssh

Změna oprávnění: 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.php

chmod mění oprávnění, a to číslem nebo písmeny (u, g, o pro vlastníka, skupinu, ostatní; + nebo - a písmeno). chown eigenaar:groep mění vlastníka a skupinu; to smí jen root. S -R fungují oba příkazy na celý adresář, a právě tam se často chybuje: chmod -R 644 na adresáři učiní všechny podadresáře nepoužitelnými, protože adresáře potřebují x. Pro celý strom raději použijte 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 jsem tam dal 777." 777 znamená: každý na serveru to smí číst, měnit a spouštět. Pokud se na Vašem serveru někdy pokazí jediná služba nebo jediný web, může útočník zapisovat všude, kde je 777, včetně Vašich PHP souborů. Skutečný problém je téměř vždy ve vlastníkovi nebo skupině: dejte webovému serveru prostřednictvím skupiny přesně to oprávnění, které potřebuje, a jen na adresáři, kde je potřeba.

Výchozí oprávnění a speciální bity

Nové soubory dostávají svá oprávnění podle umask. S obvyklou hodnotou umask 022 mají nové soubory 644 a nové adresáře 755. Svou umask zjistíte příkazem umask.

Někdy uvidíte s místo x, například u /usr/bin/passwd (-rwsr-xr-x). To je bit setuid: program běží s oprávněními vlastníka (roota), i když ho spustí běžný uživatel. U několika systémových programů je to nutné, ale nikdy ho sami nenastavujte na skript. Neočekávaný soubor se setuid je známou známkou vniknutí; příkazem find / -perm -4000 -type f 2>/dev/null zobrazíte všechny takové soubory.

Na AlmaLinuxu a Rocky Linuxu

adduser je tam jen jiný název pro useradd; použijte useradd -m anna a poté passwd anna. Skupiny přidáte příkazem usermod -aG. SELinux přidává vedle oprávnění z této lekce další vrstvu: soubor se správnými oprávněními může být přesto odmítnut, pokud má nesprávný štítek SELinux (zobrazí ho ls -Z).

Shrnutí

  • Každý uživatel má UID; root (0) smí všechno, služby běží pod vlastními systémovými uživateli bez shellu.
  • Uživatelé jsou v /etc/passwd, hashe hesel v /etc/shadow. Uživatele vytvoříte příkazem adduser a skupiny přidáte příkazem usermod -aG.
  • ls -l zobrazuje typ, oprávnění vlastníka, skupiny a ostatních, a poté vlastníka a skupinu. U adresáře znamená x vstup a w vytváření a mazání souborů.
  • Obvyklá čísla: 644 a 755 pro veřejné, 640 pro konfiguraci s tajnými údaji, 600 a 700 pro soukromé. Nikdy 777.
  • Pro nastavení oprávnění na celém stromu použijte find; dávejte pozor na soubory se setuid.

Kvíz

1. Co znamená -rw-r----- u souboru s vlastníkem anna a skupinou www-data?



2. Co se stane, když má adresář oprávnění drw-r--r-- (tedy nikde x)?



3. Spustíte usermod -G www-data anna (bez -a). Jaký je důsledek?



4. Plugin nemůže zapisovat do /var/www/example.com/uploads. Jaké je nejlepší řešení?



5. Proč nginx běží pod uživatelem www-data, a ne pod rootem?



Úkol

Úkol Z3.1: Čtení oprávnění. Otevřete ukázkový soubor rechten-1.txt: výstup příkazu id pro tři uživatele a příkazu ls -l ve webovém adresáři. U každé otázky odpovězte, kdo smí co (například: "může webový server měnit config.php?", "který soubor má příliš široká oprávnění?", "jaké číslo odpovídá .env?"). Program porovná Vaše odpovědi s pevným klíčem a u každé otázky vysvětlí proč.

Úkol Z3.1: Čtení oprávnění

Soubor k tomuto úkolu: rechten-1.txt










Co vyplníte a co zjistíme, neukládáme. Váš prohlížeč si pamatuje Vaše odpovědi a to, zda jste úkol splnili. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol měli (téměř) správně; i to tam můžete odstranit.

Doporučujeme k přečtení

Postupy v těchto článcích platí pro hostingové balíčky a VPS od WebOké; u jiných poskytovatelů to funguje podobně.

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…