Come negare l'accesso Web ad alcuni file?


13

Devo fare un'operazione un po 'strana.

Per prima cosa, corro su Debian, apache2 (che 'gira' come utente www-data)

Quindi, ho un semplice file di testo con .txt ot .ini, o qualunque estensione, non importa.

Questi file si trovano in sottocartelle con una struttura come questa:

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 .testo

pertanto, il nome del file è sempre lo stesso, idem per la 'gerarchia', basta cambiare il nome della cartella: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Quello che dovrei fare è (penso) relativamente semplice: devo essere in grado di leggere quel file dai programmi sul server (python, ad esempio php), ma se provo a recuperare il contenuto del file da broswer (digitando l'URL www. example.com/folder1/car/foobar.txt, o tramite cUrl, ecc.) Devo ottenere un errore proibito o altro, ma non accedere al file .

Sarebbe anche bello che anche l'accesso a quei file tramite FTP sia "nascosto", o comunque non possa essere scaricato (almeno che io uso con il root ftp e i dati dell'utente)

Come posso fare?

L'ho trovato online, inseriscilo nel file .htaccess:

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

Sembra funzionare, ma solo se il file si trova nella radice Web (www.example.com / myfile.txt) e non nelle sottocartelle. Inoltre, le cartelle del secondo livello (www.example.com/folder1/ fruit /foobar.txt) verranno create dinamicamente. Vorrei evitare di dover cambiare periodicamente il file .htaccess.

È possibile creare una regola, qualcosa del genere, che vale per tutti i file con un determinato nome, che si trova su * www.example.com / nome-cartella-statico / * nome-cartella-dinamyc / *** nome-file -static.txt *, dove quelle parti sono sempre uguali , solo ** che cambia ?

MODIFICA :

Come ha detto Dave Drager, potrei semplificarlo mantenendo quei file al di fuori della directory accessibile dal web. Ma quelle directory conterranno anche altri file, immagini e cose usate dai miei utenti, quindi sto semplicemente cercando di non avere un sistema di cartelle duplicate, come:

/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

Risposte:


20

È possibile utilizzare Files / FilesMatch e un'espressione regolare:

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

Ecco come .htpasswd è protetto.

o reindirizzare qualsiasi accesso di .txt a un 404:

RedirectMatch 404 \.txt$

Ho provato a usarlo in questo modo, ma sembra che non
funzioni

Ho sistemato le mie regexps, scusa ...
rkthkr,

ok .. può funzionare. Ma .. il regexp dovrebbe essere come RedirectMatch 404 \ myfilename.txt $, giusto? I file avranno sempre lo stesso nome, ma in cartelle diverse. E questa soluzione non influirà sul metodo FTP, giusto?
Strae,

Sembra corretto ...
rkthkr,

Sì, confermo che funziona ... ma il mio regexp RedirectMatch 404 \ myfilename.txt $ deve essere sbagliato .. funziona se uso RedirectMatch 404 \ .txt $, bloccando tutti i file .txt, ma non se uso il nome file nella regexp. Qualsiasi aiuto? non sono un genuis con regexp;)
Strae,

1

Sì, questo è tutto possibile. Tuttavia, se sul server sono presenti programmi che devono accedere ai file di testo, dovrebbero risiedere al di fuori del Web root. Ad esempio, se i tuoi file web sono in ~ / public_html /, dovresti memorizzarli in ~ / data. Non c'è motivo di inserirli nella cartella html pubblica.

Oltre a rimuoverli dalla cartella Web, assicurarsi che le autorizzazioni unix siano impostate correttamente su di essi. L'utente degli script dovrebbe avere accesso in lettura (scrittura?) Ma chiunque altro non deve avere questo accesso.

Se devi avere questi file in una cartella accessibile dal web, ci sono modi per fare ciò che stai chiedendo tramite mod_rewrite. Vedi il sito seguente per molti esempi, uno dei quali dovrebbe adattarsi al conto.

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


I file verranno creati tramite Python o PHP, quindi, mai più modificati, basta leggere.
Strae,

0

Perché non utilizzare le autorizzazioni standard per i file unix per negare l'accesso al file?

C'è una spiegazione decente su Wikipedia sulle autorizzazioni dei file unix


Come posso impostare le autorizzazioni per consentire a php, python, l'utente root di gestire quei file e l'accesso al browser no?
Strae,

0

Inserire il file .htaccess nella sottodirectory e nell'istruzione, impostare AllowOverride All


Quindi avrò bisogno di un .htaccess per ogni cartella di 2 ° livello? mmh .. può essere una soluzione .. sarebbe meglio con 1 .htacces ..
Strae

0

È possibile utilizzare ACL Linux .


Istn che i permessi dei file semplici? come rwx? Come posso fare quello che mi serve con questo?
Strae,

0

Dopo aver letto tutti voi, ho notato che il file .htaccess può essere la strada giusta per me: influenza solo i file nella cartella in cui si trova.

Ma le mie cartelle sono generate dinamicamente. Non credo che copiare il file .htaccess o ricrearlo ogni volta che creo una nuova cartella sia un modo affidabile.

Come ha detto Dave, il modo logico dovrebbe essere la memorizzazione dei file di testo di configurazione all'esterno della cartella accessibile dal web.

Ma in ogni cartella devo archiviare altri file, immagini per esempio, che devono essere accessibili dal web ... e non penso ancora che replicare la struttura delle cartelle, dentro e fuori dalla directory web-root, sia anche un modo affidabile . Pertanto, dovrò cambiare anche la configurazione di apache per includere la cartella config nel percorso php consentito .. questo comunque non dovrebbe essere un problema.

Quindi, se non ho il meglio , devo scegliere quello meno peggio .

Userò la soluzione multipla di file .htaccess, per ora, sperando di non avere rimpianti in futuro.

Ogni altra soluzione è apprezzata.


0

Dalla sezione Documentazione dell'ordine :

Le parole chiave possono essere separate solo da una virgola; nessuno spazio bianco è permesso tra di loro.

Quindi quanto segue non è corretto:

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

Quanto segue è (più) corretto

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.