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/.
Cześć, mam pytanie z podstaw. Jak z punktu widzenia bezpieczeństwa powinno wyglądać hostowanie strony WWW na serwerze Apache. Chodzi mi o lokalizację i uprawnienia plików i katalogów. Obecnie główny katalog strony WWW stworzyłem w /var/www/nazwastrony/. Właścicielem katalogu ustanowiłem grupę www-data, do grupy dodałem swojego użytkownika, do katalogu /nazwastrony nadałem rekurencyjnie chmod 775. Na próbę wrzucam tam jakiś popularny CMS, jest nim Prestashop. Działać działa, bo czemu ma nie działać? Jednak jak powinno robić się to profesjonalnie [b]z punktu widzenia bezpieczeństwa[/b]? W internecie jest wiele zdań i chciałbym zapytać się o to Was.
Pozdrawiam
Offline
Bezpiecznie? Serwer WWW nie powinien w ogóle być właścicielem ani mieć prawa zapisu w skryptach sklepu.
Kłopot jest wtedy z folderami tymczasowymi, logów czy obrazkami, jakie zapisuje CMS napisany w PHP, ale przynajmniej ktoś Ci do niego backdoora c99 nie dorzuci zbyt łatwo.
Trudniejsza sprawa jest z najnowszymi skryptami CMS używającymi Composera do instalacji Modułów jak Prestashop 1.7 i Magento 2.2, bo one już przypominają bardziej systemy operacyjne aniżeli skrypty CMS, i potem te wszystkie moduły muszą ciągle coś zapisywać w rożnych częściach CMSa.
Posadzenie bezpiecznie Magento-2.2 w trybie oddzielnego właściciela plików aniżeli serwer WWW czy demon PHP, to już spore wyzwanie, i często ani myśli działać w takiej konfiguracji.
Prestashop 1.7 dzielnie podąża w tym samym kierunku.
Pozdro
Offline
Właśnie na tym polega problem. Gdyby chodziło o zwykłą statyczną stronę, której skrypty nie potrzebują mieć możliwości zapisywania czy edytowania plików to sprawa jest raczej oczywista. Tutaj w grę wchodzi Prestashop 1,7.
Offline
To zobacz w dokumentacji Presty, wersja 1.7 to jest wersja developerska, 50 razy trudniejsza od Prestashopa 1.6, ale dalej łatwiejsza od Magento -2.2.
W każdym razie, jak na VPSie dla testu ściągnąłem z Githuba Preste 1.7,
i doinstalowałem koniecznych modułów Composera, to folder Presty miał 400 MB pojemności, czyli mniej więcej tyle co 6 instalacji systemu Puppy Linux, albo instalka Androida.
Pozdro
Offline
Wiem, swój sklep mam na preście 1,6 i na razie nie aktualizuje do 1,7. Tę stronę działającą mam na hostingu, na VPSa wrzuciłem prestę 1,7 dla testu. Rzeczywiście, masz rację - jest ciężka, sam folder po rozpakowaniu waży grubo ponad 100 megabajtów.
Nie mniej, wracając do tematu. Czy dodanie użytkownika do grupy www-data, chown katalogu strony na tę grupę i hostowanie strony z /var/www to jest rozwiązanie bezpieczne czy profesjonalnie powinno wyglądać to inaczej?
Offline
Jeżeli strona działa, a serwer www i demon php nie mogą zapisywać skryptów PHP, JS i layoutów w folderze Presty, to może trudniej się instaluje rozszerzenia, ale też nie da się w prosty sposób wpakować backdoora do sklepu, albo dokleić jakiegoś syfu do sktyptów sklepu, co kończy się eleganckim czerwonym ostrzeżeniem w przeglądarce Chrome.
Jeżeli ten stan osiągniesz, to pierwsza ważna linia obrony będzie załatwiona.
Offline
OK dzięki za odpowiedź, właśnie takiej informacji potrzebowałem. Jak już dobrze się z tym zaznajomię to na pewno będę jeszcze pytał o bezpieczeństwo bazy danych i kilka innych spraw, ale to w innym temacie. Pozdrawiam.
Offline
A jeszcze jedno pytanie: czy jest sens robić chroot dla katalogu strony? Wiele o tym czytałem, ale większość sensownych artykułów pochodzi sprzed kilku, kilkunastu lat i argumenty w nich zawarte mogą być nieaktualne.
Na tę chwilę udało mi się skonfigurować Apache tak, że Presta działa bez problemu (choć w trybie debugowania wywala trochę błędów z powodu braku praw do zapisywania w niektórych katalogach cache podczas pacy w backoffice). Właścicielem katalogu /var/www/strona jest użytkownik systemu, grupą tego katalogu jest www-data. Wszystkie katalogi i podkatalogi presty mają chmod 750 a pliki 640. Nie wiem tylko czemu nadal mogę instalować moduły przez panel presty... nie mogę przez panel zmienić np. loga bo wyrzuca brak uprawnień do zapisu, ale stworzyć katalog z nowym modułem presta może.
Offline
Chroot ma coś zabezpieczać?
Teoretycznie tak, praktycznie chroot to prehistoria, raczej Apparmor albo jak chcesz koniecznie coś podobniejszego do chroota, to Docker lub LXC.
Chroot z resztą nigdy zbyt bezpieczny nie był.
Offline
A możesz wytłumaczyć (pytam z ciekawości) dlaczego chroot nigdy bezpieczny nie był?
Do Apparmor już sobie czytam manuala, bardzo ciekawe narzędzie. Kontenerowanie zaś to chyba zbyt wiele jak na moje potrzeby. :)
Offline
[quote=777]A możesz wytłumaczyć (pytam z ciekawości) dlaczego chroot nigdy bezpieczny nie był?
Do Apparmor już sobie czytam manuala, bardzo ciekawe narzędzie. Kontenerowanie zaś to chyba zbyt wiele jak na moje potrzeby. :)[/quote]
https://access.redhat.com/blogs/766093/posts/1975883
Offline
Time (s) | Query |
---|---|
0.00011 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00119 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='13.59.234.182' WHERE u.id=1 |
0.00139 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '13.59.234.182', 1732374385) |
0.00050 | SELECT * FROM punbb_online WHERE logged<1732374085 |
0.00051 | SELECT topic_id FROM punbb_posts WHERE id=318372 |
0.00004 | SELECT id FROM punbb_posts WHERE topic_id=30352 ORDER BY posted |
0.00045 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30352 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00171 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30352 ORDER BY p.id LIMIT 0,25 |
0.00072 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30352 |
Total query time: 0.00672 s |