Jak odmówić dostępu do sieci niektórym plikom?

14

Muszę wykonać operację trochę dziwną.

Najpierw uruchamiam na Debianie, apache2 (który „działa” jako dane www użytkownika)

Mam prosty plik tekstowy z rozszerzeniem .txt ot .ini lub jakimkolwiek rozszerzeniem, nie ma znaczenia.

Te pliki znajdują się w podfolderach o takiej strukturze:

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

dlatego nazwa pliku jest zawsze taka sama, podobnie jak w przypadku „hierarchii”, wystarczy zmienić nazwę folderu: /folder-name-static/folder-name-dinamyc/file-name-static.txt

To, co powinienem zrobić, jest (myślę) stosunkowo proste: muszę być w stanie odczytać ten plik przez programy na serwerze (na przykład python, php), ale jeśli spróbuję odzyskać zawartość pliku przez broswer (przeglądanie adresu URL strony internetowej. przyklad.com/folder1/car/foobar.txt lub przez cUrl itp.) Muszę otrzymać niedozwolony błąd lub cokolwiek innego, ale nie mogę uzyskać dostępu do pliku .

Byłoby również miło, że nawet dostęp do tych plików przez FTP jest „ukryty” lub w każdym razie nie można go pobrać (przynajmniej, że używam z rootem ftp i danymi użytkownika)

Jak mogę to zrobić?

Znalazłem to online, umieść w pliku .htaccess:

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

Wygląda na to, że działa, ale tylko wtedy, gdy plik znajduje się w katalogu głównym (www.example.com / myfile.txt), a nie w podfolderach. Co więcej, foldery na drugim poziomie (www.example.com/folder1/ fruit /foobar.txt) będą tworzone dynamicznie. Chciałbym od czasu do czasu unikać zmiany pliku .htaccess.

Możliwe jest utworzenie reguły, która jest podobna, dla wszystkich plików o podanej nazwie, która znajduje się na * www.example.com / folder-name-static / * folder-name-dinamyc / *** file-name -static.txt *, gdzie te części są zawsze takie same , tylko ** ta jedna zmiana ?

EDYCJA :

Jak powiedział Dave Drager, mógłbym to uprościć, utrzymując te pliki poza katalogiem dostępnym w Internecie. Ale te katalogi będą również zawierać inne pliki, obrazy i inne rzeczy używane przez moich użytkowników, więc po prostu staram się nie mieć systemu zduplikowanych folderów, takich jak:

/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
źródło

Odpowiedzi:

21

Możesz użyć Files / FilesMatch i wyrażenia regularnego:

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

W ten sposób chroniony jest plik .htpasswd.

lub przekieruj dowolny dostęp .txt do 404:

RedirectMatch 404 \.txt$
rkthkr
źródło
Próbowałem tego użyć, ale wydaje się, że nie działa na plikach w podfolderach
Strae
Poprawiłem wyrażenia
ok .. może działać. Ale .. wyrażenie regularne powinno być jak RedirectMatch 404 \ moja_nazwa.txt $, prawda? Pliki będą zawsze miały tę samą nazwę, ale w różnych folderach. To rozwiązanie nie wpłynie na metodę FTP, prawda?
Strae,
To wygląda poprawnie ...
rkthkr
Tak, potwierdzam, że działa ... ale moje wyrażenie regularne RedirectMatch 404 \ nazwa_pliku.txt $ musi być niepoprawna .. działa, jeśli używam RedirectMatch 404 \ .txt $, blokując wszystkie pliki .txt, ale nie jeśli używam nazwy pliku w wyrażeniu regularnym. Jakaś pomoc? nie jestem genialny z wyrażeniem regularnym;)
Strae
1

Tak, to wszystko jest możliwe. Jeśli jednak masz na serwerze programy, które potrzebują dostępu do plików tekstowych, powinny one znajdować się poza katalogiem głównym. Na przykład, jeśli twoje pliki internetowe znajdują się w ~ / public_html /, powinieneś przechowywać je w ~ / data. Nie ma powodu, aby umieszczać je w publicznym folderze HTML.

Oprócz usunięcia ich z folderu internetowego upewnij się, że uprawnienia unix są dla nich ustawione poprawnie. Użytkownik skryptów musiałby mieć dostęp do odczytu (zapisu?), Ale nikt inny nie musi mieć tego dostępu.

Jeśli potrzebujesz mieć te pliki w folderze dostępnym w sieci, istnieją sposoby na zrobienie tego, o co pytasz za pośrednictwem mod_rewrite. Zobacz następującą witrynę dla wielu przykładów, z których jeden powinien pasować do rachunku.

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

Dave Drager
źródło
Pliki zostaną utworzone przez python lub php, a następnie, nigdy więcej nie edytowane, wystarczy przeczytać.
Strae,
0

Dlaczego nie skorzystać ze standardowych uprawnień do plików UNIX, aby odmówić dostępu do pliku?

W Wikipedii znajduje się dobre wytłumaczenie na temat uprawnień do plików unixowych

cyberkni
źródło
Jak mogę ustawić uprawnienia, aby pozwolić php, pythonowi, rootowi obsługiwać te pliki, a przeglądarki nie mają dostępu?
Strae,
0

Umieść plik .htaccess w podkatalogu i w instrukcji ustaw AllowOverride All

Matt Simmons
źródło
Potrzebuję więc .htaccess do każdego folderu na poziomie 2 °? mmh .. może być rozwiązaniem .. byłoby lepiej z 1 .htacces ..
Strae
0

Możesz używać list ACL systemu Linux .

Alakdae
źródło
Czy proste uprawnienia do plików? jak rwx? Jak mogę zrobić z tym, czego potrzebuję?
Strae,
0

Po przeczytaniu was wszystkich zauważyłem, że plik .htaccess może być dla mnie sposobem: wpływaj tylko na pliki w folderze, w którym się znajduje.

Ale moje foldery są generowane dynamicznie. Nie sądzę, że kopiowanie pliku .htaccess lub odtwarzanie go za każdym razem, gdy tworzę nowy folder, jest niezawodnym sposobem.

Jak powiedział Dave, logicznym sposobem powinno być przechowywanie plików tekstowych konfiguracji poza folderem dostępnym w sieci.

Ale w każdym folderze muszę przechowywać inne pliki, obrazy na przykłady, które muszą być dostępne w Internecie ... i nadal nie sądzę, że replikacja struktury folderów w katalogu głównym katalogu głównego i na zewnątrz jest również niezawodnym sposobem . Dlatego będę musiał zmienić nawet konfigurację apache, aby uwzględnić folder config w dozwolonej ścieżce php. W każdym razie nie powinno to stanowić problemu.

Więc jeśli nie mam lepszego , muszę wybrać mniej gorszy .

Na razie użyję rozwiązania z wieloma plikami .htaccess, mając nadzieję, że w przyszłości nie będę żałować.

Każde inne rozwiązanie jest mile widziane.

Strae
źródło
0

Z sekcji Dokumentacja zamówienia :

Słowa kluczowe mogą być oddzielone przecinkiem; między nimi nie są dozwolone żadne spacje.

Zatem poniższe informacje są niepoprawne:

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

Poniższe jest (więcej) poprawne

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
ebichuhamster
źródło