Perché l'autenticazione di Apache Basic non funziona?


14

Ho appena aggiornato Apache dalla build del 2003 a una build 2.4.1 completamente nuova e perfettamente pulita. Tutto sembra abbastanza buono, tranne per una cosa lampante:

Nel mio file httpd.conf ho il seguente:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

Ciò dovrebbe consentire l'accesso al server solo agli utenti nel file auth specificato, proprio come nella versione precedente di Apache. (Giusto?)

Tuttavia, non funziona. Le richieste sono concesse senza autenticazione fornita. Quando cambio la registrazione su LogLevel Debug, per gli accessi, dice:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

Davvero non so cosa significhi - e io (per quanto ne so) non ho alcuna dichiarazione "Richiedi tutto concesso" o "" in nessuno dei miei file.

Qualche idea sul perché questo non funzioni o su dove eseguire il debug ??

AGGIORNARE:

Ho un host virtuale sulla porta SSL che consente il proxy. Quando inserisco le stesse voci all'interno di

<proxy *> 

nella configurazione di virtualhost, funziona . Non sembra funzionare in

 <Directory> 

clausola. Ho quindi provato a mettere sotto altre clausole di Directory (specifiche per altre directory) e neanche questo ha funzionato.

ANCHE

Dalle seguenti domande di Shane: ho provato a duplicare il blocco "/" di root in una directory "/ tmp". La directory / tmp funziona CORRETTAMENTE !! Quindi - questo problema è specifico solo per la directory principale ???


1
Quali altri <Directory>blocchi hai applicato alle richieste che non funzionano?
Shane Madden

Ne ho appena inserito uno per la directory "/" radice, che dovrebbe applicarsi all'intero server. Ho provato ad aggiungerne uno alla home directory dell'utente (per mod_userdir) e ho avuto gli stessi risultati con quello.
Brad

@ShaneMadden - sulla tua domanda - Ho provato a duplicare il blocco "/" root in una directory "/ tmp". La directory / tmp funziona CORRETTAMENTE !! Quindi - questo problema è specifico solo per la directory principale ???
Brad

Ho il sospetto che ci sia un <Directory>blocco più specifico altrove nella tua configurazione di Apache che ha la precedenza su quello che hai impostato /.
Shane Madden

Ho appena preso tutto - niente. Questi file di configurazione erano molto minime modifiche ai valori di default di nuova installazione di Apache.
Brad

Risposte:


12

Ho avuto un problema simile con l'autenticazione Digest su una nuova installazione 2.4. Osservando da vicino la documentazione sul sito di Apache, sembra che le direttive di autenticazione debbano essere contenute in un <Location>tag anziché in un <Directory>tag. Consulta la documentazione per la direttiva AuthBasicProvider .


2
Questo non è corretto mod_auth_basic e mod_auth_digest possono essere utilizzati in <Directory> e <Location> nonché <File> <If> e <Proxy>. Nella documentazione per Apache 2.4 -> httpd.apache.org/docs/current/mod/… In "Contesto" è elencato "Directory" che indica tutti i contenitori validi sopra indicati. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

Non dovrebbe essere corretto, ma ha funzionato per me. Forse è perché nella parte Directory c'erano altre impostazioni (es. RewriteRule)
paul.ago

6

Ho affrontato lo stesso problema e nulla di questo post mi ha aiutato, quindi aggiungerò i miei 2 centesimi. Nel mio caso (apache 2.4) il problema era nelle direttive sequenziali Require .

Per impostazione predefinita, se si dispone di più direttive Require , vengono considerate come<RequireAny>

Nel mio <Directory>ho avuto

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

Quindi la richiesta di autorizzazione non è stata visualizzata se l'IP era corretto. Ho dovuto passare da Richiedi logica da <RequireAny>a <RequireAll>e sembra che ora tutto funzioni correttamente.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>

5

la risposta di jscott non è corretta. Apache 2.4 certamente non consentire direttive di autenticazione in <Directory>contenitori. Inoltre, questo è l'unico modo sicuro per implementare l'autenticazione, poiché è <Location>possibile accedere ai contenitori in diversi modi, consentendo di eludere l'autenticazione se non si sta attenti. Per motivi di riferimento, ecco un contenitore di esempio che sto usando su un sistema di produzione:

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>


1

Sembra che manchi un provider per AuthBasic. Prova ad aggiungere una linea come:

AuthBasicProvider    file

Una volta che hai funzionato, potresti voler esaminare la Satisfydirettiva. Questo può essere usato per consentire l'accesso locale senza password, mentre richiede una password per l'accesso a Internet.

EDIT: utilizzo un file di inclusione per BasicAuth per abilitare l'accesso remoto al contenuto basato su password e che normalmente non è disponibile da Internet. Potresti non volere la Satisfydirettiva. Questo è il mio /etc/apache2/basicauth.conffile:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

Ho anche un /etc/apache2/allow_local.conffile include per l'autenticazione basata su IP.

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

Per abilitarli io uso questi include.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

Potresti provare ad aggiungere alla specifica di autorizzazione. Funziona con la mia configurazione di prova.

Order deny,allow
Allow from all

Ho provato - continua a non funzionare: -O
Brad

Se includo i tuoi file così come sono, visualizzo un errore: "AuthName non consentito qui" - poiché non puoi specificare queste direttive ovunque (come al di fuori di una clausola "Posizione", "Directory" o "Proxy". Oppure mi sto perdendo qualcosa? Se lo includo nella clausola "Directory" - di nuovo - Mi lascio entrare senza credenziali.
Brad

Se metto solo un "nega da tutti" nella clausola "directory", mi viene negato l'accesso (come ti aspetteresti). Se poi includi il tuo PRIMO script nella clausola di directory, posso accedere incondizionatamente. Se rimuovo il "soddisfare" nella tua sceneggiatura, mi viene negato incondizionatamente.
Brad

0

Ho avuto lo stesso problema ed è probabile che si tratti di un bug di Apache; nel mio caso, il problema si presentava dopo un aggiornamento e scompariva dopo un successivo aggiornamento, ma ho dovuto aggiungere questo in fondo:

Deny from all

È spaventoso che Apache possa aprire falle di sicurezza come questa :(


Deny from allè un'impostazione di apache 2.2. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

sì, cambiare le direttive relative alla sicurezza in modo incompatibile con le versioni precedenti è baaaaaad
greg

0

Provare:
<Directory "/"> ... </Directory>

Invece di:
<Directory /> ... </Directory>

Significato: incapsulare il simbolo della radice con virgolette doppie. Altrimenti, potresti chiudere il tag con quella barra.


0

Controlla anche se non ce n'è accidentalmente un altro

    Require all granted

altrove nella stessa configurazione della directory. potrebbe avere la precedenza sul tuo

    Require     valid-user
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.