В настоящее время у меня есть две проблемы со свежей установкой Debian в контексте Nextcloud на Apache.
Версия Nextcloud: 12.0.4
Операционная система: Debian 9.3.0
Версия Apache: 2.4.25
Версия PHP: PHP-FPM 7.0.27
На моем Apache я обычно использую Basic Auth. Поэтому, если вы перейдете на h ****: //my.server.com, вам будет предложен запрос Basic Auth. Я запускаю Nextcloud на h ****: // myserver / cloud. Там я отключил Basic Auth. В деталях:
h ****: //my.server.com (обслуживает базовый index.html с некоторой информацией. Auth by Basic Auth)
h ****: //my.server.com/cloud (nextcloud. Нет базовой аутентификации)
h ****: //my.server.com/otherservice (другие сервисы. Auth by Basic Auth — в настоящее время еще не реализован для упрощения)
Я использую PHP-FPM и, следовательно, mod_proxy_fcgi, а не mod_php. Также я использую fail2ban для безопасности для apache-auth и nextcloud.
Вы найдете мои Config-файлы внизу.
Выпуск 1
Для облачного каталога я отключил Basic Auth, используя «Satisfy any» + «Allow from all», как рекомендовано. Обычно это работает. Если я перехожу (в новом браузере) на h ****: //my.server.com/cloud, я не получаю запроса Basic Auth и могу войти в систему как обычно в Nextcloud. Логин быстрый и приятный. НО, если я сначала перейду к h ****: //my.server.com и введу свой логин Basic Auth, а после ТО перейдите к h ****: //my.server.com/cloud, логин будет очень медленный. Это связано с тем, что Nextcloud пытается использовать данные базовой аутентификации, которые я вводил ранее в корне сайта. Я также включил ведение журнала vor nextcloud в файл (уровень журнала 2). Там я вижу, что при обновлении страницы входа в систему он пытается войти в систему с моим обычным пользователем авторизации.
Это проблематично во многих отношениях. Сначала это делает вход в систему очень медленным и неудобным. Но я также хочу использовать fail2ban для обеспечения безопасности следующего облака. Но если в журнале происходит спам из-за неудачных попыток входа в систему из базовой информации об аутентификации, это на самом деле не работает.
Кроме того, это означает, что если я создаю того же пользователя, который использовался для Basic Auth, с тем же паролем в nextcloud, что и в качестве обходного пути, я не могу выйти из системы и войти в систему другого пользователя, если я выполнял аутентификацию до базовой аутентификации на корневой странице. Как только я это сделаю, я снова войду в систему из-за основных данных аутентификации.
Мой вопрос: как я могу сказать nextcloud прекратить попытки использовать мои basic-Auth-Data из других каталогов на моем apache?
Выпуск 2
Если я использую Nextcloud-приложение или, например, Davdroid для Android некоторые php-URL не переведены правильно. Смотрите этот пример:
access.log Apache
80.187.97.128 - - [21/Jan/2018:16:01:10 +0100] "GET /cloud/index.php/avatar/daily/512 HTTP/1.1" 200 1380
error.log Apache
[Sun Jan 21 16:01:12.727830 2018] [auth_basic:error] [pid 19050] [client 80.187.97.128:30481] AH01617: user daily: authentication failure for "/avatar/daily/512": Password Mismatch
КАК вы можете видеть, что /cloud/index.php/avatar/daily/512 доступен, но каким-то образом переведен в / avatar / daily / 512. Он должен быть переведен в / cloud / avatar / daily / 512. Тем не менее, кажется, что все работает в веб-клиенте, я не думаю, что это связано с Android или приложением. Я думаю, что это просто указывает на проблему с конфигурацией. Это поведение также запускает fail2ban, потому что оно влияет на базовую аутентификацию в результате того, что я только исключил / cloud из Basic Auth. И это приводит к запретам, что отчасти раздражает.
Любая помощь будет высоко ценится!
Вот мои config.files
01_redirect_https.conf (в apache2 \ sites-enabled)
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyVia On
<Proxy *>
AddDefaultCharset off
Allow from all
</Proxy>
</IfModule>
ServerAdmin [email protected]
Listen 80
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/server-status
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
<Location /server-status/>
SetHandler server-status
Order Deny,Allow
Deny from all
Satisfy Any
Allow from 127.0.0.1
</Location>
</VirtualHost>
02_https.conf (в apache2 \ sites-enabled)
<IfModule ssl_module>
Alias "/cloud" "/var/www/html/cloud/"Alias "/" "/var/www/html/"
<VirtualHost *:443>
DocumentRoot "/var/www/html"ServerName my.server.com
ServerAlias myserver
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/apache2/my.server.com.crt
SSLCertificateKeyFile /etc/ssl/apache2/my.server.com.key
SSLOptions StrictRequire
SSLProtocol all -SSLv2
FilterProvider gzdeflate DEFLATE "%{Content_Type} = 'text'"
<IfModule mod_proxy_fcgi.c>
<Proxy "unix:/var/run/php/php7.0-fpm.sock|fcgi://php7.0-fpm">
# we must declare a (any) parameter in here
# or it won't register the proxy ahead of time
ProxySet disablereuse=off
</Proxy>
<FilesMatch "^/(.*\.php(/.*)?)$">
SetHandler proxy:fcgi://php7.0-fpm
</FilesMatch>
</IfModule>
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
AddExternalGroup unixgroup /usr/sbin/unixgroup
SetExternalGroupMethod unixgroup environment
</IfModule>
<Directory /var/www/html>
SSLRequireSSL
Options Indexes FollowSymLinks
Order deny,allow
Allow from all
AuthType Basic
AuthName "This is private"AuthBasicProvider external
AuthExternal pwauth
GroupExternal unixgroup
Require user daily
</Directory>
Include sites-available/05_cloud.include
</VirtualHost>
</IfModule>
05_cloud.include (в apache2 / includes)
<Location /cloud>
SSLRequireSSL
SetEnvIf REQUEST_URI ^/cloud/* noauth =1
Satisfy any
</Location>
<Directory /var/www/html/cloud/>
# according to Nextcloud Manual FPM can't read .htaccess php settins so including it here
include /var/www/html/cloud/.htaccess
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/cloud
SetEnv HTTP_HOME /var/www/html/cloud
Satisfy Any
</Directory>
И вот мой config.php (в / var / www / html / cloud / config /)
<?php
$CONFIG = array (
'instanceid' => 'xxx',
'passwordsalt' => 'xxx',
'secret' => 'xxx',
'trusted_domains' =>
array (
0 => 'myserver',
1 => 'my.server.com',
),
'datadirectory' => '/mnt/raid1/cloud/data',
'overwrite.cli.url' => 'https://my.server.com/cloud/',
'overwritehost' => 'my.server.com',
'overwritewebroot' => '/cloud',
'dbtype' => 'mysql',
'version' => '12.0.4.3',
'dbname' => 'nextcloud',
'dbhost' => 'localhost:3306',
'dbport' => '',
'dbtableprefix' => 'oc_',
'dbuser' => 'cloud',
'dbpassword' => 'xxx',
'installed' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'log_type' => 'file',
'logtimezone' => 'Europe/Berlin',
'logfile' => '/var/log/nextcloud/cloud.log',
'loglevel' => 2,
'mail_from_address' => 'test',
'mail_smtpmode' => 'php',
'mail_smtpauthtype' => 'LOGIN',
'mail_domain' => 'mydomain.de',
'auth.bruteforce.protection.enabled' => true,
);
Вам необходимо установить настройки PHP в конфигурационных файлах PHP-FPM, а не внутри конфигурации apache. PHP-FPM не может получить доступ к чему-либо из Apache.
Других решений пока нет …