Spis treści
- Wprowadzenie – dlaczego poprawne uprawnienia to fundament bezpieczeństwa WordPressa
- Jak działa system uprawnień w Linuxie – właściciel, grupa, inni użytkownicy, CHMOD i CHOWN
- Rekomendowane wartości – 755 dla katalogów, 644 dla plików, wyjątki i uzasadnienie
- Wp-config.php i pliki wrażliwe – jak dodatkowo je chronić przed odczytem
- Zmiana uprawnień przez FTP i SSH – krok po kroku z przykładami komend
- Automatyczne przywracanie poprawnych uprawnień – skrypty bash i polecenia find
- Najczęstsze błędy – 403 Forbidden, błędy zapisu, zbyt liberalne ustawienia (777)
- Bezpieczeństwo serwera a uprawnienia – rola użytkowników PHP i właściciela plików
- Weryfikacja konfiguracji – jak sprawdzić poprawność przez terminal lub panel hostingowy
- Podsumowanie – jak utrzymać właściwe uprawnienia po aktualizacjach i migracjach
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):
- Połącz się z serwerem przez SFTP
- Kliknij prawym na plik/katalog
- Wybierz "File permissions"
- Wpisz wartość numeryczną (np. 755)
- Zaznacz "Recurse into subdirectories" dla katalogów
WinSCP (GUI):
- Połącz się przez SFTP
- Prawy klik → Properties
- Zaznacz odpowiednie uprawnienia lub wpisz wartość ósemkową
- 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
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:
- File Manager
- Ustaw "Show Hidden Files"
- Prawy klik → "Change Permissions"
- Sprawdź wartości numeryczne
Plesk:
- Files
- Wybierz plik/katalog
- "Change Permissions" lub "Access Permissions"
DirectAdmin:
- File Manager
- Prawy klik na plik
- "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.