# Práva k súborom na webovom serveri

> Správne nastaviť práva k súborom na webovom serveri: oddelení vlastníci, 640 namiesto 777, zápis iba pre uploady a cache. S príkazmi na kontrolu.

Zdroj: https://phpsos.de/sk/ratgeber/dateirechte-webserver/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** Pri právach k súborom na webovom serveri platí základná zásada: používateľ, pod ktorým beží PHP, smie vlastný kód čítať, ale nie meniť. Práva na zápis dostávajú iba priečinky pre uploady, cache a tmp a v nich sa nevykonáva žiadne PHP. Práva ako 777 nemajú na produkčnom serveri čo robiť.

## Prečo práva k súborom po vniknutí rozhodujú

Keď útočníci cez zraniteľnosť vykonajú kód na serveri, beží tento kód s právami procesu PHP. Čo smie tento používateľ, smie aj útočník. Práve tu sa rozhoduje, či sa z vniknutia stane trvalý backdoor.

S PHP2Shell sa tento scenár v októbri 2026 stal veľmi konkrétnym. Zraniteľnosti CVE-2026-109618 a CVE-2026-109619 umožňujú vykonanie škodlivého kódu bez prihlásenia. Opravené sú od 21. 10. 2026 v PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Dobré práva k súborom útoku nezabránia, ale zabránia tomu, aby zavlečený kód trvalo prepísal vašu aplikáciu.

V mnohých inštaláciách patrí celý kód používateľovi webového servera, aby aktualizácie fungovali jedným kliknutím. Je to pohodlné, ale presne táto konštelácia je to, čo útočníci hľadajú.

## Základný princíp: oddeliť vlastníka a používateľa behu

Zmysluplné je rozdelenie do dvoch rolí. Vlastník, napríklad používateľ pre nasadenie, vlastní súbory a nasadzuje aktualizácie. Proces PHP beží pod iným používateľom a je oprávnený iba na čítanie, a to cez skupinu.

| Oblasť | Vlastník : skupina | Práva súborov | Práva priečinkov |
|---|---|---|---|
| Programový kód | deploy : seite1 | 640 | 750 |
| Konfigurácia s heslami | deploy : seite1 | 640 | – |
| Uploady, cache, tmp | seite1 : seite1 | 640 | 750 |
| Logy | root alebo seite1 | 640 | 750 |

Samotný webový server, napríklad Nginx, potrebuje pri PHP-FPM iba prístup na čítanie ku statickým súborom ako obrázky a CSS. Ten získate cez skupinu alebo cielené pravidlo prístupu. Kto prevádzkuje viac webov, dá každému vlastného používateľa behu; ako to spolupôsobí s poolmi, je v príručke [open_basedir a izolácia každého webu](https://phpsos.de/sk/ratgeber/open-basedir/).

## Skontrolovať práva k súborom na webovom serveri

Skôr než niečo zmeníte, urobte si prehľad. Nasledujúce príkazy nič nemenia.

```bash
# Pod ktorým používateľom bežia procesy PHP?
ps -eo user,cmd | grep -E "[p]hp-fpm|[a]pache2|[h]ttpd" | sort | uniq -c

# Súbory a priečinky zapisovateľné pre všetkých
find /var/www -perm -o+w -ls

# Súbory, ktoré patria používateľovi webového servera (príklad www-data)
find /var/www -user www-data -type f -name "*.php" | head -50

# Práva konfiguračných súborov
ls -la /var/www/*/wp-config.php /var/www/*/.env 2>/dev/null
```

Položky zapisovateľné pre všetkých sú takmer vždy chyba. Súbory PHP, ktoré patria používateľovi behu, ukazujú, že môže meniť svoj kód. Nápadné sú aj jednotlivé súbory, ktorých vlastník alebo práva sa líšia od susedných súborov. Môže to byť indícia zavlečených súborov, ako je opísané v príručke [Rozpoznať webshell a odstrániť ju](https://phpsos.de/sk/ratgeber/webshell-erkennen/).

## Opraviť práva: krok za krokom

Práva meňte iba po zálohe a podľa možnosti najprv v testovacom prostredí. Ak existuje podozrenie na vniknutie, zabezpečte najprv stopy, pretože vlastník a časové pečiatky sú potom dôkazné prostriedky.

```bash
SITE=/var/www/seite1
# Vlastník: používateľ pre nasadenie, skupina: používateľ behu
sudo chown -R deploy:seite1 "$SITE"
# Priečinky 750, súbory 640
sudo find "$SITE" -type d -exec chmod 750 {} +
sudo find "$SITE" -type f -exec chmod 640 {} +
# Zapisovať smie PHP iba do týchto priečinkov (cesty prispôsobiť aplikácii)
sudo chown -R seite1:seite1 "$SITE/public/uploads" "$SITE/var/cache"
```

Potom web úplne skontrolujte: domovská stránka, prihlásenie, formuláre, upload obrázkov, cache. Do ktorých priečinkov musí aplikácia zapisovať, je uvedené v systémových požiadavkách výrobcu na jeho oficiálnej stránke.

> **Dôležité:**
> Príkaz `chmod -R 777` na rýchle vyriešenie problému otvorí server každému lokálnemu používateľovi a každému zavlečenému procesu. Namiesto toho opravte vlastníka a skupinu.

## Zabrániť vykonávaniu PHP v zapisovateľných priečinkoch

Práva na zápis sú len napoly také nebezpečné, ak tam nemôže bežať kód. Zablokujte vykonávanie PHP v priečinkoch s uploadmi a cache na úrovni webového servera. Pre Apache v konfigurácii VirtualHost:

```apache
<Directory "/var/www/seite1/public/uploads">
    <FilesMatch "\.(php|phtml|phar)$">
        Require all denied
    </FilesMatch>
</Directory>
```

Pre Nginx stačí blok `location`, ktorý odmietne požiadavky na súbory PHP v týchto priečinkoch. Pravidlo patrí do konfigurácie servera, nie do `.htaccess` v priečinku s uploadmi, ktorý by útočník s právami na zápis mohol opäť zmeniť.

Navyše sa oplatí pozrieť sa na `umask` používateľa pre nasadenie, aby sa nové súbory nezakladali automaticky príliš otvorené. Hodnota `027` vedie k 640 pre súbory a 750 pre priečinky. Na vlastných serveroch leží táto zodpovednosť úplne na vás; čo k tomu ešte patrí, popisuje stránka [Zabezpečiť root server a vServer vlastnými silami](https://phpsos.de/sk/server/root-server-vserver/).

## Osobitné prípady: hostingové panely, zdieľaný hosting a nasadenia

Nie každý server sa dá nastaviť podľa učebnice. Hostingové panely ako Plesk alebo cPanel zakladajú vlastných používateľov a práva a pri niektorých akciách ich vracajú späť. Práva tam meňte podľa možnosti cez funkcie panela alebo po aktualizáciách panela skontrolujte, či vaše nastavenia ešte platia.

Pri zdieľanom hostingu máte zvyčajne len jedného používateľa na všetko. Oddelenie vlastníka a používateľa behu potom nie je možné. Tým dôležitejšie sú úzke práva na konfiguračné súbory, žiadne práva 777 a vypnutie vykonávania PHP v priečinkoch s uploadmi, pokiaľ to poskytovateľ povoľuje.

Kto pracuje s automatickými nasadeniami, mal by práva nastavovať priamo v skripte nasadenia. Inak každá nová verzia obnoví starý, príliš otvorený stav. Krátka kontrola na konci nasadenia, napríklad príkazom pre zapisovateľné súbory zhora, takéto kroky späť spoľahlivo zachytí a dá sa bez veľkej námahy zabudovať do každého pipeline.

## Ako konkrétne pomáha PHP SOS?

- Zmapujeme vlastníkov, práva a používateľov behu všetkých webov na serveri.
- Určíme koncepciu práv, ktorá sa hodí k vašej aplikácii a spôsobu aktualizácií.
- Práva a blokovanie vykonávania nastavíme a web potom úplne otestujeme.
- Koncepciu zdokumentujeme, aby ju nasadenia a aktualizácie opäť nerozmäkčili.

Ako je to začlenené do trvalého zabezpečenia, popisuje služba [Spevnenie servera pre webové servery PHP](https://phpsos.de/sk/leistungen/server-haertung/).


## Časté otázky

**Sú práva 777 niekedy v poriadku?**  
Na produkčnom serveri prakticky nikdy. So 777 smie každý používateľ systému zakladať a meniť súbory. Ak aplikácia bez 777 nebeží, spravidla je nesprávne nastavený vlastník, nie práva príliš úzke.

**Prečo by webový server nemal smieť meniť vlastné súbory?**  
Pretože zavlečený kód beží s právami webového servera. Ak webový server smie zapisovať súbory PHP, útočník môže manipulovať s existujúcimi skriptami alebo zakladať nové backdoory. Ak sa vlastník a používateľ behu oddelia, kód zostane chránený proti zápisu.

**Ako aktualizujem CMS, ak webový server nesmie zapisovať?**  
Aktualizácie potom prebiehajú cez vlastníka, napríklad pomocou WP-CLI, Composeru alebo deploymentu, nie cez tlačidlo aktualizácie v backende. Je to trochu náročnejšie, zato zavlečený kód nemôže meniť programové súbory.

**Aké práva potrebuje konfiguračný súbor s heslom k databáze?**  
Čo najmenej: čitateľný pre používateľa PHP a pre nikoho iného. Bežné je 640 s vhodnou skupinou alebo 400, ak je používateľ PHP sám vlastníkom.

## Zdroje

- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [BSI IT-Grundschutz](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
- [php.net: bezpečnostné hlásenia](https://www.php.net/)
