Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam.
Jest serwer z apache, każdy użytkownik ma katalog public_html w /home, dla przykładu /home/ag/public_html
Na koncie ag i pozostałych są różne CMS-y, skrypty muszą mieć prawo do tworzenia katalogów i plików (np. logi, wysyłanie danych, itd.).
Teraz moje pytanie, jakie ustawić poprawne i najbezpieczniejsze prawa katalogom i plikom (podejrzewam, że 644), aby serwer Apache mógł działać?
Możliwości:
- Wszystko na 777 - raczej odpada ;)
- 775 dla katalogów, przy ustawieniu użytkownika ag na właściciela, a grupę www-data - może, ale to chyba też nie najbezpieczniejszy sposób.
- 755 - to chyba najlepsze wyjście.
Jak to się powinno ustawić poprawnie? Nie odsyłajcie do Google, są różne informacje, a chciałbym poznać poprawny sposób (pewnie kilku innych początkujących również).
Pozdrawiam.
Offline
- 755 - to chyba najlepsze wyjście.
Domyślne i prawidłowe ustawienie, pod warunkiem. że public_html i jego zawartość też ma 755 dla plików wykonywalnych i folderów, 644 dla innych plików, i należy należy od użytkownika i grupy innej niż Apache, który te pliki wyświetla.
Offline
Problem jest taki właśnie, że gdy nie ustawie grupy www-data i chmod na 775 dla public_html i jego folderów to aplikacja wypluwa błędy, że nie ma uprawnień np. Do zapisu pliku sesji, upload zdjec przez panel, itd.
Mógłbyś opis jak to zrobić, żeby skrypt miał prawa do zapisu pewnych plików na serwerze i uploadu przy zachowaniu chmod 755?
Offline
Ja uprawnienia w takich przypadkach załatwiam takim skryptem:
#!/bin/bash find $HOME/public_html/ -type d -exec chmod 755 '{}' \; find $HOME/public_html/ -type f -iname '*.php' -exec chmod 755 '{}' \; find $HOME/public_html/ -type f -iname '*.js' -exec chmod 644 '{}' \; find $HOME/public_html/ -type f -iname '*.jpg' -exec chmod 644 '{}' \; find $HOME/public_html/ -type f -iname '*.gif' -exec chmod 644 '{}' \; find $HOME/public_html/ -type f -iname '*.png' -exec chmod 644 '{}' \; find $HOME/public_html/ -type f -iname '*.pdf' -exec chmod 644 '{}' \; find $HOME/public_html/ -type f -iname '*.cgi' -exec chmod 755 '{}' \; find $HOME/public_html/ -type d -iname 'tmp' -exec chmod 777 '{}' \; find $HOME/public_html/ -type d -iname 'cache' -exec chmod 777 '{}' \;
to jest wersja specjalnie dopasowana do $HOME/public_thml - i jeszcze mi się nie zdażyło, żeby coś nie działało, na standardowych skryptach typu CMS typu Joomla i podobne.
To jest wersja do php w ramach Apacha, jeśli php obrabiane jest po cgi przez php-fpm, pliki php wcale nie muszą mieć atrybutu wykonania.
Jakby trzeba coś przerobić, to skrypt jest w bashu, wykorzystuje komendy find i chmod.
RTFM:
man find
man chmod
Jeśli Apache nie będzie miał dostępu do public_html, to zobacz 2 rzeczy:
sudo -u apache bash ls -l /home/{nazwa_użytkownika}/public_html
I w logach Apacha, Apache od którejś wersji automatycznie zamyka się w chroocie.
Wazglednie spróbuj, czy pójdzie, kiedy podlinkujesz /home/{login}/public_html do /var/wwww/{login}, i zobacz, czy wtedy otworzy coś na adresie http://{adres-Apacha}/{login}.
Offline
Dzięki za skrypt, musiałem go trochę dostosować bo w temp mam jeszcze podkatalogi gdzie są trzymane sesje, itp.
Skrypt php ruszył, działa. Tylko teraz takie moje pytanie, czy tak się robi, że katalogom np. tmp, sessions, upload, itd. nadaje się po prostu chmod 777?
Ja cały czas myślałem, że 777 to zło i robi się to jakoś inaczej, że np. Apache dopisuje się do jakiejś grupy czy jakieś inne czary mary i wtedy chmod 755 ale apache może uploadować zdjęcia na serwer przez skrypt php albo zapisywać sesje, choć z drugiej strony jeśli apache mógłby robi te wszystkie rzeczy to wyszłoby to na to samo co 777 (?).
Offline
Standardowo w Linuxie dla wszystkich folderów tmp daje się uprawnienia 1777 - tzn 777 + lepki bit (sticky bit).
Tutaj też możesz taki założyć.
Jeśli natomiast nie chcesz mieć tmp na 777 - to spróbuj inaczej, np prawo zapisu dla www-data, albo jakiś ACL.
Sznurki:
http://en.wikipedia.org/wiki/Sticky_bit
http://pl.wikipedia.org/wiki/chmod
Offline
Ok, to już chyba ostatnie pytanie.
Zakładamy, że jest taka sytuacja:
/public_html - ag:ag - 755
- foldery w public_html - ag:ag - 755
- pliki w public_html i podfolderach zgodnie ze skryptem Jacekalex - ag:ag - 644/755
- katalogi, w których skrypt strony musi zapisywać pewne rzeczy typu, temp, upload, itd. - ag:www-data - 775
Czy takie rozwiązanie jest bezpieczniejsze niż:
/public_html - ag:ag - 755
- foldery w public_html - ag:ag - 755
- pliki w public_html i podfolderach zgodnie ze skryptem Jacekalex - ag:ag - 644/755
- katalogi, w których skrypt strony musi zapisywać pewne rzeczy typu, temp, upload, itd. - ag:ag - 777
Czy jest to zupełnie obojętne? :)
Offline
Jak nie masz mrówek w kompie, to obojętne.
I tak www-data będzie zapisywać i odczytywać, to jest najniebezpieczniejsza usługa.
Jak nie postawisz spieprzonego ftp, to przez prawidłowo skonfigurowany ssh jest się milion razy trudniej włamać, niż przez dziurawe skrypty php.
Natomiast historia języka php pokazuje, że skrypty są tylko dziurawe, lub jeszcze nie napisane :D
W ogóle, jak chcesz lepsiejszą konfigurację, to zainteresuj się systemem ACL (prosta sprawa), ewentualnie modułami wzmacniającymi bezpieczeństwo, jak Grsecurity czy Selinux (wyższa szkoła jazdy).
Pozdro
;-)
Offline