2015-11-16 31 views
5

sto cercando di soddisfare i seguenti requisiti (in Apache HTTPD 2.2):La combinazione di autenticazione di base e LimitExcept in Apache 2.2 Virtual Host

  • Se il metodo HTTP è tutt'altro che HEAD, POST o GET non consentire l'accesso, indipendentemente da quanto segue.
  • Se l'utente è interno, consentire l'accesso senza la richiesta di autenticazione di base.
  • Se l'utente è esterno, eseguire la verifica con l'autenticazione di base e consentire se hanno buone credenziali.

Questa è una delle tante cose che ho provato, ma nessuna delle cose che ho provato raggiunto tutti e tre i requisiti:

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

    <LimitExcept HEAD POST GET> 
     Deny from all 
    </LimitExcept> 

    Satisfy all 

</Directory> 

che ho letto la documentazione su Satisfy, Limite, LimitExcept, Ordine e autenticazione di base, ma ho difficoltà a mettere insieme i pezzi.

Qual è un modo valido per farlo?

risposta

3

AFAICT in Apache 2.2 è necessario tornare a un approccio "Soddisfare qualsiasi" quindi gestire i controlli del metodo utilizzando mod_rewrite. Questa è la via migliore perché i controlli del tuo metodo sono totalmente indipendenti.

In 2.4, Limit/LimitExcept sono sostituiti/semplificati da mod_allowmethods, ma richiedono anche possibile controllare i metodi direttamente. È molto più semplice lì.

La porzione di riscrittura è abbastanza semplice:

RewriteEngine ON 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

ma sarà necessario per assicurarsi che appare in ogni server principale vhost + in grado di accedere alla directory, a differenza delle altre direttive.

Mettere tutto insieme

# Only allow expected HTTP methods. 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    Satisfy any 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

</Directory> 
+0

non ero in grado di tornare a questo compito fino ad oggi. Non ho mai usato una taglia in precedenza, ma ora non posso assegnarla * e * è sottratta dal mio rappresentante. Immagino che ci sia una logica dietro quel sistema (che non capisco). –

+0

nessuna preoccupazione: taglie – covener