Limitazione di accesso alle directory sui siti Web di Apache
Esistono molti modi per limitare l’accesso a contenuti specifici all’interno di Apache. Questo articolo mostrerà semplicemente un paio di esempi.
Alcuni di questi esempi ti mostreranno come limitare l’accesso a una directory con un nome utente e una password. Per questa guida, il file htpasswd verrà inserito in /etc/httpd/example-htpasswd. Puoi creare un nome utente e una password utilizzando semplicemente il sito esterno di terze parti oppure puoi utilizzare lo strumento integrato htpasswd.
Di seguito un esempio:
[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf <VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/vhosts/example.com <Directory /var/www/vhosts/example.com> Options -Indexes +FollowSymLinks -MultiViews AllowOverride All # Password protect site AuthType Basic AuthName "Restricted" AuthUserFile /etc/httpd/example-htpasswd Require valid-user </Directory> ...
Se si desidera consentire solo in specifici IP o reti senza password e richiedere a tutti gli altri su Internet di avere un nome utente/password:
[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf <VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/vhosts/example.com <Directory /var/www/vhosts/example.com> Options -Indexes +FollowSymLinks -MultiViews AllowOverride All # Password protect site Allow from 127.0.0.1 Allow from 1.2.3.4 Allow from 192.168.1.0/24 AuthType Basic AuthName "Restricted" AuthUserFile /etc/httpd/example-htpasswd Require valid-user # Allow password-less access for allowed IPs Satisfy any </Directory> ...
Di seguito è riportato un esempio per la protezione della password della pagina wp-admin di WordPress tramite un file .htaccess:
[root@web01 ~]# vim /var/www/vhosts/example.com/wp-admin/.htaccess # Password protect wp-admin <Files admin-ajax.php> Order allow,deny Allow from all Satisfy any </Files> AuthType Basic AuthName "Restricted" AuthUserFile /etc/httpd/example-htpasswd Require valid-user
Ecco uno per limitare l’accesso a una directory consentendo solo in specifici IP all’interno di example.com/admin:
[root@web01 ~]# vim /var/www/vhosts/example.com/admin/.htaccess order deny,allow deny from all allow from 1.2.3.4 allow from 192.168.1.0/24
Su Apache 2.4, ecco come è possibile proteggere con password un intero sito Web escludendo un URI. Questo è utile se usi qualcosa come CakePHP o Laravel in cui la directory fisica non esiste, tutto semplicemente filtra attraverso il file index.php. In questo esempio, qualsiasi richiesta ad example.com/test non richiederà una password, ma qualsiasi altra cosa su esempio.com richiederà un nome utente e una password:
[root@web01 ~]# vim /etc/httpd/vhost.d/example.com.conf <VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/vhosts/example.com/current/public <Directory /var/www/vhosts/example.com/current/public> Options -Indexes +FollowSymLinks -MultiViews AllowOverride All </Directory> <Location "/"> # Password protect site AuthType Basic AuthName "Restricted" AuthUserFile /etc/httpd/example-htpasswd Require valid-user # If the request goes to /test: bypass basic auth SetEnvIf Request_URI ^/test$ noauth=1 Allow from env=REDIRECT_noauth Allow from env=noauth Order Deny,Allow Satisfy any Deny from all </Location> ...