16.09.2011 yahe administration legacy linux security
Eine eigentlich typische Anforderung: Versteckte Dateien und Ordner, denen unter Linux ein Punkt (".") vorangestellt wird, sollen nicht über den Webserver abrufbar sein. Wie man das beim Apache löst, hatte ich vor einiger Zeit bereits gezeigt. Für den Wechsel zu NGINX musste ich dieses Feature nun natürlich auch umsetzen. Meine erste Konfiguration, dies zu lösen, sah wie folgt aus:
location ~ ^(.*)\/\.(.*)$ {
return 404;
}
Hier wird geprüft, ob, im Dateinamen ein Slash gefolgt von einem Punkt enthalten ist. Oder anders ausgedrückt, ob irgendwo eine Datei oder ein Ordner im Dateinamen steckt, der mit einem Punkt beginnt. Spannenderweise hat diese Variante einen Haken: Sie funktioniert nicht für Dateien, die sich in einem versteckten Ordner befinden. Warum das so ist, weiß ich persönlich nicht, denn wenn man den gleichen regulären Ausdruck in einem Rewrite verwendet, funktioniert es, wie gewünscht:
rewrite ^(.*)\/\.(.*)$ @404 break;
location = @404 {
return 404;
}
Falls jemand eine Idee hat, warum "location" hier anders reagiert als "rewrite", wäre ich über einen Hinweis dankbar.