Come configurare l'autenticazione di base negli host virtuali httpd di Apache?


48

Sto provando a configurare l'accesso mercuriale usando Apache http. Richiede autenticazione. Il mio /etc/apache2/sites-enabled/mercurialassomiglia a questo:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Ogni tutorial che ho letto su Internet mi dice di inserire queste righe:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Ma quando lo faccio ottengo il seguente errore:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

La mia distro è un Ubuntu personalizzato chiamato Turnkey Linux Redmine

Risposte:


73

Dovresti inserirlo all'interno di una direttiva Location:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>

1
questo non funziona per me. <Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000,

1
La pagina del documento apache spiega tutto questo, ma fastidiosamente non ti dà mai un esempio completo. Ho copiato parte del loro esempio, ma ho perso la require valid-userparte. Un esempio completo può essere una cosa meravigliosa. Grazie.
Buttle Butkus,

1
@sharif dovrebbe essere <Posizione />, il che significa che l'accesso all'URL di root del tuo host.com/ dovrebbe richiedere quella configurazione di autenticazione
agbb

1
In <Location />ogni caso avevo bisogno di non ottenere un errore di sintassi durante il caricamento del file di configurazione.
Perseidi,

3
Perché è stato <Location /> modificato <Location>con un messaggio di registro interno di "risolto ... per evitare molti problemi", ma senza dire nulla sulla vera ragione della risposta stessa? In Apache non esiste una <Location>direttiva (ovvero una senza una posizione). Questo sicuramente causa problemi adesso. ;) (Vedi ad esempio sopra.)
Sz.

9

Sto eseguendo Apache2 su Ubuntu 10.04 - stesso problema e grazie per la soluzione. Ho scoperto che dovevo inserire la configurazione/etc/apache2/apache2.conf

È possibile generare il nome utente e la password utilizzando htpasswd. Nuovo file:

$ htpasswd -c /srv/auth/.htpasswd squire

Per aggiungere al file esistente:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2

7

È possibile proteggere una posizione o una directory. Per una directory aggiungi qualcosa come:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

È inoltre possibile aggiungere Denye Allowdirettive per un controllo più preciso.


4

Sembra che tu stia specificando le impostazioni di autenticazione all'interno di VirtualHost. In genere, queste impostazioni sono specificate dalla Directorydirettiva.

Puoi anche usare i .htaccesssfile, ma specificare nella conf Apache è un buon default, poiché ha una minore esposizione.

Documentazione Apache


3

Sto eseguendo Apache2 su Ubuntu 10.10. Ho avuto problemi con tutte le soluzioni sopra, ma questo ha funzionato bene (dai documenti di Apache):

<Directory / var / www />
  Opzioni Indici FollowSymLink Visualizzazioni multiple
  AllowOverride All
  Ordine consentire, negare
  consentire a tutti
  AuthType Basic
  AuthName "Limitato"
  File AuthBasicProvider
  AuthUserFile / etc / users
  Richiedi visitatore utente
</ Directory>

La più grande differenza rispetto alle risposte precedenti sembra essere la direttiva AuthBasicProvider impostata su "file" e la direttiva Require che include il bit "user" prima del nome utente effettivo.

Spero che questo aiuti qualcuno.


3

Stiamo eseguendo una versione di Apache ottimizzata per la memoria e abbiamo riscontrato questo problema.

Ciò era dovuto al fatto che la seguente riga non era presente nella configurazione di Apache:

LoadModule authz_user_module modules/mod_authz_user.so
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.