Правильные разрешения для / var / www и wordpress

41

Я настроил сервер LAMP, и у меня есть доступ через SSH и к странице «все работает» из веб-браузера изнутри моей сети (через IP-адрес) и извне с помощью dyndns.

У нас есть несколько проектов Wordpress, которые находятся в подкаталогах в / var / www / wordpress1 / var / www / wordpress2 и т. Д. Я не могу получить доступ к этим подкаталогам из браузера, чтобы настроить WP - или (я полагаю), чтобы увидеть контент в браузере. В моем браузере появляется ошибка 403 Forbidden.

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

  1. Позвольте разработчикам и мне читать / писать.
  2. разрешить настройку WP и делать свое дело
  3. Разрешить посетителям доступ к сайтам через Интернет.

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

total 12
drwxr-xr-x  2 root root 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root root 4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 root root   43 2012-07-11 20:45 admin_media ->     /root/django_src/django/contrib/admin/media
-rw-r--r--  1 root root  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 root root   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 root root   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Вот результат использования chown -R www-data:www-data /var/www

total 12
drwxr-xr-x  2 www-data www-data 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root     root     4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 www-data www-data   43 2012-07-11 20:45 admin_media -> /root/django_src/django/contrib/admin/media
-rw-r--r--  1 www-data www-data  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 www-data www-data   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 www-data www-data   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Я все еще не могу получить доступ через браузер.

dpbklyn
источник
Пожалуйста, опубликуйте вывод команды ls -la /var/www.
СэрЧарло
пожалуйста, укажите эту информацию в своем вопросе!
Хорхе Кастро
Хорошо, мне потребовалась секунда, чтобы вспомнить, как разместить код ...
dpbklyn
Хорошо, хорошо попробуемchown -R www-data:www-data /var/www
SirCharlo
2
Я думаю, что ваша проблема сейчас в том, что вы используете ссылки. Apache не будет переходить по ссылкам. Что бы вы сделали - переместите эти файлы в / var / www и настройте apache для использования vitrualhosts. См. Help.ubuntu.com/10.04/serverguide/httpd.html Альтернативы, если вы хотите использовать /hdd/web/wordpressдля правильной настройки Apache (корневой каталог). Вы можете настроить Apache для использования ссылок, но я не советую это. См. Также help.ubuntu.com/community/WordPress
Пантера

Ответы:

82

Во-первых, вы должны убедиться, что ваше имя пользователя включено в www-dataгруппу. Если нет, вы можете добавить свое имя пользователя в качестве www-dataгруппы

sudo adduser $USER www-data

После этого вы должны сменить владельца / var / www на ваше имя пользователя.

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

Следующим шагом, для общей практики , вы должны изменить разрешение на 755 (rwxr-xr-x), не рекомендуется менять разрешение на 777 по соображениям безопасности

sudo chmod u=rwX,g=srX,o=rX -R /var/www

В связи с особым разрешения на WordPress или Laravel или другую структуру, то вы можете прочитать документацию соответственно.

Надеюсь, это поможет...

Metamorph
источник
1
не работает для меня, я добавляю, чтобы использоватьsudo chown www-data:www-data -R mywordpressdirectory/
Louis
После смены владельца вы также должны изменить разрешение. Вы изменили свое разрешение на 755?
метаморфия
1
Он сделал с chmod. Он меняет разрешение на 755 с липкими битами (чтобы сохранить новые файлы, принадлежащие www-данным.)
Захари Дахан
Лучшее объяснение, которое я смог найти, короткое и сладкое. Спасибо.
Банаго
1
Таким образом, вы не сможете устанавливать / удалять плагины / темы и т. Д. Из админ-панели, потому что WordPress не будет иметь разрешения на запись.
Игорь Сколдин
3

По-видимому, это то, как это рекомендуется в Руководстве по Ubuntu Server:

Глава 11. Веб-серверы.

1.4. Совместное разрешение на запись

Чтобы более чем один пользователь мог выполнять запись в один и тот же каталог, необходимо предоставить разрешение на запись группе, которую они совместно используют. В следующем примере предоставляется разрешение на совместную запись в / var / www / html группе «веб-мастеров»

Я использую www-данные . Просто замените «веб-мастеров» на вашу группу, убедитесь, что вы добавили пользователя в группу, конечно.

sudo chgrp -R webmasters /var/www/html
sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www/html -type f -exec chmod g=rws "{}" \;

Я только что протестировал его с Dreamweaver со своего рабочего стола Mac и загрузил и заменил файлы, добавленные файлы и т. Д., И он сохраняет правильные разрешения за одним исключением, локальный пользователь становится владельцем новых файлов вместе с www-данными, но любые файлы, созданные пользователем root в Каталог html сохраняет свои права доступа как root, но редактируется локальным пользователем.

$ls -l
$-rw-rw-r-- 1 localUser www-data 11505 May 28 09:56 index2.html
$-rw-rwSr-- 1 root  www-data 11535 May 28 09:58 index.html

Надеюсь, что это проясняет ситуацию и помогает утомленным, потому что я знаю, что всегда устал от этой ситуации, но теперь это ясно для меня.

Да, и я настоятельно рекомендую использовать sftp с ключами для доступа к вашему ftp, отлично работает для меня и не нуждается в PureFTP или любом другом небезопасном способе доставки файлов на сайт. На сайте Digital Ocean есть несколько хороших руководств по защите вашего сервера с помощью ключей ssh:

Как настроить аутентификацию на основе ключей SSH на сервере Linux

MagicCamera
источник
1) это оставляет биты setgid на файлах. Выглядит странно, ничего не делает, открывает дверь к проблемам безопасности, если пользователи могут сделать файлы исполняемыми и запустить их. Но если вас устраивает setgid для файлов, замените сложные finds на just sudo chmod -R g=srwX /var/www/html.
Темото
2) find -exec chmodсоздаст отдельную программу для каждого файла, которая отнимает много времени и создает ненужную нагрузку на систему, если у вас много файлов. Решение sudo find /var/www/html -type f -print0 |sudo xargs -0 chmod g=rw. xargs попытается передать как можно больше путей к одному экземпляру chmod.
Темото
0

Убедитесь, что Apache имеет права на выполнение для /hdd/web/mediaи /hdd/web/wordpress.

Бег:

chmod o+x /root /root/site /root/site/about

Кроме того, Apache должен быть настроен для разрешения доступа к каталогу в файловой системе. Это должен сделать системный администратор, вставив директиву в файлы конфигурации apache (httpd.conf).

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

См. Http://httpd.apache.org/docs/2.0/mod/core.html#directory.

жасмин
источник
Спасибо всем ... Я решил пойти по пути наименьшего сопротивления ... удалил символические ссылки. Все работает отлично.
дпбклин
0

Чтение руководства по установке Ubuntu .

chown -R www-data /usr/share/wordpress

Может быть, проще установить его таким образом, чем пытаться разархивировать файлы на /var/www

https://help.ubuntu.com/community/WordPress ...

В любом случае WordPress работает на Apache ... правильно? если вы хотите сделать это таким образом ... вы показываете do as @metamorph an, а затем разрешите apache2 httpd.confследующим образом:

<VirtualHost *:80>
        ServerName site
        ServerName site.domain
        DocumentRoot /srv/www/wordpress.site

        DirectoryIndex index.php

</VirtualHost>

а потом default-server.conf.

<Directory "/srv/www/wordpress.site">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

Может быть, лучше сделать шаг за шагом https://help.ubuntu.com/community/WordPress

maniat1k
источник