Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie plików .....
Forum PHP.pl > Forum > PHP
drakes
Stworzyłem witrynę w całości opartą na zapisywaniu i odczytywaniu danych z plików textowych (bez bazy danych, takie bylo założenie). Pliki te są w jednym katalogu, który ma prawa dostępu ustawione na chmod 777.
Jest to bardzo niebezpieczne, poniewaz kazdy teoretycznie bedzie mial dostep do nich jesli pozna ich nazwy i nazwe katalogu w ktorym sie znajduja. Czy jest możliwość zabezpieczenia tych plików tak by operacje na nich (odczyt, zapis) były możliwe jedynie z poziomu skryptów przez mnie napisanych (po pomyslnym przejsciu przez proces autoryzacji).
Innymi słowy chciałbym zapobiec sytuacji by ktoś ominął mój panel logowania i wpisując dokładną ścieżkę do pliku (w przeglądarce lub ftp'ie) uzyskał do nich bezpośredni dostęp.

Z góry dzięki za pomoc.
mike
Umieść te pliki poza folderem public_html wtedy nie będą widoczne przez przeglądarkę ale będą widoczne dla skryptu.
drakes
Dzięki. Rzeczywiście wtedy nie ma dostępu z poziomu przeglądarki a skrypt bez problemu będzie z nich korzystał. Mam jeszcze tylko pytanie czy taki katalog z prawami dostępu 777 poza katalogiem public_html nie stanowi również jakiejś luki w poziomie bezpieczeństwa?
FiDO
Stanowi, tylko troche mniejsza. Wykorzystac ja moga tylko osoby posiadajace konto na tym samym serwerze co Ty.
Tak wiec po pierwsze usun prawa odczytu dla grupy oraz others (i dodatkowo prawa do przeszukiwania dla grupy) ze swojego katalogu domowego, aby nikt z tego serwera nie mogl wejsc do Twojego katalogu domowego i podejrzec co tam masz za pliki.
To jednak nie jest wystarczajace, poniewaz jesli bedzie znal pelna sciezke do katalogu, w ktorym masz prawa 777 to, mimo braku praw do Twojego katalogu domowego, bedzie mogl wejsc do tego katalogu z 777 i porobic w nim bajzel. Dlatego tez dawanie 777 czemukolwiek nie jest dobrym pomyslem. Skrypt i tak pracuje (w zdecydowanej wiekszosci przypadkow) pod uzytkownikiem serwera www, czyli jemu potrzebne sa tylko prawa dla Others.. Zatem mozesz dac prawa 707 i bedzie wilk syty i owca cała.
Jednak to tez nie daje 100% bezpieczenstwa, poniewaz jak ktos zna dokladna sciezke tego katalogu (mniejsza z tym jak ja poznal.. mogl byc np. blad w skrypcie, ktory przez przypadek ja wyswietlil..) to moze napisac skrypt php, ktory wylistuje mu caly ten katalog oraz umozliwi dowolne operacje na plikach znajdujacych sie w nim. Co prawda zaweza sie w ten sposob znacznie grono osob mogacych namieszac, ale jednak mozliwosc taka jest..
Jak ktos wie jak zapobiec rowniez temu (zakladajac ze nie mamy mozliwosci ingerencji w php.ini) to chetnie sie dowiem. Nie mam az takiej wiedzy o systemach unixowych, to powyzsze udalo mi sie wywnioskowac samemu, ale z tym ostatnim problemem sobie do tej pory nie poradzilem.
drakes
Thx. też jestem ciekaw tego ostatniego. A z ciekawości czy znasz metodę jak temu zapobiec przy założeniu że możemy pozmieniać ustawienia w php.ini ?
FiDO
Tak.. np. za pomoca dyrektywy open_basedir lub Safe Mode
sobstel
Cytat(FiDO @ 2004-11-20 22:40:55)
Safe Mode

safe mode jest pomyslem chybionych dla uploadowanych plikow. po wiecej odyslam do http://ilia.ws/archives/18-PHPs-safe_mode-...t-security.html
ActivePlayer
Cytat
Jednak to tez nie daje 100% bezpieczenstwa, poniewaz jak ktos zna dokladna sciezke tego katalogu (mniejsza z tym jak ja poznal.. mogl byc np. blad w skrypcie, ktory przez przypadek ja wyswietlil..) to moze napisac skrypt php, ktory wylistuje mu caly ten katalog oraz umozliwi dowolne operacje na plikach znajdujacych sie w nim. Co prawda zaweza sie w ten sposob znacznie grono osob mogacych namieszac, ale jednak mozliwosc taka jest..


Przez błąd w skrypcie nie pozna bo wyłączasz na początku kazdego pliku error_reporting... wyłączasz prawda ? :-)
FiDO
Ja jak ja.. ale co z reszta? smile.gif Pisalem ogolnie a nie o sobie, a daje glowe, ze wiekszosc tego nie robi.
drakes
Cytat(FiDO @ 2004-11-21 19:51:39)
Ja jak ja.. ale co z reszta? smile.gif Pisalem ogolnie a nie o sobie, a daje glowe, ze wiekszosc tego nie robi.

racja smile.gif
morrison
Kontynuując wątek o prawach dostępu do plików mam dodatkowe pytania. Otóż mam stronę na serwerze na którym jest wielu innych użytkowników i mają oni dostęp do mojego katalogu public_html. W tym katalogu mam zainstalowane forum phpBB i jest tam plik config.php , który zawiera dane dotyczące mojej bazy danych(którą to posiadam na innym serwerze) np: usera, password, nazwa bazy, adres IP serwera. Krótkomówiąc: wielki sheet!! Jak mogę to zabezpieczyć? Plik musi mieć prawa do odczytu dla wszystkich ponieważ inaczej skrypt się nie połączy z bazą danych. Próbowałem umieścić plik poza katalogiem public_html w innym katalogu z prawami np chmod 700, ale oczywiście wówczas plik nie może zostać odczytany przez skrypt. Co mogę jeszcze zrobić?
FiDO
Przeciez napisalem wyzej co z tym mozna zrobic, czytaj uwazniej.
morrison
Cytat
Skrypt i tak pracuje (w zdecydowanej wiekszosci przypadkow) pod uzytkownikiem serwera www, czyli jemu potrzebne sa tylko prawa dla Others.. Zatem mozesz dac prawa 707 i bedzie wilk syty i owca cała.

czy chodzi Ci o ten fragment? Jak się nazywa uzytkownik serwera www i czy kazdy moze takie uprawnienia nadac plikowi? A jeśli chodzi o prawa 707 to jeśli się nie mylę: ostatnia cyfra daje prawa wszystkim użytkownikom do: odczytu, zapisu i wykonania. Więc każdy odczyta wówczas moje poufne dane:(( Proszę o nakierowanie mnie na rozwiązanie jeśli coś przeoczyłem, być może moja wiedza jest zbyt skąpa w tym temacie sad.gif Dodam, że nie mam możliwości ingerencji do pliku php.ini
FiDO
Cytat(morrison @ 2004-11-23 16:27:54)
A jeśli chodzi o prawa 707 to jeśli się nie mylę: ostatnia cyfra daje prawa wszystkim użytkownikom do: odczytu, zapisu i wykonania.

Niestety, a wlasciwie na szczescie.., tak nie jest.
Kolejne "bajty" praw przydzielane sa dla Owner, Group, Others. Po przetlumaczeniu na nasze "pierwsze prawa" sa dla wlasciciela pliku (z reguly Ty), kolejne dla grupy (w wiekszosci przypadkow wszyscy uzytkownicy posiadajacy konta na danym serwerze), a ostatnie dla "Innych", tzn. reszty, ktora nie jest ani wlascicielem pliku, ani nie nalezy do tej samej grupy co on. Tak wiec nadanie praw 7 dla Others powoduje, ze pelne prawa maja wszyscy poza jego wlascicielem, grupa... no i root'em oczywiscie winksmiley.jpg
morrison
dzieki FiDO juz rozumiem, ale nie wszystko. Sprawdziłem i ja jestem właścicielem pliku, grupa to tez ja, czyli w tym wypadku others=wszyscy inni uzytkownicy serwera. Czy dobrze mi się wydaje?? Czyli oni mogą czytac moj plik z danymi w tym momencie. Co w takim wypadku? Czy powinienem dane wrzucic do jakiegos innego pliku textowego np i nastepnie include zrobic? Czy co?
FiDO
Jak grupa to tez Ty ? biggrin.gif
Grupy to sa osobne rzeczy niz userzy.. przykladowo grupa moze sie nazywac Users, w ktorej sa wszystkie (z reguly..) konta na tym kompie.
A jesli faktycznie masz (i kazde inne konto) grupe tylko i wylacznie dla siebie to dosc dziwne...
Jesli masz dostep do shella (mozesz tez exec'iem jak nie masz zablokowanego) to sprawdz komende:
Kod
cat /etc/passwd | grep -c -E "[^:]+:[^:]+:[^:]+:`id -g`:"

Powinno wyswietlic ilosc kont w Twojej grupie.

Zreszta jak juz napisalem wyzej, zdejmij prawa (napisalem wczesniej ktore) ze swojego katalogu domowego, plik z waznymi danymi umiesc poza public_html, wtedy szanse na to, ze ktos zgadnie sciezke do tego pliku maleja prawie do zera.. wiec nawet jesli mialbys grupe tylko dla siebie (w co wierzyc mi sie nie chce) to bylbys duzo bezpieczniejszy niz teraz.
Krolik
Ja bym dal 707 na plik i 701 na katalog w ktorym sie znajduje zamiast 707. Dlaczego? Ano bo wtedy nie bedzie mozna sobie wylistowac zawartosci katalogu i odkryc nazwy pliku.

Oczywiscie to NADAL nie jest w 100% bezpieczne bo mozna podejrzec, gdzie sa pliki php i jakie maja nazwy, a nastepnie je odczytac (za pomoca skryptu php, jesli brak uprawnien dla grupy nas blokuje) i stamtad wyciagnac sciezke.

Nawet jesli jest safemode, to nie rozwiazuje to calkowicie problemu! Wystarczy, ze uzytkownik napisze sobie skrypcik CGI w Perlu lub C (jesli serwer to obsluguje) i juz ma uprawnienia serwera www i moze czytac Twoje pliki php.

Rozwiazaniem jest suexec. Wtedy skrypt pracuje z uprawnieniami uzytkownika, ktory go napisal, wiec wszystkim plikom i katalogom mozna nadac uprawnienia np. 700. Jedyny problem jest wtedy, gdy w Twoim skrypcie bedzie dziura. Wtedy masz dopiero przerabane worriedsmiley.gif

Tylko czy komus udalo sie zainstalowac suexec + php? Ja probowalem na OpenBSD i byla kicha. Suexec chodzil z Perlem dobrze, a z php nie chcial. Ale w manualu napisali, ze to powinno dzialac.

BTW: W CGI w C nie ma tego problemu, bo nadaje sie atrybut 711 na pliki wynikowe i nikt sie do sciezki pliku ani haselek z baza danych nie dobierze. Serwer moze WYKONYWAC pliki, ale nie moze ich CZYTAC. I suexec nie jest potrzebny.
morrison
Jak najlepiej zrobic dostep userom do swoich kont. Czy dobre jest takie rozwiazanie aby kazdy z userow nie mogl wyjsc powyzej swojego katalogu domowego i zobaczyc innych userow?? Wowczas chyba jest to wystarczajace zabezpieczenie czy nie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.