Apache2.2 - Zugriffskontrolle - Hilfe Benötigt
Hallo Welt :) *VORWORT:* Ich Bin Offensichtlich Mit Seit Mehr Als 6J Linux-Abstinenz Ein Wenig Aus Der Übung. Darum Experimentiere Ich Derzeit Mit PHP, MySQL in Verbindung mit einem Apache Web-Server Um Meine Eingerosteten Kenntnisse Wieder Aufzupolieren. *DAS PROBLEM:* Bei Meinen Experimenten/Übungen Arbeite Ich Derzeit An Einem Templating-System. Dabei Möchte Ich Aus Einem Recursiven-Script /(Sticky Formular)/ Diverse Templates Nachladen. Soweit Sogut, Allerdings Stört Es Mich Gewaltig Das Ich Von Extern Mit Kenntnis Der Verzeichnisstruktur Und Templatenamen Auf Diese Zugreiffen Kann. Ich Bekomme Dabei Evtl. Vorhandenen Quellcode Angezeigt, Was Ich Auf Jedenfall Unterbinden Will. Nun Dachte Ich Mir, /"Sag Ich Dem Apache Das Er Einfach Alle URL-Zugriffe //Die Er Bekommt Einfach Dank .htaccess Verbietet Und Der Hase Ist Erlegt"/, Doch Pustekuchen. Ich Begreiffe Offenbar Nicht Was Ich Falsch Mache Oder Was Ich Noch Konfigurieren Soll, Sprich Was Ich In Die .htaccess Einschreiben Muss, Damit Ich Auf Dieses Eine Verzeichnis _/KEINEN/_ Zugriff Mehr Bekomme, Mit Ausnahme Des Include-Calls Aus Meinem Sticky PHP-Script. Natürlich Lege Ich Die .htaccess Datei In Das Zu Schützende Verzeichnis Ab. |Möglicherweise Muss Ich Auch Noch Zusätzlich Irgendwelche Einstellungen An ||Der Standart httpd.conf Verändern, Die Frage Ist Nur Welche, Irgendwie ||Habe Ich Das Gefühl, Das Ich Im Moment Im Dickicht Der ||Informationen /(Apache-Dokumentation)/ Nicht Mehr So Richtig Durchblicke. |Es Ist Echt Zum Verzweifeln! Kann Mir Da Jemand Licht Im Dunkeln Machen? Gruß Martin Hier Einige Beispiele Mit Denen Ich Verzweiffelt Versucht Habe Mein Ziel Zu Erreichen, Was Leider Fehlgeschlagen Ist, Da Ich Immer Auf Mein Test-Template Zugreiffen Konnte: ______________________________________________________________________|| |.htaccess - Beispiel 1a| |======================================================================| |<Files *> | |Order allow,deny | |Deny from all | |</Files>| || |__________||__________||__________||__________||__________||__________||__________| |||.htaccess - Beispiel 1b| |||======================================================================| |||<Files "*"> | |Order allow,deny | |Deny from all | |</Files>| || |__________||__________||__________||__________||__________||__________||__________| |.htaccess - Beispiel 1c| |||======================================================================| |||<Files ~ "^*$"> | |Order allow,deny | |Deny from all | |</Files>| |||| |||__________||__________||__________||__________||__________||__________||__________| |.htaccess - Beispiel 2a| |======================================================================| |<FilesMatch *> | |Order allow,deny | |Deny from all | |</Files>| || |__________||__________||__________||__________||__________||__________||__________| |||.htaccess - Beispiel 2b| |||======================================================================| |||<Files "*"> | |Order allow,deny | |Deny from all | |</Files>| || |__________||__________||__________||__________||__________||__________||__________| |.htaccess - Beispiel 2c| |||======================================================================| |||<Files ~ "^*$"> | |Order allow,deny | |Deny from all | |</Files>| -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Martin Parusel wrote:
Ich Begreiffe Offenbar Nicht Was Ich Falsch Mache Oder Was Ich Noch Konfigurieren Soll, Sprich Was Ich In Die .htaccess Einschreiben Muss, Damit Ich Auf Dieses Eine Verzeichnis _/KEINEN/_ Zugriff Mehr Bekomme, Mit Ausnahme Des Include-Calls Aus Meinem Sticky PHP-Script.
Wenn Du den Zugriff generell verbieten willst, braucht in der .htaccess Datei nichts anderes zu stehen als: Order deny,allow Deny from all Die Datei .htaccess muss dann im zu schützenden Verzeichnis abgelegt werden und für den Webserver lesbar sein. In der Apache Host-Konfiguration muss die Verwendung von .htaccess-Dateien für das Verzeichnis (oder ein übergeordnetes Verzeichnis) erlaubt sein: <Directory "/srv/www/verzeichnisname"> AllowOverride All </Directory> An der Stelle könntest Du natürlich auch direkt die beiden o.g. Zeilen einfügen (statt in .htaccess) Der übliche Weg, PHP-Code vor der Anzeige im Browser zu schützen ist jedoch, dafür zu sorgen, dass die entsprechenden Dateien von PHP geparst werden statt einfach an den Webbrowser ausgeliefert zu werden. D.h. entweder allen Dateien, die in deine PHP Scripte included werden sollen, die Endung .php verpassen, oder eine andere Endung geben und diese entsprechend registrieren. Also (falls Du PHP4 verwendest) wäre das z.B. ein Eintrag in /etc/apache2/conf.d/php4.conf: AddType application/x-httpd-php .inc Damit würden auch alle Dateien, die auf ".inc" enden, von PHP geparst und der Quelltext nicht mehr angezeigt. Übrigens: Dein Text liest sich schlecht. Im Deutschen wird nicht wahllos übrigens: jeder erste Buchstabe gross geschrieben. Joachim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Joachim Marx schrieb:
Wenn Du den Zugriff generell verbieten willst, braucht in der .htaccess Datei nichts anderes zu stehen als:
Order deny,allow Deny from all
Die Datei .htaccess muss dann im zu schützenden Verzeichnis abgelegt werden und für den Webserver lesbar sein. In der Apache Host-Konfiguration muss die Verwendung von .htaccess-Dateien für das Verzeichnis (oder ein übergeordnetes Verzeichnis) erlaubt sein: <Directory "/srv/www/verzeichnisname"> AllowOverride All </Directory> Aha, also liegt wohl alles an diesem "AllowOverride". Hier mal ein kleiner Auszug aus meiner httpd.conf
# forbid access to the entire filesystem by default <Directory /> Options None AllowOverride None Order deny,allow Deny from all </Directory> # use .htaccess files for overriding, AccessFileName .htaccess # and never show them <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> Wenn ich Dich richtig verstanden habe dann müsste ich daraus nur... # forbid access to the entire filesystem by default <Directory /> Options None AllowOverride All Order deny,allow Deny from all </Directory> <Directory /srv/www/meintemplateverzeichnis> AllowOverride All Order deny,allow Deny from all </Directory> # use .htaccess files for overriding, AccessFileName .htaccess # and never show them <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> ...machen um das mit einer .htaccess geimpfte Verzeichnis von Zugriffen von außen komplett dicht zu machen, egal nach welchen Dateinamen und Endungen getestet würde. Nur PHP sollte dann noch via include auf die Dateien in dem betreffenden Verzeichnis zugreifen?! Ich habe dies natürlich eben direkt mal ausprobiert und nachdem ich den Webserver selbstverständlich neu gestartet hatte keinen Erfolg damit gehabt. Das ist es ja gerade was mich an der Sache so fuchst, egal was ich tue es will irgendwie nicht, aber ich hoffe das wir das mit deiner Hilfe hin bekommen, denn wie mir scheint bist Du so eine Art Apache-Guru /(wenn man das so nennen kann)/ :) Was die Leserlichkeit betrifft, hast Du natürlich recht, ich werde mich bemühen meine Gewohnheit im Small-Caps-Style zu schreiben, hier nicht anzuwenden :) Zuletzt sei noch erwähnt das es nicht allein darum geht PHP-Code sondern generelle Zugriffe von außen /(via URL)/ zu sperren, nur das PHP-Script soll via include auf die Dateien in dem Verzeichnis zugreifen können, denn schließlich könnte man dadurch auch andere Dateien vor den Augen anderer Verbergen. Eine http-authentication ist zwar auch nicht schlecht aber warum einen Weg öffnen wenn man ihn todsicher schließen kann :) Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Martin Parusel wrote:
Wenn ich Dich richtig verstanden habe dann müsste ich daraus nur...
# forbid access to the entire filesystem by default <Directory /> Options None AllowOverride All Order deny,allow Deny from all </Directory>
<Directory /srv/www/meintemplateverzeichnis> AllowOverride All Order deny,allow Deny from all </Directory>
[...]
...machen um das mit einer .htaccess geimpfte Verzeichnis von Zugriffen von außen komplett dicht zu machen, egal nach welchen Dateinamen und Endungen getestet würde. Nur PHP sollte dann noch via include auf die Dateien in dem betreffenden Verzeichnis zugreifen?!
Ja.
Ich habe dies natürlich eben direkt mal ausprobiert und nachdem ich den Webserver selbstverständlich neu gestartet hatte keinen Erfolg damit gehabt.
Hmm ... Entferne mal (sofern vorhanden) vorübergehend die Datei .htaccess in deinem Templateverzeichnis. Denn: <Directory /srv/www/meintemplateverzeichnis> AllowOverride All Order deny,allow Deny from all </Directory> Das alleine verbietet ja schon den Zugriff auf das Verxzeichnis. Hier kannst Du dann wieder "AllowOverride None" setzen, damit diese Einstellung nicht überschrieben werden kann. Damit wird definitiv der Web-Zugriff auf dieses Verzeichnis verboten. ABER: Du musst nun alle Deine Konfigurationsdateien unterhalb /etc/apache2 darauf untersuchen, ob nicht irgendwo der Zugriff auf "/srv/www/meintemplateverzeichnis" doch erlaubt wird. Du hast mit Sicherheit noch weitere Konfig-Dateien, sonst könnte nämlich ÜBERHAUPT nicht auf dein DocumentRoot zugegriffen werden: wie Du oben beschrieben hast, ist ja zunächstmal der Zugriff aufs DocumentRoot in Deiner httpd.conf grundsätzlich verboten: in der Directive "<Directory />...</Directory>". Also erst suchen, welche Konfig-Dateien noch includiert werden und nachschauen, welche Directiven dort vorhanden sind, die deinen Host betreffen. Geht es hier um einen virtual host? (die Konfigs befinden sich evtl. in /etc/apache/vhosts.d) Wenn das klappt kannst Du bei Bedarf wieder auf .htaccess Steuerung umsteigen. Beim Testen leerst Du am besten den Browsercache und startest den Browser neu, mit dem Du auf das Verzeichnis zugreifst, damit sicher ist, dass nicht was altes aus dem Cache ausgeliefert wird. Joachim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Joachim Marx schrieb:
ABER: Du musst nun alle Deine Konfigurationsdateien unterhalb /etc/apache2 darauf untersuchen, ob nicht irgendwo der Zugriff auf "/srv/www/meintemplateverzeichnis" doch erlaubt wird. Du hast mit Sicherheit noch weitere Konfig-Dateien, sonst könnte nämlich ÜBERHAUPT nicht auf dein DocumentRoot zugegriffen werden: wie Du oben beschrieben hast, ist ja zunächstmal der Zugriff aufs DocumentRoot in Deiner httpd.conf grundsätzlich verboten: in der Directive "<Directory />...</Directory>". Also erst suchen, welche Konfig-Dateien noch includiert werden und nachschauen, welche Directiven dort vorhanden sind, die deinen Host betreffen. Geht es hier um einen virtual host? (die Konfigs befinden sich evtl. in /etc/apache/vhosts.d)
Sodale, ehrenwerter Apache-Guru :) Also, ich habe keine Virtual-Hosts, habe die httpd.conf original belassen und mich auf die suche nach anderen Eintragungen gemacht und bin in der defaults-server.conf fündig geworden, denn da Stand folgendes geschrieben: # # Configure the DocumentRoot # <Directory "/srv/www/htdocs"> # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs-2.2/mod/core.html#options # for more information. Options None # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit AllowOverride None # Controls who can get stuff from this server. Order allow,deny Allow from all </Directory> Nachdem ich dann aus dem AllowOverride None ein All gemacht habe und die .htaccess-datei in meinem Template-Verzeichnis installierte hatte, klappte es auf Anhieb und der Zugriff wurde wie gewollt verweigert, egal auf was man in dem Verzeichnis zugreifen wollte, was von nun an Serverweit funktioniert, sofern man in dem betreffenden Verzeichnis eine entsprechende .htaccess-datei installiert hat. Ich will nur hoffen, das ein Web-Hoster dessen Webspace ich irgendwann einmal anmiete mir nicht die Möglichkeit verwehrt via .htaccess diese Blockade zu errichten. Es verneigt sich dankend Dein treuer Padawan-Schüler :D -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Martin Parusel wrote:
Nachdem ich dann aus dem AllowOverride None ein All gemacht habe und die .htaccess-datei in meinem Template-Verzeichnis installierte hatte, klappte es auf Anhieb [...] Lies Dir mal gelegentlich durch: http://httpd.apache.org/docs/2.0/sections.html Vor allem den Abschnitt "How Sections are merged". Es ist wichtig zu wissen, in welcher Reihenfolge und wie die einzelnen Direktiven ausgewertet werden, die ja oft über viele Config-Dateien verteilt sind und auch redundant auftauchen können. Sonst wundert man sich eben manchmal, warum der Apache anders reagiert als man meint, ihn konfiguriert zu haben. (Wie in Deinem Fall.)
Ich will nur hoffen, das ein Web-Hoster dessen Webspace ich irgendwann einmal anmiete mir nicht die Möglichkeit verwehrt via .htaccess diese Blockade zu errichten.
Wird eigentlich normalerweise erlaubt, d.h. für DocumentRoot ist "AllowOverride All" gesetzt. Es ist ja die einzige Möglichkeit, wie der Kunde das Verhalten des Apachen steuern kann, da er keinen direkten Zugriff auf die Apache Config-Dateien hat.
Es verneigt sich dankend
Nicht nötig ;-) Joachim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (2)
-
Joachim Marx
-
Martin Parusel