Jak zezwolić apacheowi na dostęp do pliku, ale uniemożliwić innym przeglądanie go?

2

Mam kilka folderów z instalacjami Magento.

na przykład

www / magento1 www / magento2

Wszystkie zawarte w nich pliki / foldery są własnością odpowiednio root: magento1 i root: magento2.

Mam 3755 perms dla wszystkich folderów, 644 dla wszystkich katalogów na początek. Zapobiega to pisaniu w dowolnym folderze lub pliku przez osoby inne niż root.

Następnie dodaję uprawnienia do zapisu grupowego dla folderów / plików, do których deweloperzy powinni móc pisać. Np. Nie mogą pisać do plików podstawowych, ale mogą pisać do modułów / skórek, które nie są rdzeniami.

W porządku. Jedyne, co nie jest w porządku, to to, że nie chcę, aby mogli odczytać nazwę użytkownika / hasło bazy danych mysql z magento1 / app / etc / local.xml. Nie chcę, aby mieli dostęp do bazy danych, w której przechowywane są poufne informacje. Nie chcę też, aby nieuczciwy programista usunął kilka tabel lub co masz.

Ale apache musi mieć dostęp do odczytu tego samego pliku.

Oto „rozwiązanie”, które nie działa: Usuń uprawnienia do odczytu z grupy, ale pozostaw je innym. Czemu? Ponieważ to uniemożliwia programistom czytanie z ich aplikacji / etc / local.xml, ale pozwala im czytać wszystkie pozostałe.

Co ja robię?


EDYCJA: Tak, devs = programiści i będą mieli dostęp do SSH i FTP.

Buttle Butkus
źródło
To jest naprawdę proste. Jeśli plik jest oznaczony jako czytany przez użytkownika, może on wyświetlić zawartość pliku, odpowiedzią jest to, że użytkownik uruchamiający apache różni się od innych kont użytkowników. Umieść użytkownika we własnej grupie, ponieważ nie chcesz, aby użytkownik miał takie same uprawnienia jak root, ale w niektórych przypadkach może mieć więcej niż prosty dostęp do odczytu.
Ramhound,

Odpowiedzi:

3

Zakładając, że podobnie jak w Debianie, apache działa jako użytkownik www-data i grupa www-data, rozwiązaniem jest

chown www-data:www-data www/magento1/app/etc/local.xml
chmod 440 www/magento1/app/etc/local.xml

Użytkownik root może zawsze czytać i zapisywać wszystkie pliki.

Stefan Seidel
źródło
To jest w zasadzie rozwiązanie, z którego ostatecznie skorzystałem.
Buttle Butkus,
Co z przypadkiem, w którym dwóch użytkowników musi hostować różne rzeczy, a ty nie chcesz, aby widzieli nawzajem hasła?
jozxyqk
@ jozxyqk W przypadku, gdy „dwóch użytkowników musi hostować różne rzeczy, a ty nie chcesz, aby widzieli się nawzajem”, opracowałem bardziej złożone rozwiązanie. Zachowuję właściciela / grupę plików wszystkich użytkowników jako usernamei nie udzielam ŻADNYCH uprawnień „innym”, a jedynie czytam / wykonuję dla grupy. Np. 750 dla folderów 640 dla plików. To uniemożliwia użytkownikom wzajemne widzenie plików. Potem dodać użytkownika Apache ( www-datalub apache, lub cokolwiek) do każdego użytkownika, grupy , tak że apache może tylko do odczytu. Możesz przyznać grupowe uprawnienia do zapisu tam, gdzie apache ich potrzebuje (np. W varfolderze Magento ).
Buttle Butkus
@ButtleButkus aah, to ma sens. Chociaż jeśli Apache uruchomi skrypt użytkownika, skrypt ten będzie mógł zobaczyć pliki innych osób. Czy można temu zapobiec? Zapytałem o to tutaj i wskazano mi na „bloki katalogów”, ale nie mogłem wymyślić, jak ich użyć, aby zapobiec dostępowi między użytkownikami. To także przesuwa bezpieczeństwo do apache i z dala od systemu operacyjnego.
jozxyqk
1
@ButtleButkus dzięki! to brzmi jak właściwe rozwiązanie. Tak, natknąłem się na serwery, na których mogę pisać skrypty php uruchamiane jako użytkownik apache i mające dostęp. Zainteresowało mnie to, jak należy go skonfigurować. Właśnie znalazłem suEXEC.
jozxyqk
0

Zakładając, że devs = programiści ...

Czego nie wyjaśniono, w jaki sposób deweloperzy uzyskują dostęp do systemu - ssh? ftp?

jeśli jest to tylko dostęp do ftp, możesz wykluczyć plik konfiguracyjny z udostępniania / pokazywania przez ftp.

Alternatywnie możesz uruchomić apache pod pewną nazwą użytkownika (zwykle jest skonfigurowany tak, aby działał jak nikt, czasami jako konto użytkownika). Jeśli pozwolisz czytać „innym” / „światu”, każdy może to przeczytać. Więc idź inną drogą - uczyń ją czytelną tylko dla użytkownika i ustaw własność użytkownika na apache użytkownika, i całkowicie zamknij dostęp do grupy i innych. W ten sposób apache chętnie go czyta, a nikt inny nie może (zapisać roota). Musisz jednak naśladować tego użytkownika, jeśli chcesz interweniować w pliku. Na przykładsu - username

ljgww
źródło
między innymi apache działa jako „root” (co jest uważane za złą praktykę dla konfiguracji apache), następnie plik konfiguracyjny bazy danych powinien być własnością roota i może być czytelny tylko dla użytkownika root (go-rwx lub 400) teoretycznie, jeśli apache działa jako root, możesz ustaw także 000, ponieważ root i tak będzie mógł go odczytać.
ljgww
żaden apache nie działa jako root. Działa jako apache: apache (użytkownik: grupa)
Buttle Butkus
następnie uczyń plik czytelnym przez apache: tylko apache, chown apache:apache local.xmla następnie, chmod 400 local.xmlaby był czytelny tylko przez apache. Ahh, widzę, że ktoś już to powiedział. :)
ljgww