Puncte:0

Apache 2.4 no auth config funcționează în VirtualHost

drapel cv

Configurez un server nou-nouț â tocmai am creat o instanță AWS EC2, am făcut o nouă instalare a apache și mod_ssl și am aproape cea mai simplă dintre configurații. Apache pare să ignore orice configurație de autentificare (inclusiv LogLevel) în VirtualHost blocuri.

Aceasta este cu Apache 2.4.51 pe amzn2.x86_64 Linux.

Am început prin a redirecționa HTTP către HTTPS, apoi am urmat instrucțiunile de bază pentru Apache 2.4 Autentificare și autorizare. Asta m-a dus la următorul virtual.conf:

<VirtualHost _default_:80>
        DocumentRoot /var/www/html
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
        LogLevel debug
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key
        <Directory "/var/www/html">
                AllowOverride All
                Options Indexes FollowSymLinks
                AuthType Basic
                AuthName "Restricted Files"
                # (Following line optional)
                AuthBasicProvider file
                AuthUserFile "/mount/local/apache/passwd/passwords"
                Require user someuser
        </Directory>
        DocumentRoot /var/www/html
</VirtualHost>

În general, cele de mai sus pare să funcționeze, cu excepția chestiilor de autentificare. Dacă merg la adresa mea IP într-un browser web, redirecționează corect la 443, servește certificatele din calea specificată (non-standard) și o pot vedea înregistrând depanare nivel de activitate, cel puțin pentru mod_ssl. Cu toate acestea, servește doar acest index.html de la /var/www/html/ (NB: /var/www/html este o legătură simbolică).

am găsit aceasta alta intrebare, ceea ce m-a determinat să caut oricare Solicitați toate acordate directive.

# pwd
/etc/httpd/conf.d
# grep Necesită * 2>/dev/null
autoindex.conf:# Module necesare: mod_authz_core, mod_authz_host,
autoindex.conf: Solicită toate acordate
ssl.conf:# Cu SSLRequire puteți face controlul accesului pe director
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# o StrictRequire:
ssl.conf:# Acest lucru interzice accesul atunci când „SSLRequireSSL” sau „SSLRequire” este aplicat chiar și
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: Necesită metoda GET POST OPTIONS
virtual.conf: Solicita utilizatorului un utilizator
welcome.conf: Solicită toate acordate

Cel din autoindex.conf este în interiorul unui <Directory "/usr/share/httpd/icons"> bloc, iar cel din bun venit.conf este in <Directory /usr/share/httpd/noindex>. eu făcut gasesti unul in /etc/httpd/conf/http.conf:

# Relaxați și mai mult accesul la rădăcina implicită a documentului:
<Directorul „/var/www/html”>
    Opțiuni Indexuri FollowSymLinks
    AllowOverride Nici unul
    Solicitați toate acordate
</Director>

Rețineți, la această instalare (via yum pe Amazon Linux 2), fișierul de configurare principal este /etc/httpd/conf/http.conf. Ultima linie a acelui fișier este IncludeOpțional conf.d/*.conf. Configurația mea principală pe care am postat-o ​​mai sus este în /etc/httpd/conf.d/virtual.conf.

Am încercat să comentez asta Solicitați toate acordate și a repornit serverul, dar nicio modificare. Atunci am observat că nu pare să facă nimic. Întrebarea menționată anterior a arătat câteva intrări în fișierul său jurnal. Cu toate acestea, chiar și deși am Depanare LogLevel, nu văd nimic legat de authz_core în fișierele jurnal, așa cum era el. ¯_(ã)_/¯

În acest moment, am încercat o serie de modificări în interiorul <VirtualHost> bloc:

  • Am încercat să împachetez liniile AuthType de bază prin Solicitați utilizatorului un utilizator într-o <RequireAll> bloc
  • Am incercat sa adaug Solicitați refuzul tuturor inainte de Solicitați utilizator
  • Am încercat să folosesc un .htaccess fișier cu aceeași configurație
  • Am încercat să schimb AllowOverride All la AllowOverride All AuthConfig și folosind a .htaccess fişier
  • Am încercat să extind logarea la LogLevel depanare auth_basic:trace1 authz_core:trace1

În toate cazurile, nicio modificare, iar configurația se analizează bine. Serverul doar servește pagina și nu există nimic în niciunul dintre fișierele jurnal.

in orice caz, dacă fac modificări în principal conf/httpd.conf fișier în interiorul <Directory "/var/www/html"> bloc, lucrurile funcționează conform așteptărilor:

  • schimbându-se Solicitați toate acordate la Solicitați refuzul tuturor (în loc să-l comentați) blochează accesul
  • schimbându-se AllowOverride nici unul la AllowOverride AuthConfig face al meu .htaccess fișier cu aceeași configurație de autentificare ca în fișierul <VirtualHost> blochează funcționarea conform așteptărilor â solicită numele de utilizator și parola
  • apărând logare cu LogLevel depanare auth_basic:trace1 authz_core:trace1 îmi aduce o mulțime de jurnalism

Deci, pentru a rezuma, chiar dacă al meu <VirtualHost> config funcționează în general (redirecționare, SSL, depanare pentru orice, cu excepția auth), pare să ignore în tăcere orice auth configurație, inclusiv LogLevel.

Pe termen scurt, mi-am rezolvat problema anulând toate modificările făcute în fișierul de configurare principal, astfel încât lucrurile să nu fie depășite în timpul unei actualizări de software și le-am introdus în conf/00-override.conf:

<Directory "/var/www/html">
    AllowOverride All
    AuthType Basic
    AuthName "Restricted Files"
    # (Following line optional)
    AuthBasicProvider file
    AuthUserFile "/mount/local/apache/passwd/passwords"
    Require user someuser
</Directory>

Totuși, ar fi bine să poți configura autorizarea la nivel de gazdă virtuală. Vreo idee?

Gerard H. Pille avatar
drapel in
Au fost încărcate modulele necesare? Ce obțineți în jurnalul de erori când reporniți Apache?
philolegein avatar
drapel cv
Nu sunt complet sigur care sunt „necesare”, dar `apachectl -t -D DUMP_MODULES` _mi se pare_ corect. În jurnalul de eroare la repornire, singurele mesaje sunt despre monitorizarea bătăilor inimii și neacceptarea mpm. Pot să pun jurnalul complet de repornire în întrebare, dacă credeți că va ajuta.
Gerard H. Pille avatar
drapel in
Nu există niciun fișier .conf în /etc/httpd care să specifice regulile de acces pentru /var/www și un „allowoverride none”?
philolegein avatar
drapel cv
/etc/httpd/httpd.conf are un `Require all granted` pentru /var/www înainte de intrarea sa /var/www/html, dar am presupus că mai târziu, mai specific a avut prioritate. În același fișier /, /var/www și /var/www/html toate au un allowoverride niciunul.
Gerard H. Pille avatar
drapel in
Ai dreptate, „allowoverride” contează pentru .htaccess. Nu există .htaccess în /var/www/html? Aveți două configurații pentru /var/www/html. Mă întreb în ce ordine sunt analizate.
Gerard H. Pille avatar
drapel in
De asemenea, nu uitați să ștergeți memoria cache a browserului.
philolegein avatar
drapel cv
Singurul lucru din /var/www/html este un index.html care spune Hello World. Conform https://httpd.apache.org/docs/2.4/sections.html#merging „Secțiuni din interior secțiunile sunt aplicate după secțiunile corespunzătoare din afara definiției gazdei virtuale. Acest lucru permite gazdelor virtuale să suprascrie configurația serverului principal.”, așa că ar trebui să fie bine.Nu pot să-mi imaginez cât de important ar conta stocarea în cache, deoarece văd cererea pe server, dar am șters-o oricum și tot același comportament.
philolegein avatar
drapel cv
De asemenea, am încercat să adaug `Require all denied` la configurația vhost și tot același comportament.
Gerard H. Pille avatar
drapel in
Adăugați jurnalele separate pentru gazda respectivă, pentru a vedea dacă este utilizat.
philolegein avatar
drapel cv
@GerardH.Pille â modificări substanțiale la întrebare; acum pare clar că este o problemă în interiorul blocurilor virtual-gazdă.
Gerard H. Pille avatar
drapel in
Cândva (luceam deja cu Apache 1.4) trebuia să activezi utilizarea VirtualHosts, dar am crezut că nu mai era cazul. Ai încercat jurnalele separate pentru gazda respectivă? Alte configurații VirtualHost în afară de cele două pe care le arătați?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.