Automatisk inloggning i Apache från en viss ip-adress

Att lösenordsskydda en mapp i Apache med htpasswd är väl ingen match för en rutinerad linuxadmin, men hur gör man om man vill släppa in en viss adress utan att de behöver ange lösenord?

Ett problem som kan uppstå är att applikationen man lösenordsskyddar förväntar sig att användaren ska ha blivit inloggad av Apache, och därmed fått sitt användarnamn i variabeln REMOTE_USER. Därför måste vi manuellt sätta den variabeln på adressen som vi släpper in utan lösenord.

Här är ett exempel på konfiguration:

<Directory /mnt/persist/www/docroot/hemligt/>
AllowOverride None
Order deny,allow
Deny from all

# filen htpasswd har vi skapat med kommandot htpasswd
AuthUserFile /mnt/persist/www/htpasswd
AuthType basic
AuthName "Hemligt"
require valid-user

# Vi vill släppa in adressen 10.0.1.44 utan att de ska få inloggningsrutan
Allow from 10.0.1.44

# Vi släpper in någon som antingen angett rätt inloggningsuppgifter
# eller kommer från adressen vi tillåtit.
Satisfy Any

# Om klienten kommer från adressen vi släpper in utan lösenord
# sätter vi användarnamnet stoffe manuellt, så att applikationen
# luras att tro att användaren stoffe loggat in.
SetEnvIf Remote_Addr 10.0.1.44 REMOTE_USER=stoffe
</Directory>

Att använda sig av Apaches lösenordsskydd är ofta att föredra om webbapplikationen har stöd för extern användarautentisering eftersom hela applikationen då blir helt oåtkomlig från internet för den som inte blivit validerad av Apache. Många säkerhetshål finns just i applikationers egna inloggningsrutiner eller webbfiler som oavsiktigt är exponerade av webbservern. Dessutom finns möjlighet i Apache att validera användarna mot en databas eller LDAP-server (T.ex. Microsofts Active Directory för den som gillar det).