Исправьте права доступа к файлам для WordPress

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

Короче говоря, это вопрос. Какие разрешения я должен иметь для следующего:

  1. корневая папка, сохраняющая весь контент WordPress
  2. WP-администратора
  3. WP-содержание
  4. WP-включает в себя

а затем все файлы в каждой из этих папок?

При настройке 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-данные с помощью su ,
  • предоставить доступ к записи 775 группы содержимого wp и присоединиться к группе www-data или
  • предоставить пользователю права доступа к папке с использованием списков ACL .

Независимо от того, что вы делаете, убедитесь, что у файлов есть разрешения rw для www-данных .

Предоставление полного доступа ко всем 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

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

** Ubuntu / apache

  1. Добавьте пользователя в группу www-data:

CREDIT Предоставление разрешений на запись в группу www-data

Вы хотите вызвать usermod на пользователя. Итак, это будет:

 sudo usermod -aG www-data yourUserName 

** Предполагая, что существует группа www-data

  1. Проверьте, что ваш пользователь находится в группе www-data :

    groups yourUserName

Вы должны получить что-то вроде:

 youUserName : youUserGroupName www-data 

** youUserGroupName обычно похож на ваше имя пользователя

  1. Рекурсивно изменить групповое владение папкой wp-content, сохраняя право пользователя

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

  2. Измените каталог на youWebSiteFolder / 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');

Я установил разрешения для:

  # 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, вы также должны сделать следующее:

 chmod 777 wp-content/w3tc-config chmod 777 wp-content/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, я бы рекомендовал разные разрешения для каждой среды:

В производстве я бы не предоставлял пользователям доступ к изменению файловой системы, я разрешу им загружать ресурсы и предоставлять доступ к некоторым конкретным папкам плагинов для создания резервных копий и т. Д. Но управление проектами в Git и использование ключей развертывания на сервер, это не хорошие плагины обновления при постановке или производстве. Я оставляю здесь настройку производственного файла:

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

www-data: www-data = пользователь и группа apache или nginx

Staging будет обладать одинаковыми разрешениями на производство, поскольку это должен быть клон.

Наконец, среда разработки будет иметь доступ к плагинам обновлений, переводам, всему …

 # 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 и группа your-user: 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 {} \; 

Правильные разрешения для файла – 644. Правильные разрешения для этой папки – 755

Чтобы изменить разрешения, используйте терминальные и следующие команды.

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

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

Я думаю, что нижеприведенные правила рекомендуются для сайта WordPress по умолчанию:

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

    Плагины chmod -R 0755

    chmod -R 0755 загрузок

    Обновление chmod -R 0755

  • Пусть пользователь apache является владельцем указанных выше каталогов wp-контента:

    chown apache uploads

    обновление chown apache

    chown apache plugins

Фактически это зависит от плагинов, которые вы планируете использовать, поскольку некоторые плагины меняют корневой документ wordpress. но обычно я рекомендую что-то подобное для каталога wordpress.

Это назначит «root» (или любой другой пользователь, который вы используете) как пользователь в каждом отдельном файле / папке, 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-content, поэтому, даже если на веб-сервере есть какая-либо уязвимость, и если кто-то обратился к сайту неавторизованно, они не могут удалить основной сайт, кроме плагинов.

 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 

Команды:

 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 

Я не могу сказать, правильно ли это или нет, но я использую образ 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 {} \; 

Для OS X используйте эту команду:

 sudo chown -R www:www /www/folder_name 

Чтобы убедиться, что ваш сайт защищен, и вы используете правильные разрешения для своих папок, используйте плагин безопасности следующим образом:

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

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

Эти плагины сканируют вашу установку WordPress и сообщают вам о любых возможных проблемах. Они также предупреждают вас о каких-либо небезопасных разрешениях на папку. Кроме того, эти плагины будут рекомендовать вам, какие разрешения должны быть назначены папкам.

 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 

Лучше всего прочитать документацию WordPress на этом https://codex.wordpress.org/Changing_File_Permissions

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