2026年11月12日
2026年11月12日
Zalecane uprawnienia plików WordPress: 755, 644 i wp-config.php
Ten artykuł jest zlokalizowaną wersją japońskiego oryginału. Przeczytaj japoński oryginał
W WordPress podstawą uprawnień plików jest 755 dla katalogów i 644 dla plików. Dostęp do pliku wp-config.php, który zawiera dane połączenia z bazą danych, warto ograniczyć jeszcze bardziej. Sprawdzaj nie tylko liczby, ale też to, kto jest właścicielem plików i z jakiego użytkownika działa PHP — dzięki temu unikniesz zarówno wycieku informacji, jak i problemów typu „nie da się zaktualizować". Zalecane wartości w tym artykule pochodzą z oficjalnego dokumentu WordPress „Hardening WordPress" (sprawdzonego w listopadzie 2026).
Jak czytać liczby uprawnień
Uprawnienia dotyczą trzech grup: „właściciel, grupa, pozostali" i są zapisywane jako suma odczytu (4), zapisu (2) i wykonania (1).
| Wartość | Zapis | Znaczenie |
|---|---|---|
| 755 | rwxr-xr-x | Właściciel może czytać, zapisywać i wchodzić do katalogu, pozostali mogą tylko czytać i wchodzić (dla katalogów) |
| 644 | rw-r--r-- | Właściciel może czytać i zapisywać, pozostali tylko czytać (dla plików) |
| 640 | rw-r----- | Właściciel może czytać i zapisywać, grupa tylko czytać, pozostali nic nie mogą |
| 600 | rw------- | Tylko właściciel może czytać i zapisywać |
| 440 / 400 | r--r----- / r-------- | Nikt nie może zapisywać, a czytać może tylko właściciel (i grupa) |
„Wykonanie" (x) w przypadku katalogu oznacza prawo wejścia do tego katalogu. Jeśli odbierzesz katalogowi x, nie da się czytać plików w środku.
Zalecane wartości dla WordPress
| Element | Zalecana wartość | Uwagi |
|---|---|---|
| Katalogi | 755 (750, gdy na serwerze współdzielonym nie chcesz pokazywać ich innym) | Również automatyczne aktualizacje oficjalne ustawiają katalogi na 755 |
| Pliki | 644 (640 w tym samym przypadku) | Również automatyczne aktualizacje oficjalne ustawiają pliki na 644 |
| wp-config.php | Ogranicz dostęp tak, aby mogli go czytać tylko Ty i serwer WWW | Oficjalne wyjaśnienie mówi: „ogólnie 400 lub 440". W środowisku, w którym PHP działa z tego samego użytkownika, co właściciel pliku, zadziała też 600 lub 400 |
| .htaccess | 644 | Jeśli WordPress ma go nadpisywać przy zapisie ustawień bezpośrednich odnośników (Permalinks), użytkownik, z którego działa PHP, musi mieć prawo zapisu |
| wp-content/uploads | Katalogi 755, pliki 644 | Właścicielem ustaw tego użytkownika, który może zapisywać z poziomu PHP |
Nie musisz ustawiać 777 (zapis dla każdego). Na serwerze współdzielonym mogłoby to pozwolić innym użytkownikom tego samego serwera na modyfikację plików.
Niektóre serwery hostingowe mają własne zalecane wartości (bo PHP działa na nich w różny sposób). Jeśli w instrukcji Twojego hostingu podano wartości, stosuj je w pierwszej kolejności.
Jak myśleć o właścicielu plików
Według oficjalnego wyjaśnienia pliki powinny należeć do Twojego konta użytkownika i być przez Ciebie zapisywalne. Tylko pliki, do których WordPress musi zapisywać (uploads, motyw, jeśli korzystasz z edytora motywów), należy dopasować — właścicielem lub grupą — tak, aby mógł w nich zapisywać użytkownik, z którego działa serwer WWW (PHP).
Jeśli całość oddasz użytkownikowi serwera WWW, np. przez chown -R www-data:www-data, PHP będzie mogło modyfikować wszystkie pliki. Gdy ktoś wykorzysta lukę we wtyczce, szkody łatwo się rozszerzą, więc najpierw sprawdź stan obecny, a dopiero potem zdecyduj.
Jeśli przy aktualizacji wtyczek lub rdzenia WordPress prosi o „dane połączenia (host, nazwa użytkownika i hasło FTP)", przyczyną jest najczęściej właśnie niezgodność właściciela. WordPress wybiera bezpośredni zapis plików tylko wtedy, gdy właściciel plików utworzonych przez PHP jest taki sam jak właściciel plików WordPress. W przeciwnym razie prosi o aktualizację przez FTP. Zamiast rozszerzać uprawnienia do 777, napraw to, dopasowując właściciela.
Sprawdź obecne ustawienia
Wejdź przez SSH do katalogu WordPress i sprawdź wartości oraz właściciela poniższymi poleceniami. Ścieżki dostosuj do swojego środowiska.
cd /var/www/html
# Wartość, właściciel i grupa wp-config.php
stat -c '%a %U:%G %n' wp-config.php
# Znajdź pliki i katalogi, do których zapis mają pozostali użytkownicy
find . -perm -o=w ! -type l
# Znajdź pliki PHP w uploads (zwykle ich nie ma)
find wp-content/uploads -type f -name '*.php'
Użytkownika, z którego działa PHP przy dostępie przez WWW, sprawdź w konfiguracji serwera (np. user w puli PHP-FPM) lub w instrukcji hostingu. Nie musi to być ten sam użytkownik, którym logujesz się przez SSH.
Jeśli w uploads znajdziesz nieznany plik PHP, podejrzewaj włamanie i zanim go usuniesz, zapisz datę i zawartość pliku.
Popraw uprawnienia zbiorczo
Wykonaj to w katalogu WordPress. Przed uruchomieniem zrób kopię zapasową.
cd /var/www/html
# Ustaw katalogi na 755, a pliki na 644
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# Ogranicz wp-config.php (przykład dla środowiska, w którym PHP działa z konta właściciela plików)
chmod 600 wp-config.php
Wartość dla wp-config.php dobierz do środowiska w następujący sposób.
- PHP działa z tego samego użytkownika, co właściciel pliku (większość hostingów współdzielonych, PHP-FPM osobno dla każdego użytkownika): 600 lub 400
- Właścicielem jest Twoje konto, a serwer WWW czyta plik jako grupa: ustaw 640 lub 440 i zmień grupę na grupę serwera WWW
# Przykład: właściciel to Ty, grupa to serwer WWW (www-data), uprawnienia 640
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php
Po zmianie otwórz witrynę i panel administracyjny i sprawdź, czy strona się wyświetla i można się zalogować. Jeśli zobaczysz białą stronę lub błąd, PHP nie może odczytać wp-config.php. Przywróć wartość 644, a potem sprawdź właściciela i grupę.
Przy 400 lub 440 zawiodą wtyczki, które zapisują do wp-config.php (np. te zapisujące ustawienia cache). Tylko na czas konfigurowania takich wtyczek tymczasowo zezwól na zapis.
Zabezpiecz wp-config.php przed odczytem przez WWW
Gdy PHP działa poprawnie, otwarcie wp-config.php w przeglądarce nie pokazuje jego zawartości. Aby zapobiec wyświetleniu kodu źródłowego np. przy awarii PHP, zablokuj dostęp także po stronie serwera WWW. W Apache 2.4 wpisz poniższe w .htaccess w katalogu, w którym znajduje się WordPress (stare Order Deny,Allow / Deny from all to składnia Apache 2.2).
<Files "wp-config.php">
Require all denied
</Files>
Szczegółową procedurę opisuję w artykule „Blokowanie dostępu do wp-config.php".
Sam .htaccess jest już zablokowany przez standardową konfigurację Apache (<Files ".ht*"> w httpd.conf).
Według oficjalnego wyjaśnienia wp-config.php można też przenieść o jeden katalog wyżej niż katalog, w którym leży WordPress. Jeśli w tym samym katalogu nie ma wp-config.php, WordPress szuka go piętro wyżej. Oficjalna dokumentacja wspomina jednak o opiniach, że efekt jest niewielki, oraz o tym, że błędne wykonanie może wręcz zaszkodzić. Jeśli go przenosisz, upewnij się, że katalog wyżej nie jest katalogiem publicznym.
Nie pozwalaj na wykonywanie PHP w uploads
uploads to katalog, do którego zapisuje WordPress, więc to miejsce, w którym atakującym łatwo umieścić pliki. Jeśli PHP nie będzie tu wykonywane, nawet podrzucony plik nie zadziała.
W Apache 2.4 utwórz wp-content/uploads/.htaccess i wpisz poniższe.
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
Aby użyć Require w .htaccess, po stronie serwera musi to zezwalać AllowOverride. Jeśli nie zezwala, pojawi się błąd 500 albo ustawienie zostanie zignorowane. Po zapisaniu otwórz nieistniejący adres PHP, np. https://example.com/wp-content/uploads/test.php, i sprawdź, czy dostajesz 403 (jeśli nadal 404, ustawienie nie działa).
W Nginx umieść poniższe w bloku server, przed location ~ \.php$, który obsługuje PHP. Location z wyrażeniami regularnymi są dopasowywane od góry i używany jest pierwszy pasujący.
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
Po zmianie konfiguracji sprawdź składnię przez nginx -t i dopiero wtedy przeładuj.
Dodajmy, że wgrywanie mediów w WordPress domyślnie nie przyjmuje plików innych niż dozwolone typy (obrazy, PDF itp.). Wgranie pliku PHP jako medium z poziomu panelu administracyjnego zwykle nie jest możliwe.
Na co uważać
- Przed zmianą uprawnień zrób kopię zapasową plików i bazy danych.
- Jeśli zmieniasz uprawnienia w programie FTP, niektóre serwery nie obsługują zmiany zbiorczej. Gdy plików jest dużo, szybciej i bez pomijania działa
findprzez SSH. - Jeśli przy aktualizacji pojawia się prośba o dane połączenia FTP, nie rozszerzaj uprawnień, tylko sprawdź właściciela. Pomocny będzie też artykuł „Jak naprawić błędy uprawnień w WordPress".
- Regularne uruchamianie powyższych poleceń kontrolnych (pliki zapisywalne dla pozostałych użytkowników, PHP w uploads) pozwala szybciej zauważyć rozjechane ustawienia lub włamanie.
Pytania o WordPress? Wydawca tej witryny ma siedzibę w Japonii i odpowiada po japońsku. Kontakt (po japońsku)