To jest kanoniczne pytanie dotyczące zabezpieczenia stosu LAMP
Jakie są bezwzględne wytyczne dotyczące zabezpieczania serwera LAMP?
To jest kanoniczne pytanie dotyczące zabezpieczenia stosu LAMP
Jakie są bezwzględne wytyczne dotyczące zabezpieczania serwera LAMP?
Odpowiedź Davida jest dobrą podstawą ogólnych zasad hartowania serwerów. Jak wskazał Dawid, jest to ogromne pytanie. Określone techniki mogą zależeć w dużym stopniu od środowiska i sposobu użytkowania serwera. Ostrzeżenie: zbudowanie i wykonanie prawidłowej pracy może wymagać dużo pracy w środowisku testowym. Po nich dużo pracy nad integracją ze środowiskiem produkcyjnym i, co ważniejsze, proces biznesowy.
Najpierw sprawdź jednak, czy w Twojej organizacji obowiązują zasady hartowania, ponieważ mogą one być najbardziej istotne. Jeśli nie, w zależności od roli, może to być dobry moment na ich rozbudowę. Poleciłbym również rozwiązanie każdego elementu osobno od dołu do góry.
L
Istnieje wiele dobrych przewodników, które mogą ci pomóc. Ta lista może, ale nie musi pomóc, w zależności od dystrybucji.
Zabezpieczanie
Apache może być zabawne. Łatwiej jest mi zahartować system operacyjny i utrzymać użyteczność niż Apache lub PHP.
Im
P
Jest to zgodne z ideą Bezpiecznych praktyk programistycznych, która jest całą dyscypliną samą w sobie. SANS i OWASP mają absurdalnie dużo informacji na ten temat, więc nie będę próbował ich tutaj replikować. Skoncentruję się na konfiguracji środowiska wykonawczego i pozwolę programistom martwić się resztą. Czasami „P” w LAMP odnosi się do Perla, ale zwykle PHP. Zakładam to drugie.
Zadałeś pytanie, które, szczerze mówiąc, jest warte kilku książek na ten temat. Ale istnieją pewne ogólne podstawowe wytyczne, które działają dobrze:
Mam nadzieję, że pomoże Ci zacząć.
źródło
Oto dobra lista kontrolna, od której chciałbym zacząć.
Zapora ogniowa
SSH i użytkownicy
Baza danych
Oprogramowanie
źródło
Dodając do tego, co sugeruje David, im bardziej modularna jest twoja instalacja, mam na myśli ograniczenie dostępu do określonych użytkowników / grup utworzonych specjalnie dla jednego zadania i ograniczenie ich zakresu, tym bezpieczniejszy jest twój stos LAMP: przykładem tego jest posiadanie użytkownika Apache dla plików / folderów Apache z odpowiednio ustawionymi uprawnieniami, a nie w żadnej grupie, która ma dostęp do krytycznych plików / folderów systemowych. Użytkownik, który może uzyskać dostęp do tabel MySql powiązanych z Twoimi witrynami internetowymi, które zamierzasz wyświetlać, i tylko tych tabel. Dodatkowo możesz ograniczyć ich dostęp, aby zapewnić minimalną ilość dostępu z połączenia PHP. Upewnij się również, że nazwa użytkownika MySQL używana / widoczna w pliku PHP nie jest tą samą nazwą użytkownika lub hasłem, które zastosowano dla innego użytkownika.
Co to oznacza: jeśli użytkownik apache lub MySql zostanie zagrożony, nie mogą wyrządzić żadnej szkody poza zakresem folderów, do których apache ma dostęp (w przypadku użytkownika apache) i poza tabelą ( s) / database (s) (w przypadku użytkownika bazy danych MySQL).
Jeśli w jakiś sposób użytkownik MySQL miałby zostać skompromitowany, nie mógłby na przykład uzyskać dostępu do bazy danych i upuścić wszystkich baz danych z MySQL i zniszczyć wszystkie dane. W niektórych okolicznościach MOGĄ być w stanie upuścić tabele lub wstawić informacje do niektórych tabel w izolowanej bazie danych, dlatego ważne jest, aby udzielać dostępu do tabeli tylko tam, gdzie jest to absolutnie konieczne, i udzielać niezbędnych uprawnień ... jeśli nie Muszę mieć uprawnienia do upuszczania tabel lub uprawnienia do aktualizacji, a następnie nie dawaj ich temu użytkownikowi.
Ponadto, jeśli z jakiegoś powodu twoja nazwa użytkownika i hasło do konta administracyjnego zostaną znalezione dla MySQL, jeśli użyjesz innej nazwy użytkownika niż jakakolwiek inna nazwa użytkownika w systemie, muszą oni najpierw złamać zabezpieczenia systemu, zanim dostaną się do bazy danych, aby wyrządzić szkody. To samo dotyczy użytkownika apache i dostępu do plików.
Przykładowy czas! Podam przykładowy system, który uprości ten pomysł.
powiedz, że masz użytkowników w swoim systemie (root powinien być wyłączony dla bezpieczeństwa przez coś takiego jak umod -l lub passwd -l itp.): John, Barney, Terence i Lisa.
możesz utworzyć użytkownika w MySQL o nazwie bigbird (upewnij się, że używasz zaszyfrowanego hasła). Bigbird ma tylko wybrane uprawnienia i uprawnienia do aktualizacji, ale nie upuszcza ani nie tworzy, a na pewno nie . Ponadto tworzysz kolejnego administratora MySQL o nazwie garfield do pracy z bazą danych MySQL i usuwasz użytkownika root z bazy danych MySQL, aby nie można było go skompromitować. garfield został przyznany . uprawnienia w MySQL (w rzeczywistości jest to po prostu zmiana nazwy roota).
teraz tworzysz grupę apache lub użytkownika, a my nazwiemy to apweb2. Appweb2 nie należy do innych grup, a wszystkie pliki / foldery dla apache są przechowywane w / home / apweb2 /. Każdy wirtualny host miałby swój własny podfolder, a każdy z tych hostów miałby ustawiony katalog główny tego podfolderu. Dowiązania symboliczne zostałyby wyłączone, aby przypadkowo nie zapewnić dostępu do reszty systemu.
Możesz także ograniczyć dostęp ssh tylko do niektórych użytkowników (lub niektórych grup, lubię umieszczać ich w grupie ssh i sprawić, że jedyna możliwość korzystania z ssh).
Możesz także wybrać, którzy użytkownicy mają uprawnienia sudo, aby jeszcze bardziej ograniczyć ograniczenia. Kolejnym krokiem, który możesz zrobić, jest uczynienie wszystkich użytkowników ssh niezdolnymi do sudo, możesz stworzyć specjalnych użytkowników, którzy będą mogli używać sudo, którzy nie mogą używać ssh, aby po ssh zalogować się do innego użytkownika, aby mieć dostęp do sudo.
Tak więc, poprzez modularyzację każdego segmentu, jeśli jeden jest zagrożony, cały stos nie zostanie naruszony i możesz rozwiązać problem 1 zamiast zaczynać wszystko od nowa od zera.
źródło
Znalazłem ten dokument z SANS.org bardzo pomocny http://www.sans.org/score/checklists/linuxchecklist.pdf
źródło
W chwili obecnej nie zaniedbuj wirtualizacji kontenerów, a mianowicie Dockera, systemd-nspawn i mechanizmów wirtualizacji kontenerów, na których są one zbudowane (przestrzenie nazw, grupy grup). Korzystanie z wirtualizacji kontenerów pozwala izolować procesy, na przykład jeśli jedna z usług zostanie naruszona, osoba atakująca nie uzyska dostępu do innych usług.
W przypadku LAMP można na przykład użyć czterech kontenerów Docker z serwerem SSH, Apache, MySQL, PHP-FPM / Python / Perl / itp.
źródło