Uprawnienia katalogów i plików w WordPress – pełne bezpieczeństwo krok po kroku

Spis treści

Wprowadzenie – dlaczego poprawne uprawnienia to fundament bezpieczeństwa WordPressa

Nieprawidłowe uprawnienia plików i katalogów to jedna z najczęstszych przyczyn włamań do stron WordPress. Według danych Wordfence, 23% ataków wykorzystuje słabości w konfiguracji uprawnień.

Dlaczego to takie ważne?

  • Zapobieganie wykonaniu złośliwego kodu – hakerzy nie mogą uploadować i uruchamiać skryptów
  • Ochrona danych konfiguracyjnych – plik wp-config.php zawiera credentials do bazy danych
  • Zapobieganie modyfikacji plików core – hakerzy nie mogą zmieniać plików WordPressa
  • Stabilność działania – poprawne uprawnienia zapobiegają błędom 500, 403 i problemom z uploadem

W tym przewodniku przeprowadzę Cię przez kompleksową konfigurację uprawnień – od podstaw po zaawansowane techniki zabezpieczania.

Jak działa system uprawnień w Linuxie – właściciel, grupa, inni użytkownicy, CHMOD i CHOWN

Podstawy systemu uprawnień Unix/Linux

Każdy plik i katalog w systemie Linux ma trzech typów uprawnień dla trzech kategorii użytkowników:

Kategorie użytkowników:

  • Owner (właściciel) – użytkownik, który stworzył plik
  • Group (grupa) – grupa użytkowników z określonymi uprawnieniami
  • Others (inni) – wszyscy pozostali użytkownicy systemu

Typy uprawnień:

  • Read (r) = 4 – prawo odczytu
  • Write (w) = 2 – prawo zapisu
  • Execute (x) = 1 – prawo wykonania (dla katalogów: prawo wejścia)

Notacja ósemkowa (CHMOD)

Uprawnienia zapisujemy w notacji ósemkowej, gdzie każda cyfra reprezentuje sumę uprawnień:

  • 755 = rwxr-xr-x (właściciel: pełne uprawnienia, grupa/inni: odczyt i wykonanie)
  • 644 = rw-r--r-- (właściciel: odczyt+zapis, grupa/inni: tylko odczyt)
  • 600 = rw------- (właściciel: odczyt+zapis, reszta: brak dostępu)

CHOWN – zmiana właściciela i grupy

Oprócz uprawnień dostępu, ważny jest również właściciel pliku:

chown user:group filename

W WordPressie kluczowe jest, aby pliki należały do właściwego użytkownika (nie www-data ani apache).

Rekomendowane wartości – 755 dla katalogów, 644 dla plików, wyjątki i uzasadnienie

Złote zasady uprawnień WordPress

Standardowe uprawnienia:

  • Katalogi: 755 lub 750
  • Pliki: 644 lub 640
  • wp-config.php: 600 lub 400

Uzasadnienie:

755 dla katalogów: Właściciel może wszystko (rwx), grupa i inni mogą wchodzić i listować zawartość (rx). To konieczne dla działania PHP i serwera WWW.

644 dla plików: Właściciel może modyfikować (rw), reszta tylko czytać (r). PHP musi czytać pliki, ale nie powinno ich modyfikować.

600 dla wp-config.php: Tylko właściciel ma dostęp. Ten plik zawiera hasło do bazy danych – absolutnie krytyczne.

Wyjątki i specjalne przypadki:

  • Wp-content/uploads: 755 – musi pozwalać na upload plików
  • Wp-content/cache: 755 – pluginy cache muszą zapisywać
  • Pliki .htaccess: 644 – serwer WWW musi czytać
  • Skrypty maintenance: 600 – jeśli zawierają wrażliwe dane

Wp-config.php i pliki wrażliwe – jak dodatkowo je chronić przed odczytem

Ochrona wp-config.php na poziomie serwera

1. Przesunięcie wp-config.php poza public_html

WordPress automatycznie szuka wp-config.php o jeden poziom wyżej. Przenieś plik z:

/public_html/wp-config.php

Do:

/wp-config.php

2. Ochrona przez .htaccess

Dodaj do .htaccess:


  Order Allow,Deny
  Deny from all

3. Dodatkowe pliki do ochrony:


  Order Allow,Deny
  Deny from all

Zabezpieczenie innych wrażliwych plików

  • Debug.log – usuwaj regularnie lub chroń przez .htaccess
  • Error_log – przenieś poza public_html
  • Backupy SQL – nigdy w publicznie dostępnym katalogu
  • Pliki .env – jeśli używasz zmiennych środowiskowych

Zmiana uprawnień przez FTP i SSH – krok po kroku z przykładami komend

Zmiana uprawnień przez FTP/SFTP

FileZilla (GUI):

  1. Połącz się z serwerem przez SFTP
  2. Kliknij prawym na plik/katalog
  3. Wybierz "File permissions"
  4. Wpisz wartość numeryczną (np. 755)
  5. Zaznacz "Recurse into subdirectories" dla katalogów

WinSCP (GUI):

  1. Połącz się przez SFTP
  2. Prawy klik → Properties
  3. Zaznacz odpowiednie uprawnienia lub wpisz wartość ósemkową
  4. Użyj "Set permissions recursively" dla całych drzew

Zmiana uprawnień przez SSH

Podstawowe komendy:

# Zmiana uprawnień pojedynczego pliku
chmod 644 wp-config.php

# Zmiana uprawnień katalogu
chmod 755 wp-content

# Zmiana uprawnień właściciela
chown username:usernamegroup wp-config.php

Zaawansowane operacje rekursywne:

# Ustaw wszystkie katalogi na 755
find /path/to/wordpress/ -type d -exec chmod 755 {} \;

# Ustaw wszystkie pliki na 644
find /path/to/wordpress/ -type f -exec chmod 644 {} \;

# Specjalne uprawnienia dla wp-config.php
chmod 600 wp-config.php

# Zmień właściciela całej instalacji
chown -R username:usernamegroup /path/to/wordpress/

Skrypt do masowej korekty uprawnień:

#!/bin/bash
# Skrypt do naprawy uprawnień WordPress
WEB_ROOT="/var/www/html"
USER="www-data"

echo "Naprawianie uprawnień WordPress..."

# Ustaw właściciela
chown -R $USER:$USER $WEB_ROOT

# Ustaw uprawnienia katalogów
find $WEB_ROOT -type d -exec chmod 755 {} \;

# Ustaw uprawnienia plików
find $WEB_ROOT -type f -exec chmod 644 {} \;

# Specjalne uprawnienia dla wp-config.php
chmod 600 $WEB_ROOT/wp-config.php

echo "Uprawnienia zostały poprawione!"

Automatyczne przywracanie poprawnych uprawnień – skrypty bash i polecenia find

Cron job do regularnej weryfikacji uprawnień

Skrypt sprawdzający uprawnienia:

#!/bin/bash
WEB_ROOT="/var/www/html"
LOG_FILE="/var/log/wp-permissions-check.log"

echo "$(date): Sprawdzanie uprawnień WordPress" >> $LOG_FILE

# Sprawdź uprawnienia katalogów
find $WEB_ROOT -type d ! -perm 755 -exec echo "Katalog z nieprawidłowymi uprawnieniami: {}" \; >> $LOG_FILE

# Sprawdź uprawnienia plików
find $WEB_ROOT -type f ! -perm 644 -exec echo "Plik z nieprawidłowymi uprawnieniami: {}" \; >> $LOG_FILE

# Sprawdź wp-config.php
if [ -f "$WEB_ROOT/wp-config.php" ]; then
    if [ $(stat -c %a "$WEB_ROOT/wp-config.php") != "600" ]; then
        echo "UWAGA: wp-config.php ma nieprawidłowe uprawnienia!" >> $LOG_FILE
    fi
fi

echo "$(date): Sprawdzanie zakończone" >> $LOG_FILE

Dodanie do crona (codziennie o 3:00):

0 3 * * * /path/to/permissions-check.sh

Automatyczne naprawianie uprawnień

Skrypt naprawczy:

#!/bin/bash
WEB_ROOT="/var/www/html"
USER="www-data"

# Funkcja do naprawiania uprawnień
fix_permissions() {
    echo "Naprawianie uprawnień dla $WEB_ROOT..."

    # Ustaw właściciela
    chown -R $USER:$USER $WEB_ROOT

    # Katalogi: 755
    find $WEB_ROOT -type d -exec chmod 755 {} \;

    # Pliki: 644
    find $WEB_ROOT -type f -exec chmod 644 {} \;

    # Specjalne przypadki
    chmod 600 $WEB_ROOT/wp-config.php 2>/dev/null
    chmod 755 $WEB_ROOT/wp-content 2>/dev/null
    chmod 755 $WEB_ROOT/wp-content/uploads 2>/dev/null
    chmod 755 $WEB_ROOT/wp-content/cache 2>/dev/null

    echo "Uprawnienia zostały naprawione!"
}

# Wykonaj tylko jeśli coś jest nie tak
if find $WEB_ROOT -type d ! -perm 755 | grep -q . || find $WEB_ROOT -type f ! -perm 644 | grep -q .; then
    fix_permissions
fi

Jeśli interesuje Cię kompleksowe zabezpieczenie WordPress, polecam przeczytać artykuł: Bezpieczeństwo WordPress: Checklista 2025, gdzie znajdziesz więcej szczegółów na ten temat.

Najczęstsze błędy – 403 Forbidden, błędy zapisu, zbyt liberalne ustawienia (777)

Błąd 403 Forbidden

Przyczyny:

  • Zbyt restrykcyjne uprawnienia katalogów (np. 700 zamiast 755)
  • Nieprawidłowy właściciel plików
  • Błędna konfiguracja .htaccess

Rozwiązanie:

# Sprawdź uprawnienia katalogu głównego
ls -la /var/www/html

# Napraw uprawnienia
chmod 755 /var/www/html
chown www-data:www-data /var/www/html

Błędy zapisu (nie można uploadować plików)

Przyczyny:

  • Zbyt restrykcyjne uprawnienia katalogu uploads
  • Nieprawidłowy właściciel katalogu wp-content
  • Problem z SELinux lub AppArmor

Rozwiązanie:

# Sprawdź uprawnienia uploads
ls -la wp-content/uploads

# Napraw uprawnienia
chmod 755 wp-content/uploads
chown www-data:www-data wp-content/uploads

Zbyt liberalne uprawnienia (777)

NIGDY nie używaj 777! To zaproszenie dla hakerów.

Ryzyka 777:

  • Każdy użytkownik serwera może modyfikować Twoje pliki
  • Haker z dostępem do innego konta może zhakować Twoją stronę
  • Możliwe uploadowanie i wykonywanie złośliwych skryptów

Jeśli musisz użyć 777, to znaczy, że:

  • Właściciel plików jest nieprawidłowy
  • Konfiguracja serwera jest błędna
  • Problem z grupami użytkowników

Inne częste problemy

  • Błąd 500 Internal Server Error – często spowodowany uprawnieniami 666 dla plików PHP
  • Problemy z aktualizacją – WordPress nie może modyfikować plików
  • Błędy cache – pluginy cache nie mogą zapisywać plików

Bezpieczeństwo serwera a uprawnienia – rola użytkowników PHP i właściciela plików

Modele wykonania PHP

1. PHP jako moduł Apache (mod_php)

Charakterystyka: PHP działa jako użytkownik serwera WWW (www-data, apache).

Wymagania: Pliki muszą należeć do www-data lub mieć uprawnienia 777 (NIEZALECANE!).

Ryzyko: Wysokie – wszystkie strony na serwerze dzielą tego samego użytkownika.

2. PHP jako CGI/FastCGI

Charakterystyka: PHP działa jako właściciel plików (suEXEC, suPHP).

Wymagania: Pliki muszą należeć do użytkownika FTP, uprawnienia 755/644.

Zalety: Izolacja między stronami, lepsze bezpieczeństwo.

3. PHP-FPM

Charakterystyka: Nowoczesny serwer PHP z pulami użytkowników.

Wymagania: Konfiguracja pul dla każdej strony.

Zalety: Wydajność + bezpieczeństwo.

Best practices dla konfiguracji serwera

Dla hostingów współdzielonych:

  • Wybierz hosting z suEXEC/suPHP
  • Sprawdź, czy PHP działa jako Twój użytkownik
  • Unikaj serwerów z mod_php

Dla VPS/dedykowanych:

  • Skonfiguruj PHP-FPM z osobnymi pulami
  • Użyj open_basedir do ograniczenia dostępu
  • Włącz chroot jail dla PHP

Izolacja użytkowników

# Sprawdź, jako kto działa PHP
echo "User running PHP: " . exec('whoami');

# W PHP-FPM sprawdź pulę
ps aux | grep php-fpm

Weryfikacja konfiguracji – jak sprawdzić poprawność przez terminal lub panel hostingowy

Sprawdzanie uprawnień przez terminal

Podstawowe komendy:

# Sprawdź uprawnienia całej struktury
ls -la /path/to/wordpress/

# Sprawdź właściciela plików
ls -la /path/to/wordpress/wp-config.php

# Znajdź pliki z nieprawidłowymi uprawnieniami
find /path/to/wordpress/ -type f ! -perm 644
find /path/to/wordpress/ -type d ! -perm 755

Sprawdzanie konkretnych plików:

# Sprawdź uprawnienia wp-config.php
stat wp-config.php

# Sprawdź uprawnienia katalogu uploads
stat wp-content/uploads/

# Sprawdź właściciela całej instalacji
ls -la | head -20

Sprawdzanie przez panele hostingowe

cPanel:

  1. File Manager
  2. Ustaw "Show Hidden Files"
  3. Prawy klik → "Change Permissions"
  4. Sprawdź wartości numeryczne

Plesk:

  1. Files
  2. Wybierz plik/katalog
  3. "Change Permissions" lub "Access Permissions"

DirectAdmin:

  1. File Manager
  2. Prawy klik na plik
  3. "Set Permissions"

Skrypt do kompleksowej weryfikacji

#!/bin/bash
WEB_ROOT="/var/www/html"

echo "=== Weryfikacja uprawnień WordPress ==="
echo "Ścieżka: $WEB_ROOT"
echo ""

# Sprawdź właściciela
echo "1. Właściciel plików:"
ls -la $WEB_ROOT | head -5
echo ""

# Sprawdź uprawnienia krytycznych plików
echo "2. Uprawnienia krytycznych plików:"
if [ -f "$WEB_ROOT/wp-config.php" ]; then
    echo "wp-config.php: $(stat -c %a $WEB_ROOT/wp-config.php)"
fi
echo "index.php: $(stat -c %a $WEB_ROOT/index.php)"
echo ".htaccess: $(stat -c %a $WEB_ROOT/.htaccess 2>/dev/null || echo "nie istnieje")"
echo ""

# Sprawdź uprawnienia katalogów
echo "3. Uprawnienia katalogów:"
echo "wp-content: $(stat -c %a $WEB_ROOT/wp-content)"
echo "wp-content/uploads: $(stat -c %a $WEB_ROOT/wp-content/uploads)"
echo "wp-content/plugins: $(stat -c %a $WEB_ROOT/wp-content/plugins)"
echo "wp-content/themes: $(stat -c %a $WEB_ROOT/wp-content/themes)"
echo ""

# Znajdź problemy
echo "4. Potencjalne problemy:"
echo "Pliki z uprawnieniami innymi niż 644:"
find $WEB_ROOT -type f ! -perm 644 | head -10
echo ""
echo "Katalogi z uprawnieniami innymi niż 755:"
find $WEB_ROOT -type d ! -perm 755 | head -10
echo ""

# Sprawdź czy PHP może pisać
echo "5. Test zapisu PHP:"
php -r "file_put_contents('$WEB_ROOT/test-permissions.php', 'test'); echo file_exists('$WEB_ROOT/test-permissions.php') ? 'OK' : 'ERROR'; unlink('$WEB_ROOT/test-permissions.php');"
echo ""

echo "=== Koniec weryfikacji ==="

Podsumowanie – jak utrzymać właściwe uprawnienia po aktualizacjach i migracjach

Checklista konserwacji uprawnień

Codziennie:

  • Monitoruj logi błędów (403, 500)
  • Sprawdzaj czy uploady działają

Tygodniowo:

  • Sprawdź uprawnienia nowych plików
  • Weryfikuj właściciela plików

Miesięcznie:

  • Uruchom skrypt weryfikacyjny
  • Sprawdź uprawnienia wp-config.php

Po aktualizacjach WordPress:

  • Zawsze sprawdzaj uprawnienia po aktualizacji core
  • Naprawiaj uprawnienia po aktualizacji wtyczek

Automatyzacja konserwacji

Cron job do cotygodniowej weryfikacji:

# Cotygodniowa weryfikacja uprawnień
0 2 * * 0 /path/to/weekly-permissions-check.sh

Integracja z systemem monitoringu:

  • Nagios/Icinga check do weryfikacji uprawnień
  • Alerty email przy zmianie uprawnień
  • Integracja z Wordfence/Sucuri

Procedury po migracji

Przed migracją:

  • Zrób backup uprawnień (getfacl)
  • Dokumentuj obecną konfigurację

Po migracji:

  • Uruchom skrypt naprawczy
  • Sprawdź działanie wszystkich funkcji
  • Weryfikuj uprawnienia krytycznych plików

Narzędzia do zarządzania uprawnieniami

Pluginy WordPress:

  • File Monitor – monitoruje zmiany uprawnień
  • iThemes Security – skanuje uprawnienia
  • Wordfence – file change detection

Narzędzia systemowe:

  • ACL (Access Control Lists) – zaawansowane uprawnienia
  • SELinux/AppArmor – dodatkowa warstwa bezpieczeństwa
  • chattr – immutable attributes dla krytycznych plików

Kluczowe wnioski

  • 755/644 to złoty standard – trzymaj się tych wartości
  • Nigdy nie używaj 777 – to zawsze oznacza błąd konfiguracji
  • Automatyzuj weryfikację – ręczne sprawdzanie zawodzi
  • Monitoruj zmiany – hakerzy często zmieniają uprawnienia
  • Dokumentuj konfigurację – przyda się przy migracjach

Prawidłowo skonfigurowane uprawnienia to fundament bezpieczeństwa WordPressa. Inwestycja czasu w ich poprawne ustawienie i monitorowanie zaprocentuje znacznie mniejszym ryzykiem włamania i stabilniejszym działaniem strony.

Masz problemy z uprawnieniami plików w WordPressie? Chętnie pomożemy Ci poprawnie skonfigurować uprawnienia i zabezpieczyć Twoją stronę przed atakami. Skontaktuj się z nami, aby uzyskać profesjonalne wsparcie w zabezpieczaniu WordPressa.