Dnia 12 lutego 2015 13:34 Dariusz Kowalczyk dariusz@kowalczyk.it napisał(a):
Moje pytanie było retoryczne :-) Ale jak już zacząłeś to odpowiem. Lms jest napisany w php i do działania potrzebuje serwera www który potrafi pracować z interpreterem php, sam serwer nie ma znaczenia. Po prostu trzeba się nauczyć konfigurować dany serwer www żeby działał szybko i bezpiecznie.
Można narzekać, że Apache jest wolny ale Nginx nie wprowadził funkcji podobnej do .htaccess specjalnie żeby być szybkim. Na szczęście w Apache można to wyłączyć i konfigurować wszystkie reguły (także modrewite) w sekcji virtualhost.
Włączenie wspomnianą dyrektywą obsługi .htaccess zabija wydajność maszyny, bo apache za każdym żądaniem dostępu do pliku musi przeglądać całe drzewo katalogów w poszukiwaniu plików .htaccess. jak takie bezsensowne przeszukiwanie wpływa na wydajność łatwo sobie wyobrazić.
A że .htaccess wiele ułatwia bo pozwala się odpierwiastkować użytkownikom od admina, a niech sobie użytkownicy knują reguły w .htaccess...to inna sprawa, zawsze jest coś za coś,a tutaj jest albo albo, albo wygoda albo wydajność i bezpieczeństwo.
Łatwo narzekać na apache że jest wolny ...ale nie jest to do końca prawdą, jest elastyczny bo zapewnia mnogość funkcji ...np wspomniany .htaccess ale gdy się go okroi z funkcjonalności i wywali niepotrzebne moduły jego wydajność znacząco rośnie.
lms używa plików .htaccess w katalogach
lms/backups/.htaccess lms/documents/.htaccess lms/lib/.htaccess lms/templates_c/.htaccess lms/modules/.htaccess lms/.htaccess lms/contrib/bin/.htaccess lms/userpanel/lib/.htaccess lms/userpanel/templates_c/.htaccess
ale jedyne co w tych plikach jest to
Order deny,allow Deny from all
jak widać .htaccess jest użyte tylko po to by zabezpieczyć dostęp do tych katalogów.
jedynym wyjątkiem jest lms/.htaccess
w którym jest
<Files lms.ini> Order Deny,Allow Deny From All
to zabezpieczenie na wypadek sytuacji gdy ktoś plik lms.ini umieszcza w katalogu
lms/
zamiast /etc/lms
Wrzucenie kodu lms-a na serwerze z nginx zmieni tylko tyle że te katalogi nie będą domyślnie chronione i trzeba to zrobić w konfiguracji nginx-a ale lms działać będzie bez żadnego problemu. Przyśpieszenie działania serwera apache uzyskać można wyłączając globalnie w pliku httpd.conf dyrektywę AllowOverride
AllowOverride None
i konfigurując odpowiednie reguły w virtualhost obsługującym lms-a. i dodanie (tu przykładowa ścieżka do katalogu w którym znajduje się lms)
<Directory "/var/www/html/lms/backups"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/documents"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/lib"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/templates_c"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/modules"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/contrib/bin"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/userpanel/lib"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/userpanel/templates_c"> Order deny,allow Deny from all
</Directory>
oraz ochrona lms.ini jeśłi nie jest umieszczony w /etc/lms
<Files "/var/www/html/lms/lms.ini"> Order allow,deny Deny from all
</Files>
Konfiguracja virtualhost dla lms-a w apache beż użycia .htaccess wtedy wygląda tak
<VirtualHost *:80> ServerAdmin administrator@wsb-nlu.edu.pl DocumentRoot /var/www/html/lms ServerName lms.org.pl ErrorLog logs/lms.org.pll-error_log CustomLog logs/lms.org.pl-access_log common
<Directory "/var/www/html/lms"> AllowOverride None Order allow,deny Allow from all </Directory>
<Directory "/var/www/html/lms/backups"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/documents"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/lib"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/templates_c"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/modules"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/contrib/bin"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/userpanel/lib"> Order deny,allow Deny from all
</Directory>
<Directory "/var/www/html/lms/userpanel/templates_c"> Order deny,allow Deny from all
</Directory>
<Files "/var/www/html/lms/lms.ini"> Order allow,deny Deny from all
</Files>
</VirtualHost>
I taka tez konfiguracja powinna być proponowana jako domyślna w dokumentacji lms-a.
Analogicznie trzeba to zabezpieczyć dla nginx-a
Witam, ośmielam się zwrócić uwagę, że te dyrektywy nie zadziałają z nowszą wersją apache. Zamiast „order deny,allow” i „deny/allow from all” należy użyć dyrektywy „require all denied/granted”.