Wie kann ich den Webzugriff auf einige Dateien verweigern?

13

Ich muss eine etwas seltsame Operation durchführen.

Zuerst laufe ich auf Debian, apache2 (das als Benutzer www-Daten 'läuft')

Ich habe also eine einfache Textdatei mit .txt ot .ini oder einer beliebigen Erweiterung, die keine Rolle spielt.

Diese Dateien befinden sich in Unterordnern mit einer Struktur wie der folgenden:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .TXT

Daher ist der Dateiname immer derselbe, ebenso wie für die 'Hierarchie'. Ändern Sie einfach den Namen des Ordners: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Was ich tun sollte, ist (glaube ich) relativ einfach: Ich muss in der Lage sein, diese Datei von Programmen auf dem Server (z. B. Python, PHP) zu lesen, aber wenn ich versuche, den Dateiinhalt per Browser abzurufen (Ziffern der URL www. example.com/folder1/car/foobar.txt oder über cUrl usw.) Ich muss einen verbotenen Fehler oder was auch immer erhalten, aber nicht auf die Datei zugreifen .

Es wäre auch schön, wenn selbst der Zugriff auf diese Dateien über FTP "versteckt" wäre oder sowieso nicht heruntergeladen werden könnte (zumindest das, was ich mit dem FTP-Root und den Benutzerdaten verwende).

Wie kann ich?

Ich habe dies online gefunden, in die Datei .htaccess:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Es scheint zu funktionieren, aber nur, wenn sich die Datei im Webstamm (www.example.com / myfile.txt) und nicht in Unterordnern befindet. Darüber hinaus werden die Ordner in der zweiten Ebene (www.example.com/folder1/ Frucht wird /foobar.txt) dinamycally erstellt .. Ich möchte vermeiden , .htaccess - Datei von Zeit zu Zeit zu ändern.

Es ist möglich, eine solche Regel für alle Dateien mit Vornamen zu erstellen, die sich unter * www.example.com / Ordnername -statisch / * Ordnername-dinamyc / *** Dateiname befinden -static.txt *, wo diese Teile immer gleich sind , nur ** diese eine Änderung ?

EDIT :

Wie Dave Drager sagte, könnte ich dies semplifizieren, indem ich diese Dateien außerhalb des über das Internet zugänglichen Verzeichnisses halte. Aber diese Verzeichnisse enthalten auch andere Dateien, Bilder und Dinge, die von meinen Benutzern verwendet werden. Ich versuche also einfach, kein doppeltes Ordnersystem zu haben, wie zum Beispiel:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
Strae
quelle

Antworten:

19

Sie können Files / FilesMatch und einen regulären Ausdruck verwenden:

<Files ~ "\.txt$">
    Order allow,deny
    Deny from all
</Files>

So wird .htpasswd geschützt.

oder leiten Sie den Zugriff von .txt auf einen 404 um:

RedirectMatch 404 \.txt$
rkthkr
quelle
Ich habe versucht, auf diese Weise zu verwenden, aber es scheint, dass die Datei in Unterordnern nicht funktioniert
Strae
Ich habe meine regulären Ausdrücke korrigiert, sorry ...
rkthkr
ok .. kann funktionieren. Aber ... der reguläre Ausdruck sollte wie RedirectMatch 404 \ myfilename.txt $ sein, oder? Die Dateien haben immer den gleichen Namen, aber in verschiedenen Ordnern. Und diese Lösung hat keinen Einfluss auf die FTP-Methode, oder?
Strae
Das sieht richtig aus ...
rkthkr
Ja, ich bestätige, dass es funktioniert ... aber mein regulärer Ausdruck RedirectMatch 404 \ myfilename.txt $ muss falsch sein. Es funktioniert, wenn ich RedirectMatch 404 \ .txt $ verwende und alle TXT-Dateien blockiere, aber nicht, wenn ich den Dateinamen verwende im regulären Ausdruck. Irgendeine Hilfe? Ich bin kein Genuis mit Regexp;)
Strae
1

Ja, das ist alles möglich. Wenn Sie jedoch Programme auf dem Server haben, die auf Textdateien zugreifen müssen, sollten diese sich außerhalb des Webstamms befinden. Wenn sich Ihre Webdateien beispielsweise in ~ / public_html / befinden, sollten Sie sie in ~ / data speichern. Es gibt keinen Grund, sie im öffentlichen HTML-Ordner abzulegen.

Stellen Sie neben dem Entfernen aus dem Webordner sicher, dass die Unix-Berechtigungen für sie korrekt festgelegt sind. Der Benutzer der Skripte müsste Lese- (Schreib-?) Zugriff haben, aber jeder andere muss diesen Zugriff nicht haben.

Wenn Sie diese Dateien in einem über das Internet zugänglichen Ordner haben müssen, gibt es Möglichkeiten, das zu tun, was Sie über mod_rewrite verlangen. Auf der folgenden Website finden Sie viele Beispiele, von denen eines in die Rechnung passen sollte.

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/

Dave Drager
quelle
Die Dateien werden über Python oder PHP erstellt und dann, nie wieder bearbeitet, einfach gelesen.
Strae
0

Warum nicht Standard-Unix-Dateiberechtigungen verwenden, um den Zugriff auf die Datei zu verweigern?

Auf Wikipedia gibt es eine anständige Erklärung zu Unix-Dateiberechtigungen

Cyberkni
quelle
Wie kann ich Berechtigungen festlegen, damit PHP, Python, Root-Benutzer mit diesen Dateien umgehen können und der Browser-Zugriff nicht?
Strae
0

Fügen Sie die .htaccess-Datei in das Unterverzeichnis ein und legen Sie in der Anweisung AllowOverride All fest

Matt Simmons
quelle
Also brauche ich einen .htaccess für jeden 2 ° Level Ordner? mmh .. kann eine Lösung sein .. wäre besser mit 1 .htacces ..
Strae
0

Sie können Linux-ACLs verwenden .

Alakdae
quelle
Ist das nicht die einfache Dateiberechtigung? wie rwx? Wie kann ich damit machen, was ich brauche?
Strae
0

Nachdem ich Sie alle gelesen hatte, bemerkte ich, dass die .htaccess-Datei der richtige Weg für mich sein kann: Betrifft nur die Dateien in dem Ordner, in dem sie sich befindet.

Aber meine Ordner werden dynamisch generiert. Ich denke nicht, dass das Kopieren der .htaccess-Datei oder das erneute Erstellen jedes Mal, wenn ich einen neuen Ordner erstelle, ein zuverlässiger Weg ist.

Wie Dave sagte, sollte der logische Weg darin bestehen, die Konfigurationstextdateien außerhalb des über das Internet zugänglichen Ordners zu speichern.

Aber in jedem Ordner muss ich andere Dateien speichern, zum Beispiel Bilder, die über das Internet zugänglich sein müssen ... und ich denke immer noch nicht, dass das Replizieren der Ordnerstruktur in und aus dem Web-Root-Verzeichnis auch ein zuverlässiger Weg ist . Daher muss ich sogar die Apache-Konfiguration ändern, um den Konfigurationsordner in den PHP-zulässigen Pfad aufzunehmen. Dies sollte sowieso kein Problem sein.

Wenn ich also nicht das Bessere habe , muss ich das weniger Schlechte wählen.

Ich werde vorerst die Lösung für mehrere .htaccess-Dateien verwenden, in der Hoffnung, dass ich es in Zukunft nicht bereuen werde.

Jede andere Lösung wird geschätzt.

Strae
quelle
0

Von der Bestellung Dokumentationsabschnitt:

Schlüsselwörter dürfen nur durch Komma getrennt werden. Zwischen ihnen ist kein Leerzeichen zulässig.

Folgendes ist also falsch:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

Das Folgende ist (mehr) richtig

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
ebichuhamster
quelle