Правильні дозволи для / var / www та wordpress


41

Я створив сервер LAMP і маю доступ через SSH та на сторінку "це працює" з веб-браузера зсередини моєї мережі (через ip-адресу) та ззовні за допомогою dyndns.

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

Я припускаю, що це проблема дозволів. Скажіть, будь ласка, відповідні налаштування дозволів на:

  1. Дозвольте розробникам і мені читати / писати.
  2. щоб дозволити налаштувати WP і зробити свою справу
  3. Дозволити відвідувачам доступ до веб-сайтів через Інтернет.

Я також повинен зазначити, що підпапка насправді є посиланням на папку на іншому внутрішньому hdd - я не думаю, що це не змінить значення, але я подумав, що повинен розкрити.

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

Я досі не можу отримати доступ через браузер.


Будь ласка, опублікуйте вихід команди ls -la /var/www.
SirCharlo

будь ласка, поставте цю інформацію у своє запитання!
Хорхе Кастро

Гаразд, мені знадобилося секунду, щоб запам'ятати, як поштовий індекс ...
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
Panther

Відповіді:


81

По-перше, ви повинні переконатися, що ваше ім’я користувача включено до 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 або іншим фреймворком, ви можете прочитати документацію відповідно.

Сподіваюся, це допомагає ...


1
не працювало для мене, додаю до використанняsudo chown www-data:www-data -R mywordpressdirectory/
Луї

Після зміни власності вам слід також змінити дозвіл. Ви змінили дозвіл на 755?
метаморфа

1
Він зробив с chmod. Він змінює дозвіл на 755 за допомогою липких бітів (щоб зберігати нові файли, що належать www-data.)
Zachary Dahan

Найкраще пояснення, яке я міг знайти, коротке і миле. Спасибі.
Банаго

1
Таким чином, ви не зможете встановити / видалити плагіни / теми тощо з панелі адміністратора, оскільки WordPress не матиме дозволу на запис.
Ігор Сколдін

3

Мабуть, саме так рекомендується в Посібнику з сервера Ubuntu:

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

1.4. Надання дозволу на запис

Для того, щоб більш ніж один користувач міг писати в один і той же каталог, потрібно буде надати дозвіл на запис групі, якою вони спільно користуються. Наступний приклад надає дозвіл на спільне написання / var / www / html групі "веб-майстрам"

Я використовую www-data . Просто замініть "веб-майстрів" своєю групою, не забудьте додати користувача до групи, звичайно.

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


1), що залишає у файлах встановлені жорсткі біти. Виглядає дивно, нічого не робить, відкриває двері до проблем безпеки, якщо користувачі можуть зробити файли виконуваними та запустити їх. Але якщо вас влаштовує setgid для файлів, замініть складні finds на просто 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


Спасибі всім ... Я вирішив піти шляхом найменшого опору ... зняв символічні посилання. Все працює чудово.
dpbklyn

0

Читання посібника з встановлення для Ubuntu ..

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

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

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

будь-який спосіб wordpress працює на apache ... правда? якщо ви хочете зробити це таким чином .. ви показуєте, як зробіть як @metamorph, то дайте дозвіл на 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

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