15 najlepszych wskazówek dotyczących bezpieczeństwa na stos

15 najlepszych wskazówek dotyczących bezpieczeństwa na stos

Wielu nowych administratorów systemów zapomniało zastosować bezpieczeństwo podczas konfigurowania środowiska hostingu do użytku produkcyjnego z Apache, MySQL i PHP. Staram się uwzględnić wszystkie te wskazówki dotyczące bezpieczeństwa, które musimy wziąć pod uwagę podczas przygotowywania nowego systemu do użytku produkcyjnego lub dowolnej istniejącej konfiguracji lampy.

Wszystkie zmiany konfiguracyjne zastosowane w tym artykule zostaną zaktualizowane w poniższych plikach konfiguracyjnych zgodnie z systemami operacyjnymi. W niektórych przypadkach ścieżka plików konfiguracyjnych może się zmienić. Zrób więc niewłaściwe pliki. Po wprowadzeniu zmian w ponownym uruchomieniu usług związanych.

Dla Ubuntu, Debian & LinuxMint:
  • Apache2: /etc/apache2/apache2.conf
  • PHP: /etc/php/[wersja]/apache2/php.ini
  • Mysql: /etc/mysql/my.cnf lub/etc/mysql/mysql.conf.D/Mysqld.CNF
Dla Centos, Redhat i Fedora:
  • Apache: /etc/httpd/conf/httpd.conf
  • PHP: /etc/php.ini
  • Mysql: /itp./mój.CNF

#1. Ukrywanie wersji i tożsamości systemu operacyjnego (Apache)

Servertokens Kontroluje dyrektywy, czy pole nagłówka odpowiedzi serwera, które jest wysyłane z powrotem do klientów. Serverversignature konfiguruje stopkę w dokumentach generowanych przez serwer. Edytuj plik konfiguracyjny Apache i aktualizuj następujące dyrektywy w następujący sposób.

  • Serverversignature - pokazuje wersję Apache
     Servertokens Prod 
  • Servertokens - zapewnia wersje systemu operacyjnego wraz z innymi informacjami poufnymi serwerami.
     Servervishature wyłącz 

#2. Wyłącz listę katalogów (Apache)

Jeśli lista katalogów jest włączona w Apache. Wtedy wszystkie listy plików i katalogów zostaną wyświetlone na stronie internetowej, jeśli nie istnieje domyślny dokument. Dodaj następującą konfigurację w Apache, aby wyłączyć serwer listów katalogowych.

 Opcje -indexes   

Następnie możesz włączyć notowanie na podstawie recepty, jeśli to wymagane.

#3. Ograniczanie dostępu do plików i katalogu (Apache)

Ograniczanie dostępu na podstawie katalogu złożyć lokalizację w Apache.

Ogranicz katalog

Aby ograniczyć katalog i dostęp do plików od użytkowników, pozwoli on tylko na zdefiniowanie IPS z zezwoleniem.

 Zamów odmawianie, pozwól odmówić od wszystkich zezwolić na 192.168.1.0/24 Pozwól .przykład.com  

Ogranicz plik

Możemy również ograniczyć określony plik za pomocą dyrektywy plików jak poniżej.

 Zamów, odmawiaj, pozwól zaprzeczyć od wszystkich  

Ograniczyć lokalizację

Dyrektywa lokalizacji ogranicza zakres zamkniętych dyrektyw według URL.

 Zamów odmawianie, pozwól odmówić od wszystkich zezwolić na 192.168.1.0/24 Pozwól .przykład.com  

#4. Wyłącz po stronie serwera i CGI (Apache)

Możemy po prostu wyłączyć obejmowanie serwera i wykonywanie CGI, definiując znacznik katalogu. Dodaj poniżej w pliku konfiguracji hosta wirtualnego Apache.

 Opcje -includes -execcgi  

#5. Ogranicz wyciek informacji PHP (PHP)

Domyślnie instalacja PHP ujawnia światu, że PHP jest instalowany na serwerze, który zawiera wersję PHP w nagłówku HTTP (np.4.20). Czytaj więcej

Aby ukryć te wartości przed nagłówkiem edytuj php.INI i zaktualizuj poniżej dyrektywy, aby wyłączyć

expose_php = off 

#6. Wyłącz zdalne wykonywanie kodu (PHP)

Jeśli Zezwolić_url_fopen jest włączony w konfiguracji, umożliwia funkcje takie jak file_get_contents () oraz zawiera instrukcje, które mogą pobierać dane z zdalnych lokalizacji HTTP lub FTP i wykonać kod.

zezwolić_url_fopen = off aLop_Url_include = off 

#7. Wyłącz niebezpieczne funkcje PHP (PHP)

Możemy wyłączyć dowolną funkcję PHP za pomocą dyrektywy disible_functions w pliku konfiguracyjnym PHP. Wyłącz wszystkie funkcje, które mogą być szkodliwe i nie są używane w aplikacjach.

disable_functions = exec, shell_exec, passthru, system, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, proc_open, pcntl_exec 

#8. Ogranicz dostęp PHP do systemu plików (PHP)

Dyrektywa Open_BasedIR ustawia katalogi, z których PHP może uzyskać dostęp do plików

Open_Basedir = "/home/user/public_html" 

#9. Wyłącz nieużywane moduły PHP (PHP)

PHP obsługuje „dynamiczne rozszerzenia” w celu załadowania w środowisku PHP. Możemy wyłączyć każdy nieużywany moduł do załadowania w systemie, zmieniając nazwę pliku konfiguracyjnego.

CD /etc /php.D/ MV OCI8.INI OCI8.ini.wyłączyć 

#10. Włącz limity PHP (PHP)

Aby umożliwić użytkownikom przesyłanie plików o maksymalnym rozmiarze, zaktualizuj następującą wartość konfiguracji.

 upload_max_filesize = 2M #Maximum 2 MB użytkownika pliku może przesłać 

Maksymalny czas wykonywania każdego skryptu

 max_execution_time = 30 # sekund 

Maksymalna ilość czasu każdy skrypt może wydać dane żądania analizy

max_input_time = 60 # sekundy 

#11. Ogranicz zdalny dostęp do MySQL (MySQL)

Jeśli środowisko aplikacji nie wymaga zdalnego dostępu do bazy danych, wyłącz wszystkie zdalne połączenia dla serwera bazy danych. Łatwiejszy sposób, aby to zmusić serwer MySQL do słuchania tylko na 127.0.0.1 (LocalHost).

Edytuj plik konfiguracyjny MySQL i zaktualizuj następującą wartość.

Address z wiązaniem = 127.0.0.1 

#12. Wyłącz użycie lokalnej infilu (MySQL)

Umożliwienie lokalnej infile może być niebezpieczne dla bezpieczeństwa systemu. Jeśli lokalny infile jest włączony na serwerze, użytkownik może łatwo załadować dowolny plik (na przykład /etc /passwd, /etc /shadow).

Aby wyłączyć ten plik konfiguracyjny MySQL i dodać następującą wartość w sekcji [MySQLD].

[Mysqld] Lokalny infile = 0 

#13. Utwórz użytkownik specyficzny dla aplikacji w MySQL (MySQL)

Nie używaj użytkownika MySQL „root” do dostępu do bazy danych za pośrednictwem aplikacji. To może być niebezpieczne dla twojego systemu. Upewnij się, że utworzył i użyj użytkownika specyficznego dla aplikacji z ograniczonym dostępem do bazy danych aplikacji. Aby utworzyć konto MySQL, użyj następującego polecenia.

[e -mail chroniony]: ~# mysql -u root -p mysql> Utwórz użytkownika „myusr”@„localHost” identyfikowany przez „hasło”; mysql> Grant Wybierz, wstaw, aktualizuj, usuń na MYDB.* Do „myusr”@„localHost” zidentyfikowane przez „hasło”; mysql> uprawnienia spłukające; 

#14. Popraw bezpieczeństwo dzięki MySQL_Secure_Installation (MySQL)

Po zainstalowaniu polecenia MySQL MySQL_Secure_Installation jest bardzo przydatne do zabezpieczenia MySQL Server. To polecenie włączy również ochronę haseł dla użytkownika root.

[e -mail chroniony]: ~# mysql_secure_instalation „Wymagane wyjście jest pokazane poniżej. W rzeczywistości zobaczysz więcej danych wyjściowych na ekranie „Zmień hasło root? [Y/n] y nowe hasło: ********** Ponownie wprowadź nowe hasło: ********** Usuń anonimowe użytkowników? [Y/n] y? [T/N] y Usuń testową bazę danych i dostęp do niej? [Y/n] y? [Y/n] y 

#15. Zapisz pliki konfiguracyjne Protect (Apache/MySQL/PHP)

W tej sekcji chronimy wszystkie nasze pliki konfiguracyjne serwera używane w stosie lampy, więc nikt nie może zmienić tych plików.

Chattr +ai /etc /php.ini chattr +ai /etc /php.d/* chattr +ai/etc/my.CNF CHATTR +AI/etc/httpd/conf/httpd.conf 

Pamiętaj, że po włączeniu ochrony zapisu żaden użytkownik, w tym root, nie może aktualizować tych plików. Jeśli musisz zaktualizować dowolne pliki wyłączają ochronę zapisu najpierw za pomocą następującego polecenia.

Chattr -Ai nazwa pliku 

Będziemy aktualizować przydatne wskazówki dotyczące bezpieczeństwa lampy do tego artykułu. Prosimy również o zasugerowanie wskazówek, dodając je w komentarzach.