Я знаю, что этот вопрос уже поднимался, но клянусь, я прочитал и другие сообщения. Я использую виртуальные хосты на сервере Apache / 2.4.7 (Ubuntu) для размещения нескольких сайтов wordpress. У меня есть один сайт, SiteA, который работает нормально, но SiteB (SiteBroken) не работает.
Я установил apache через apt-get, и мой файл конфигурации
/etc/apache2
-rw-r--r-- 1 root root 7.3K Mar 28 15:29 apache2.conf
Я читал о смене пользователей либо внутри этого файла (в чем я не уверен), либо через chown
команда, и как таковые мои разрешения для SiteA против SiteB
/var/www/SiteA/public_html
total 188k
drwxr-xr-x 5 root root 4.0K Mar 31 00:42 ..
-rw-r--r-- 1 root root 25K Apr 4 20:23 wp-signup.php
-rw-r--r-- 1 root root 11K Apr 4 20:23 wp-settings.php
-rw-r--r-- 1 root root 33K Apr 4 20:23 wp-login.php
-rw-r--r-- 1 root root 2.9K Apr 4 20:23 wp-cron.php
-rw-r--r-- 1 root root 7.1K Apr 4 20:23 readme.html
-rw-r--r-- 1 root root 418 Apr 4 20:23 index.php
-rw-r--r-- 1 root root 3.0K Apr 4 20:23 xmlrpc.php
-rw-r--r-- 1 root root 4.0K Apr 4 20:23 wp-trackback.php
-rw-r--r-- 1 root root 2.7K Apr 4 20:23 wp-load.php
-rw-r--r-- 1 root root 2.4K Apr 4 20:23 wp-links-opml.php
drwxr-xr-x 12 root root 4.0K Apr 4 20:23 wp-includes
-rw-r--r-- 1 root root 2.7K Apr 4 20:23 wp-config-sample.php
-rw-r--r-- 1 root root 4.9K Apr 4 20:23 wp-comments-post.php
-rw-r--r-- 1 root root 271 Apr 4 20:23 wp-blog-header.php
-rw-r--r-- 1 root root 4.9K Apr 4 20:23 wp-activate.php
-rw-r--r-- 1 root root 20K Apr 4 20:23 license.txt
-rw-r--r-- 1 root root 8.1K Apr 4 20:23 wp-mail.php
drwxr-xr-x 9 root root 4.0K Apr 4 20:23 wp-admin
drwxr-xr-x 6 www-data www-data 4.0K Apr 16 14:55 wp-content
-rw-r--r-- 1 root root 3.5K Apr 16 14:58 wp-config.php
drwxr-xr-x 5 root root 4.0K Apr 16 14:58 .
/var/www/SiteB/public_html
total 220k
-rw-r--r-- 1 root root 3.0K Jan 5 21:17 xmlrpc.php
-rw-r--r-- 1 root root 4.0K Jan 5 21:17 wp-trackback.php
-rw-r--r-- 1 root root 25K Jan 5 21:17 wp-signup.php
-rw-r--r-- 1 root root 11K Jan 5 21:17 wp-settings.php
-rw-r--r-- 1 root root 8.1K Jan 5 21:17 wp-mail.php
-rw-r--r-- 1 root root 33K Jan 5 21:17 wp-login.php
-rw-r--r-- 1 root root 2.7K Jan 5 21:17 wp-load.php
-rw-r--r-- 1 root root 2.4K Jan 5 21:17 wp-links-opml.php
-rw-r--r-- 1 root root 2.9K Jan 5 21:17 wp-cron.php
-rw-r--r-- 1 root root 4.9K Jan 5 21:17 wp-comments-post.php
-rw-r--r-- 1 root root 271 Jan 5 21:17 wp-blog-header.php
-rw-r--r-- 1 root root 4.9K Jan 5 21:17 wp-activate.php
-rw-r--r-- 1 root root 418 Jan 5 21:17 index.php
drwxr-xr-x 9 root root 4.0K Jan 5 22:11 wp-admin
-rw-r--r-- 1 root root 20K Feb 18 22:05 license.txt
drwxr-xr-x 12 root root 4.0K Mar 1 21:57 wp-includes
-rw-r--r-- 1 root root 3.4K Mar 28 23:48 wp-config.php
-rw-r--r-- 1 root root 7.1K May 7 06:30 readme.html
drwxr-xr-x 8 www-data www-data 4.0K May 7 23:08 wp-content
-rw-r--r-- 1 root root 25K May 25 06:23 error_log
-rw-r--r-- 1 root root 792 May 30 14:50 2.htaccess
-rw-r--r-- 1 root root 241 May 30 14:51 .offline.htaccess
drwxr-xr-x 6 root root 4.0K May 30 14:55 ..
drwxr-xr-x 5 root root 4.0K Jun 1 07:25 .
Я удалил .httaccces
из конфигурации SiteB, так как я пытался исключить эту переменную, чтобы мой сайт получил ошибку 403 You don't have permission to access / on this server
/etc/apache2/sites-available
cat SiteA.conf
# public: /var/www/SiteA/public_html/
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin webmaster@SiteA
ServerName www.SiteA
ServerAlias SiteA
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /var/www/SiteA/public_html
# Log file locations
LogLevel warn
ErrorLog /var/www/SiteA/log/error.log
CustomLog /var/www/SiteA/log/access.log combined
</VirtualHost>
/etc/apache2/sites-available
cat SiteBroken.conf
# domain: SiteBroken
# public: /var/www/SiteBroken/public_html/
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin webmaster@SiteBroken
ServerName www.SiteBroken
ServerAlias SiteBroken
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /var/www/SiteBroken/public_html
# Log file locations
LogLevel warn
ErrorLog /var/www/SiteBroken/log/error.log
CustomLog /var/www/SiteBroken/log/access.log combined
</VirtualHost>
diff SiteA.conf SiteBroken.conf
1,3c1,2
<
<
< # public: /var/www/SiteA/public_html/
---
> # domain: SiteBroken
> # public: /var/www/SiteBroken/public_html/
7,9c6,8
< ServerAdmin webmaster@SiteA
< ServerName www.SiteA
< ServerAlias SiteA
---
> ServerAdmin webmaster@SiteBroken
> ServerName www.SiteBroken
> ServerAlias SiteBroken
13c12
< DocumentRoot /var/www/SiteA/public_html
---
> DocumentRoot /var/www/SiteBroken/public_html
16,17c15,16
< ErrorLog /var/www/SiteA/log/error.log
< CustomLog /var/www/SiteA/log/access.log combined
---
> ErrorLog /var/www/SiteBroken/log/error.log
> CustomLog /var/www/SiteBroken/log/access.log combined
19,20d17
<
/etc/apache2/sites-available
total 44K
-rw-r--r-- 1 root root 6.3K Jan 7 2014 default-ssl.conf
-rw-r--r-- 1 root root 1.4K Jan 7 2014 000-default.conf
-rw-r--r-- 1 root root 626 Mar 31 00:42 SiteA.conf
drwxr-xr-x 8 root root 4.0K Jun 1 07:13 ..
-rw-r--r-- 1 root root 713 Jun 1 07:16 SiteBroken.conf
drwxr-xr-x 2 root root 4.0K Jun 1 07:16 .
Я заметил это сообщение об ошибке в журнале ошибок еще вчера, когда искал неисправности.
/var/www/SiteBroken/log$ cat error.log
[Tue Mar 31 03:22:14.410438 2015] [:error] [pid 25622] [client 113.123.33.183:47379] script '/var/www/SiteBroken/public_html/phpinfo.php' not found or unable to stat
SiteA, который работает отлично, имеет все те же файлы wordpress и тому подобное, нет phpinfo.php
файл в каталоге SiteA, я не уверен, почему работает один сайт, но я не могу просмотреть SiteB
Недавно я переключил весь каталог public_html на www-data, но это все еще не разрешило сообщение об ошибке 403.
sudo chown -R www-data:www-data /var/www/SiteBroken/public_html/
drwxr-xr-x 5 www-data www-data 4.0K Jun 1 07:25 public_html
Включена отладка на уровне журнала и все, что я вижу, это остановка формы вывода и перезапуск apache, в дополнение к этому отсутствующему файлу `/var/www/html/moadmin.php 'и то, нужен ли этот файл
[Mon Jun 01 07:25:38.832460 2015] [mpm_prefork:notice] [pid 9847] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Mon Jun 01 07:25:38.832538 2015] [core:notice] [pid 9847] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jun 01 08:27:58.649847 2015] [mpm_prefork:notice] [pid 9847] AH00169: caught SIGTERM, shutting down
[Mon Jun 01 08:27:59.551789 2015] [mpm_prefork:notice] [pid 10198] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Mon Jun 01 08:27:59.551885 2015] [core:notice] [pid 10198] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jun 01 10:43:46.042411 2015] [:error] [pid 10208] [client 89.248.172.27:51451] script '/var/www/html/moadmin.php' not found or unable to stat
[Tue Jun 02 07:53:47.086020 2015] [mpm_prefork:notice] [pid 10198] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 07:53:48.203046 2015] [mpm_prefork:notice] [pid 12370] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 07:53:48.203105 2015] [core:notice] [pid 12370] AH00094: Command line: '/usr/sbin/apache2'
[Tue Jun 02 07:57:14.417485 2015] [mpm_prefork:notice] [pid 12370] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 07:57:15.280777 2015] [mpm_prefork:notice] [pid 12515] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 07:57:15.280852 2015] [core:notice] [pid 12515] AH00094: Command line: '/usr/sbin/apache2'
[Tue Jun 02 07:59:45.902752 2015] [mpm_prefork:notice] [pid 12515] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 07:59:47.017507 2015] [mpm_prefork:notice] [pid 12653] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 07:59:47.017577 2015] [core:notice] [pid 12653] AH00094: Command line: '/usr/sbin/apache2'
[Tue Jun 02 08:05:59.014895 2015] [mpm_prefork:notice] [pid 12653] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 08:06:00.124043 2015] [mpm_prefork:notice] [pid 12787] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 08:06:00.124101 2015] [core:notice] [pid 12787] AH00094: Command line: '/usr/sbin/apache2'
[Tue Jun 02 08:23:09.214883 2015] [mpm_prefork:notice] [pid 12787] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 08:23:10.332498 2015] [mpm_prefork:notice] [pid 13039] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 08:23:10.332556 2015] [core:notice] [pid 13039] AH00094: Command line: '/usr/sbin/apache2'
[Tue Jun 02 08:40:06.186778 2015] [mpm_prefork:notice] [pid 13039] AH00169: caught SIGTERM, shutting down
[Tue Jun 02 08:40:07.305531 2015] [mpm_prefork:notice] [pid 13491] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.7 configured -- resuming normal operations
[Tue Jun 02 08:40:07.305595 2015] [core:notice] [pid 13491] AH00094: Command line: '/usr/sbin/apache2'
Обновление: ls -la
/var/www$ ls -la
total 48
drwxr-xr-x 7 root root 4096 Jun 2 08:21 .
drwxr-xr-x 14 root root 4096 Mar 28 14:40 ..
drwxr-xr-x 5 root root 4096 Mar 31 00:42 SiteA (working website)
drwxr-xr-x 2 root root 4096 May 30 12:50 html
drwxr-xr-x 6 root www-data 4096 May 30 14:55 SiteBroken
Обновление 06.06.15
Я изменил apache.conf
после прочтения нескольких других сообщений SE, на следующее:
<Directory />
Options FollowSymLinks
AllowOverride all
Require all granted
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Я даже добавил туда свой полный корень документа, чтобы проверить все и вся:
<Directory /var/www/html/SiteBroken/public_html>
Options FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Теперь мой SiteBroken появляется и генерируется, когда я указываю в браузере URL-адрес, однако теперь я не могу переходить на какие-либо страницы, т.е. www.sitebroken.com/foo
или www.sitebroken.com/bar
Мне сказали, что мой Virutal Server не может читать файлы php? Это так?
/var/www/html/SiteBroken/public_html$
total 188K
-rw-r--r-- 1 root root 3.0K Apr 4 20:23 xmlrpc.php
-rw-r--r-- 1 root root 4.0K Apr 4 20:23 wp-trackback.php
-rw-r--r-- 1 root root 25K Apr 4 20:23 wp-signup.php
-rw-r--r-- 1 root root 11K Apr 4 20:23 wp-settings.php
-rw-r--r-- 1 root root 8.1K Apr 4 20:23 wp-mail.php
-rw-r--r-- 1 root root 33K Apr 4 20:23 wp-login.php
-rw-r--r-- 1 root root 2.7K Apr 4 20:23 wp-load.php
-rw-r--r-- 1 root root 2.4K Apr 4 20:23 wp-links-opml.php
-rw-r--r-- 1 root root 2.9K Apr 4 20:23 wp-cron.php
-rw-r--r-- 1 root root 2.7K Apr 4 20:23 wp-config-sample.php
-rw-r--r-- 1 root root 4.9K Apr 4 20:23 wp-comments-post.php
-rw-r--r-- 1 root root 271 Apr 4 20:23 wp-blog-header.php
-rw-r--r-- 1 root root 4.9K Apr 4 20:23 wp-activate.php
-rw-r--r-- 1 root root 7.1K Apr 4 20:23 readme.html
-rw-r--r-- 1 root root 20K Apr 4 20:23 license.txt
-rw-r--r-- 1 root root 418 Apr 4 20:23 index.php
drwxr-xr-x 12 root root 4.0K Jun 6 18:17 wp-includes
drwxr-xr-x 6 www-data www-data 4.0K Jun 6 18:17 wp-content
drwxr-xr-x 5 root root 4.0K Jun 6 18:17 .
drwxr-xr-x 9 root root 4.0K Jun 6 18:17 wp-admin
drwxr-xr-x 5 root root 4.0K Jun 6 18:17 ..
-rw-r--r-- 1 root root 3.5K Jun 6 19:03 wp-config.php
Как я уже сказал в одном из своих комментариев, у меня есть еще один сайт, SiteA, полностью отражающий конфигурации SiteBroken, и я озадачен тем, как один сайт может работать, а другой, SiteBroken, затем получает ошибку 403, а теперь ошибку 404. The requested URL /foo/ was not found on this server.
Я использовал эти вопросы https://askubuntu.com/questions/448944/where-to-place-my-local-website-starting-with-the-2-4-7-version-of-apache2 и https://stackoverflow.com/questions/6959189/apache-virtualhost-403-forbidden
Я также ненадолго установил nginx и столкнулся с аналогичной проблемой, когда я считаю, что nginx не мог прочитать мои файлы php?
Попробуйте настроить свой http-xampp
вы найдете там этот код:
<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
Require local
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</LocationMatch>
Попробуйте изменить это с помощью этого:
<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
Require local
Require ip 192.120.203 // ip address of another pc or I would say the start of the ipaddress .
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</LocationMatch>
Это работает для меня, когда я получил эту ошибку. Надеюсь, это сработает и для вас.
Смена владельца на www-data: www-data с разрешениями r / w для папок, в которых размещается контент, позволит процессу httpd записывать в эту папку, что, в зависимости от сложности приложения и его безопасности, может дать хакеру возможность перезаписывать законный код вещами по своему выбору.
Вероятно, проблема в том, что вам нужно добавить бит выполнения в родительские папки и изменить группы:
chmod g=rx /var/www/SiteA
chown root:www-data /var/www/SiteA
chmod g=rx /var/www/SiteA/public_html
chown root:www-data /var/www/SiteA/public_html
Без бита выполнения процесс не может спуститься в папку для чтения файлов, даже если они ему принадлежат.
Попробуйте поместить это в свой VirtualHost:
<Directory /var/www/SiteBroken/public_html/>
Require all granted
</Directory>
Как правило, делать всю установку WordPress принадлежащей www-data (даже для тестирования) - очень плохая практика. Это позволит процессу Apache записывать файлы в любом месте вашего дерева каталогов, включая файлы PHP. Только за последние 3 месяца я испытал более десятка сайтов, которые были взломаны таким образом. Затем злоумышленники могут установить все, что захотят - бэкдор-оболочки, спам-боты, что угодно. Они также могут прочитать ваш файл wp-config.php, который содержит все учетные данные вашей базы данных. Это также может привести к тому, что злоумышленник просмотрит другие каталоги сайта (например, SiteA) и получит полный доступ к этой базе данных.
Не уверен, что требование «Все, предоставленное выше», поможет, но я знаю, что Apache 2.4 отличается от 2.2 своими механизмами безопасности, и это помогало мне в прошлом.
Изменить владельца на www-data
вместо root. Вы можете сделать это с помощью chown
как это:
$ sudo chown -R www-data:www-data /var/www/SiteA/public_html
Это сделает www-data
владелец всех файлов / каталогов в public_html
.