Правильні дозволи файлів для WordPress [закрито]


399

Я тут заглянув, але не знайшов деталей щодо найкращих дозволів на файли. Я також подивився на деякі питання формують в WordPress над тут але будь-хто, хто пропонує 777, очевидно, потребує невеликого уроку безпеки.

Коротше моє запитання таке. Які дозволи я маю мати для наступного:

  1. коренева папка, що зберігає весь вміст WordPress
  2. wp-admin
  3. wp-контент
  4. wp-включає

а потім усі файли у кожній із цих папок?


В основному, лише папка для завантаження Wordpress повинна становити 777, але це буде серйозною загрозою для безпеки. Якщо ви використовуєте сервер із увімкненою функцією Suphp, не потрібно змінювати дозволи вручну.
Алі Ф

4
Я голосую за те, щоб закрити це питання як позатематичне, оскільки воно є поза темою для витягу wiki тега: "Питання поза темою включають питання щодо розробки тем, адміністрування WordPress, найкращих практик управління, налаштування сервера тощо"
Adriaan

Відповіді:


499

Під час налаштування WP вам (веб-серверу) може знадобитися доступ для запису до файлів. Тому права доступу можуть знадобитися свободними.

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

Після налаштування вам слід посилити права доступу. Відповідно до Hardening WordPress всі файли, крім wp-вмісту, повинні записуватися лише вашим обліковим записом користувача. wp-контент повинен бути написаний також www-data .

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

Можливо, згодом ви хочете змінити вміст у wp-контенті. У цьому випадку ви могли

  • тимчасово змінити користувача на www-data за допомогою su,
  • надати групі запису wp-контенту доступ 775 і приєднатися до групи www-data або
  • надайте користувачеві права доступу до папки за допомогою ACL .

Що б ви не робили, переконайтеся, що файли мають права доступу до www-даних .


2
Корнель подає одне таке авторитетне посилання нижче. Дивіться також codex.wordpress.org/Changing_File_Permissions , документ Apache httpd.apache.org/docs/2.2/misc/security_tips.html , і майже будь-який пошук Google по цій темі. Але в загальному випадку, коли ви сумніваєтесь, не дайте доступу до запису (і, звичайно, не маєте права власності), і розпушіть у кожному конкретному випадку, а не навпаки (принцип найменшого привілею, який ви порушуєте тут).
Калімо

22
Чому існує функція автоматичного оновлення, якщо вона навіть не працює без зміни дозволів ??
маль

6
@ ManuelSchneid3r, я бачу деякі файли PHP під wp-контентом, чи справді вони повинні писатись www-data??? Це справді звучить зовсім не безпечно.
Алексіс Вілке

12
Це рішення не дозволить Wordpress встановлювати "автоматичні оновлення безпеки". Вам потрібно вручну виконати описані вище кроки для кожного незначного оновлення wordpress.
Jeroen

11
Це не безпечна конфігурація. Налаштування дозволів на читання для цих файлів не впливає, коли користувач apache також належить до цих файлів! НЕ ВИКОРИСТОВУВАТИ. Зверніться до codex.wordpress.org/Changing_File_Permissions
PodTech.io

60

Надання повного доступу до всіх wp-файлів для www-dataкористувача (що в даному випадку є користувачем веб-сервера) може бути небезпечним. Тому швидше НЕ робіть цього:

chown www-data:www-data -R *

Однак це може бути корисно в момент встановлення або оновлення WordPress та його плагінів. Але коли ви закінчили, більше не гарна ідея зберігати wp-файли, що належать веб-серверу.

Це в основному дозволяє веб-серверу розміщувати або перезаписувати будь-який файл на вашому веб-сайті. Це означає, що є можливість зайняти ваш сайт, якщо комусь вдасться використовувати веб-сервер (або отвір безпеки в якомусь .php-скрипті) для розміщення деяких файлів на вашому веб-сайті.

Щоб захистити свій сайт від такої атаки, слід дотримуватися наступних дій:

Усі файли повинні належати вашому обліковому запису користувача, і ви повинні писати їх. Будь-який файл, для якого потрібен доступ для запису з WordPress, має бути доступним для запису веб-сервером, якщо цього вимагає ваш хостинг, це може означати, що ці файли повинні бути груповими власниками облікового запису користувача, який використовується в процесі веб-сервера.

/

Кореневий каталог WordPress: всі файли повинні бути записані лише вашим обліковим записом користувача, за винятком .htaccess, якщо ви хочете, щоб WordPress автоматично генерував правила перезапису для вас.

/wp-admin/

Область адміністрування WordPress: усі файли повинні бути записані лише вашим обліковим записом користувача.

/wp-includes/

Основна частина логіки програми WordPress: усі файли мають бути доступними для запису лише вашим обліковим записом користувача.

/wp-content/

Вміст, що надається користувачем: призначений для запису через ваш обліковий запис користувача та процес веб-сервера.

Всередині /wp-content/ви знайдете:

/wp-content/themes/

Файли тем. Якщо ви хочете використовувати вбудований редактор тем, усі файли повинні бути написані під час веб-сервера. Якщо ви не хочете використовувати вбудований редактор тем, усі файли можуть бути доступними для запису лише вашим обліковим записом користувача.

/wp-content/plugins/

Файли плагінів: усі файли повинні записуватися лише вашим обліковим записом користувача.

Інші каталоги, які можуть бути присутніми, /wp-content/повинні бути задокументовані залежно від того, який плагін або тема потребує. Дозволи можуть відрізнятися.

Джерело та додаткова інформація: http://codex.wordpress.org/Hardening_WordPress


за вашим обліковим записом користувача. означає користувач, що виконує php-скрипти на сайті (як правило, користувач apache)?
shasi kanth

4
@shasikanth Ні, користувач apache - це той, кого він називає "процесом веб-сервера". Обліковий запис користувача - ваш користувач Linux (ssh, ftp, користувач тощо)
Daniel Bang

У цій відповіді та у прийнятій відповіді, чи повинен користувач (не www-data) входити до групи даних www?
користувач658182

1
Ні, у цьому вся суть.
Пьотр Наврот

1
Проблема, з якою я відчуваюсь, - це коли я роблю свого "користувача" SSH власником / wp-content / plugins /, Wordpress стає абсолютно нефункціональним з боку адміністратора, з постійною процедурою спливаючих вікон FTP або помилками дозволів. Неможливо додати та не оновлювати плагіни. Тільки коли я перетворюю www-data власником wp-контенту, функціонал плагіну Wordpress Admin працює. (Приклад: sudo chown www-data: www-data -R / var / www / html / wp-content /)
Heres2u

26

Для тих, хто має свою кореневу папку wordpress під домашньою папкою:

** Ubuntu / apache

  1. Додайте свого користувача до групи даних www:

КРЕДИТ Надання дозволу на запис для www-data group

Ви хочете зателефонувати usermodсвоєму користувачеві. Так це було б:

sudo usermod -aG www-data yourUserName

** Припускаючи, що www-dataгрупа існує

  1. Перевірте, чи є ваш користувач у www-dataгрупі:

    groups yourUserName

Ви повинні отримати щось на кшталт:

youUserName : youUserGroupName www-data

** youUserGroupName зазвичай схоже на ваше ім’я користувача

  1. Рекурсивно змінюйте групове право власності на папку вмісту wp, зберігаючи право власності користувача

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. Змініть каталог на youWeSSiteFolder / wp-content /

    cd youWebSiteFolder/wp-content

  3. Рекурсивно змінюйте групові дозволи папок і підпапок, щоб дозволити записувати:

    find . -type d -exec chmod -R 775 {} \;

** режим `/ home / yourUserName / youWebSiteFolder / wp-content / 'змінився з 0755 (rwxr-xr-x) на 0775 (rwxrwxr-x)

  1. Рекурсивно змінюйте групові дозволи для файлів і під-файлів, щоб дозволити право на запис:

    find . -type f -exec chmod -R 664 {} \;

Результат повинен виглядати приблизно так:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

Дорівнює:

chmod -R ug + rw ім'я папки

Дозвіл буде приблизно 664 для файлів або 775 для каталогів.

Ps, якщо хтось стикається з помилкою 'could not create directory'під час оновлення плагіна, зробіть:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
коли ви знаходитесь в корені вашого домену.
Припустимо: wp-config.phpмає
облікові дані FTP на LocalHost
define('FS_METHOD','direct');


10
-1. Ви НЕ хочете, щоб www-data мали доступ до запису до файлів Wordpress, за винятком wp-вмісту.
Калімо

775 у wp-контенті допомагає. Із 644 для файлів, 755 для папок та користувачем chown: www-data, у мене іноді все ще виникали проблеми із завантаженням медіа, оновленням плагінів тощо. 775 дозволяє зміна wp-вмісту за допомогою www-data: www-data , що вирішує проблему.
guylabbe.ca

Видаліть -R з команди find / chmod, оскільки це повільно і непотрібно.
Адам Хіменес

20

Найкраще прочитати документацію на Wordpress на цьому https://wordpress.org/support/article/changing-file-permissions/

  • Усі файли повинні належати обліковому запису фактичного користувача, а не обліковому запису користувача, який використовується для процесу httpd
  • Право власності на групу не має значення, якщо немає специфічних групових вимог для перевірки прав доступу до веб-сервера. Зазвичай це не так.
  • У всіх каталогах має бути 755 або 750.
  • Усі файли мають бути 644 або 640. Виняток: wp-config.php має бути 440 або 400, щоб інші користувачі на сервері не могли його читати.
  • Жоден каталог не повинен надавати 777, навіть завантажувати каталоги. Оскільки процес php працює як власник файлів, він отримує дозволи власників і може записувати навіть у каталог 755.

4
Не впевнений, чому ви зголосилися: це майже так, як якщо б люди хотіли, щоб головною відповіддю було те, як залишити установку невпевнено !
BCran

Посилання застаріло. новий тут: wordpress.org/support/article/changing-file-permissions І дякую за те, що єдиний з них посилається на фактичні документи!
обиватель

Якщо wp-config.php дорівнює 400, то як Apache повинен включати його (таким чином читати) на завантаження сторінки?
Мартін Браун

14

Я встановлюю дозволи:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

У моєму випадку я створив конкретного користувача для WordPress, який відрізняється від користувача за замовчуванням apache, який перешкоджає доступу з Інтернету до тих файлів, які належать цьому користувачеві.

Тоді він дає дозвіл користувачу apache на обробку папки для завантаження і, нарешті, встановив достатньо захищених прав на доступ до файлів і папок.

ВИДАЛЕНО

Якщо ви використовуєте W3C Total Cache, вам також слід виконати наступне:

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

Тоді це спрацює!

ВИДАЛЕНО

Через деякий час розробляючи веб-сайти WordPress, я рекомендую різні дозволи файлів у середовищі:

У виробництві я б не давав доступу користувачам змінювати файлову систему, я дозволяю їм лише завантажувати ресурси та надавати доступ до деяких папок для конкретних плагінів, щоб робити резервні копії тощо. сервер, це не дуже гарне оновлення плагінів під час постановки та виробництва. Я залишаю тут налаштування виробничого файлу:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data: www-data = apache або nginx користувач та група

Постановочні дії матимуть ті ж дозволи на виробництво, як це має бути клоном.

Нарешті, середовище розробки матиме доступ до оновлень плагінів, перекладів, всього ...

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data: www-data = apache або nginx користувач і згрупуйте свого користувача: root-group = ваш поточний користувач та коренева група

Ці дозволи дозволять вам розвиватися під папками themesта your-pluginне запитувати дозволу. Решта вмісту буде належати користувачеві Apache або Nginx, щоб дозволити WP керувати файловою системою.

Перш ніж створити git repo, спочатку запустіть ці команди:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

11
Nooo! Ніколи не робіть 777. Будь ласка, не радите це (новим) людям, які читають це.
Карло

Ніяких файлів чи папок не має належати процесу http - це головний розрив у безпеці. Якщо зловмисний користувач знайшов подвиг у плагіні чи темі чи самому wordpress, він міг би завантажити код, який потім можна запустити apache та отримати доступ - я бачив це з перших рук :(
DropHit

10

Правильні дозволи для файлу - 644 Правильні дозволи для папки - 755

Щоб змінити дозволи, використовуйте термінальні та наступні команди.

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

755 для папок і 644 для файлів.


1
і 640 для wp-config.php. Але, на жаль, вам потрібно змінити дозволи на папки для завантажень і плагінів і тем на 775, і якщо ви хочете оновити WordPress, вам доведеться змінити всі папки на 775. У цьому розділі ваші дозволи з'являться помилками під час оновлення. / зміна плагінів, тем та завантаження медіа.
erginduran

8

Я думаю, що наведені нижче правила рекомендуються для сайту Wordpress за замовчуванням:

  • Для папок всередині wp-вмісту встановіть дозволи 0755:

    chmod -R 0755 плагіни

    chmod -R 0755 завантажень

    chmod -R 0755 оновлення

  • Нехай користувач apache буде власником вищевказаних каталогів wp-контенту:

    chown apache завантажує

    оновлення chown apache

    плагіни chown apache


1
Ви також можете рекурсивно встановлювати дозволи для каталогів, наприклад: chown -R apache uploads . А якщо потрібно, ви також можете надати право власності на групу apache: chgrp apache uploads
shasi kanth

8

Це фактично залежить від плагінів, які ви плануєте використовувати, оскільки деякі додатки змінюють кореневий документ wordpress. але загалом я рекомендую щось подібне для каталогу wordpress.

Це призначить "корінь" (або будь-якого користувача, який ви використовуєте) як користувача у кожному окремому файлі / папці, R означає рекурсивний характер, тому він просто не зупиняється на папці "html". якщо ви не використовували R, він застосовується лише до каталогу "html".

sudo chown -R root:www-data /var/www/html  

Це встановить власника / групу "wp-content" на "www-data" і, таким чином, дозволить веб-серверу встановити плагіни через панель адміністратора.

chown -R www-data:www-data /var/www/html/wp-content

Це встановить дозвіл на кожен окремий файл у папці "html" (включаючи файли у підкаталогах) на 644, тому сторонні люди не можуть виконати жодного файлу, змінити будь-який файл, група не може виконати жодного файлу, змінити будь-який файл і лише користувачеві дозволено змінювати / читати файли, але все одно навіть користувач не може виконати жоден файл. Це важливо, оскільки це запобігає будь-якому виконанню в папці "html", також оскільки власник папки html та всіх інших папок, крім папки wp-content є "root" (або ваш користувач), www-data може " t змінювати будь-який файл поза папкою вмісту wp, тому навіть якщо на веб-сервері є якась вразливість, і якщо хтось звернувся до сайту несанкціоновано, він не може видалити головний сайт, окрім плагінів.

sudo find /var/www/html -type f -exec chmod 644 {} +

Це обмежить дозвіл на доступ до "wp-config.php" для користувача / групи з rw-r ----- цими дозволами.

chmod 640 /var/www/html/wp-config.php

І якщо плагін або оновлення скаржиться, що не може оновитись, тоді перейдіть до SSH та скористайтеся цією командою та надайте тимчасовий дозвіл "www-data" (веб-серверу) на оновлення / встановлення через панель адміністратора, а потім відновіть повернутися до "root" або вашого користувача після його завершення.

chown -R www-data /var/www/html

І в Nginx (та сама процедура для apache) для захисту папки wp-admin від несанкціонованого доступу та зондування. apache2-utils потрібен для шифрування пароля, навіть якщо у вас встановлений nginx, опустіть c, якщо ви плануєте додати більше користувачів у той самий файл.

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

Тепер відвідайте це місце

/etc/nginx/sites-available/

Використовуйте цей код для захисту папки "wp-admin" з паролем, тепер він запитає пароль / ім'я користувача, якщо ви намагалися отримати доступ до "wp-admin". зауважте, тут ви використовуєте файл ".htpasswd", який містить зашифрований пароль.

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

Тепер перезапустіть nginx.

sudo /etc/init.d/nginx restart

Використання root користувача не рекомендується. Це може бути небезпечніше просто зробіть нового користувача n додайте його до групи sudo
erginduran

Я не виступав тут, щоб використовувати корінь. Я використовував корінь як приклад. Ви можете використовувати будь-яке ім’я замість кореня.
Дон Діланга

2

Команди:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Де ftp-користувач - це той користувач, який ви використовуєте для завантаження файлів

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content

1
слід порушити ім'я користувача: www-data, інакше ви не можете редагувати файли
невідомо 2.02.16

Ви можете використовувати $(whoami)замість ftp-user. За замовчуванням ваш поточний користувач ( не root ) - ваш FTP-користувач, якщо ви використовуєте власний сервер (локальний, vps тощо)
Juanjo Salvador

2

Щоб повністю переконатися, що ваш веб-сайт захищений і ви використовуєте правильні дозволи для своїх папок, використовуйте плагін безпеки на зразок цих:

https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/

https://en-ca.wordpress.org/plugins/wordfence/

Ці плагіни сканують вашу установку Wordpress та повідомлять вас про будь-які можливі проблеми. Вони також попередить вас про будь-які недозволені дозволи на папки. На додаток до цього, ці плагіни порекомендують вам, які дозволи мають бути призначені папкам.


2
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess

1

Я не можу сказати, чи правильно це чи ні, але я використовую зображення Bitnami через Google Compute App Engine. У мене виникли проблеми із плагінами та міграцією, і після подальшого збиття речей за допомогою дозволів chmod'ing я знайшов ці три рядки, які вирішили всі мої проблеми. Не впевнений, чи правильно це, але працював для мене.

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;


1

Визначте у файлі wp_config.

/var/www/html/Your-Project-File/wp-config.php

define( 'FS_METHOD', 'direct' );

chown - змінює право власності на файли / dirs. Тобто власник файлу / dir змінює вказаний, але він не змінює дозволи.

sudo chown -R www-data:www-data /var/www

0

Виходячи з усіх прочитаних і агонізуючих на моїх власних сайтах і після того, як я був взламаний, я склав вищевказаний список, який включає дозволи на плагін безпеки для Wordpress під назвою Wordfence. (Не пов’язана з цим)

У нашому прикладі корінь документа wordpress - /var/www/html/example.com/public_html

Відкрийте дозволи, щоб www-дані могли записувати в корінь документа наступним чином:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

Тепер на інформаційній панелі вашого сайту як адміністратор ви можете виконувати оновлення.

Захищений сайт після завершення оновлень, виконуючи наступні дії:

sudo chown -R wp-user:wp-user public_html/

Наведена вище команда змінює дозволи на все, що встановлено в WordPress, для користувача FTP wordpress.

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

Наведена вище команда забезпечує, що плагін безпеки Wordfence має доступ до своїх журналів. У каталог завантажень також можна записати www-data.

cd plugins
sudo chown -R www-data:wp-user wordfence/

Наведена вище команда також гарантує, що плагін безпеки вимагає доступу для запису для читання для своєї належної функції.

Дозволи довідника та файлів

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

Встановіть дозволи для wp-config.php на 640, щоб тільки файл wp-читача міг читати цей файл і ніхто інший. Дозволи 440 не працювали для мене з вищевказаним правом власності на файл.

sudo chmod 640 wp-config.php

Автоматичні оновлення Wordpress за допомогою SSH добре працювали з PHP5, але зламалися з PHP7.0 через проблеми з пакетом php7.0-ssh2 з Ubuntu 16.04, і я не зміг знайти, як встановити правильну версію і змусити її працювати. На щастя, дуже надійний плагін під назвою ssh-sftp-updateter-support (безкоштовно) робить можливі автоматичні оновлення за допомогою SFTP без необхідності libssh2. Таким чином, вищезазначені дозволи ніколи не потрібно знімати, за винятком випадків, коли це необхідно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.