05 05.2015

Nasza standardowa konfiguracja Linuxa

Każdy administrator serwerów ma pewne upodobania i preferencje odnośnie sposobu konfiguracji serwerów, wynikające głównie z dotychczasowych doświadczeń zawodowych. My również.

Celem tego artykułu jest przybliżenie Tobie, jako naszemu potencjalnemu klientowi, naszej typowej konfiguracji, typowego layoutu systemu plików i innych spraw technicznych. Zajrzyj też do artykułów Standard bezpieczeństwa Linux, w którym znajdziesz nasze wytyczne związane z bezpieczeństwem, oraz Ochrona danych o krytycznym stopniu poufności, w którym skupiamy się na szyfrowaniu dysków twardych. Te trzy artykuły łącznie dadzą Ci pełny obraz tego, czego możesz się spodziewać po uruchamianych przez nas serwerach.

System operacyjny i narzędzia

Jeśli specyfika zamówienia nie narzuca żadnych konkretnych wymogów, używamy systemu Debian w najnowszej wersji stabilnej, czyli obecnie Debian Jessie (a przed końcem kwietnia 2015 Debian Wheezy). System instalujemy z pliku ISO w wersji netinstall, wybierając podczas instalacji tylko minimalny system + serwer ssh.

W systemie instalujemy kilka różnych zestawów narzędzi, przede wszystkim:

  • Server Farmer - narzędzie do zarządzania grupami serwerów
  • firewall - nasz autorski zestaw skryptów do obsługi firewalla w systemach Debian/Ubuntu
  • na serwerach o szczególnych wymogach dot. poufności danych instalujemy także dodatkowe pułapki, pozwalające wykryć oznaki aktywności osób i instytucji trzecich

Następnie za pomocą Server Farmera instalujemy pakiety potrzebne do realizacji konkretnych ról, np. serwera plików.

System plików

Jeśli nie ma przeciwwskazań, główny oraz rozruchowy system plików instalujemy na osobnych dyskach rozruchowych lub pen drive'ach. Staramy się jednocześnie ograniczać ich łączną wielkość do 8 GB, z czego pierwsze 256 MB to partycja /boot. Takie podejście pozwala na osiągnięcie dwóch celów:

  • urządzenie (dysk lub pen drive) zawierające rozruchowy i główny system plików można wymienić niezależnie od dysków z danymi (co bardzo mocno zmniejsza czas obsługi awarii)
  • zamiast standardowego upgrade'u systemu operacyjnego do nowej wersji, można zainstalować nowy system na nowym urządzeniu, a w razie czego wrócić szybko do starego na potrzeby testów, odzyskania jakichś danych itp.

Takie podejście ma również wadę: w wielu przypadkach rozruchowe i główne systemy plików znajdują się na urządzeniach podłączonych przez interfejs USB 2.0, z którymi komunikacja jest o wiele wolniejsza i bardziej problematyczna, niż w przypadku SCSI/SATA. Dlatego też niezależnie od tego, w jaki sposób podłączone jest takie urządzenie, stosujemy następującą konfigurację:

  • dyski twarde z danymi montujemy w katalogach /srv/mounts/*
  • dyski te nie są montowane automatycznie przy starcie systemu, ani też nie są dopisane do pliku /etc/fstab - zamiast tego wykrywa je i montuje skrypt /etc/local/mount_drives.sh, wywoływany przez /etc/local/start.sh (o którym niżej)
  • link symboliczny /srv/apps prowadzi do jednego z dysków (wybranego do przechowywania danych i konfiguracji aplikacji)
  • intensywnie używane katalogi z głównego systemu plików (np. /var/lib/mysql), przerabiamy na linki symboliczne do /srv/apps/* (np. /srv/apps/mysql), co minimalizuje operacje dyskowe na głównym systemie plików
  • wybrane katalogi z plikami tymczasowymi (np. /var/lib/courier) montujemy jako tmpfs
Start systemu

Ponieważ z opisanych wyżej powodów nie zawsze katalog /srv/apps jest dostępny przy starcie systemu, standardowo wyłączamy automatyczne uruchamianie usług, które do działania wykorzystują katalogi przekierowane na /srv/apps/*, czyli np. MySQL, Courier, Apache 2 i wielu innych. Usługi te są uruchamiane ręcznie (przez serwer zarządzający) przez skrypt /etc/local/start.sh, który po kolei:

  • podłącza targety iSCSI
  • uruchamia skrypt /etc/local/mount_drives.sh, wykrywający i montujący dyski twarde (a dla dysków zaszyfrowanych pytający o hasła)
  • montuje zdalne systemy plików NFS i CIFS
  • konfiguruje dodatkowe adresy IP, na których będą nasłuchiwać poszczególne usługi
  • uruchamia po kolei usługi w optymalnej kolejności

Taka konfiguracja pozwala nam panować nad tym, co się dzieje z serwerem w fazie uruchamiania usług niezależnie od tego, czy dystrybucja jest wyposażona w sysvinit, upstart, czy też w systemd.

Administracja systemem

Cała administracja systemami odbywa się z wiersza poleceń: ręcznie bezpośrednio na konsoli, ręcznie zdalnie przez ssh, a najczęściej za pośrednictwem centralnego serwera zarządzającego (który również łączy się z zarządzanym systemem przez ssh). Nie stosujemy żadnych webowych paneli do zarządzania serwerem ani usługami. Dzięki temu:

  • eliminujemy wiele wektorów ataku na nasze systemy
  • oszczędzamy zasoby (głównie procesor i pamięć RAM)
  • mamy o wiele większą elastyczność w konfiguracji (zewnętrzne panele nie narzucają nam żadnych konwencji)
  • mamy możliwość niestandardowego hardeningu, którego efekty często uniemożliwiają prawidłowe działanie standardowych paneli


Tomasz Klim
Administrator serwerów i baz danych, specjalista w zakresie bezpieczeństwa, architekt IT, przedsiębiorca. Ponad 20 lat w branży IT. Pracował dla największych i najbardziej wymagających firm, jak Grupa Allegro czy Wikia. Obecnie zajmuje się bezpieczeństwem projektów blockchainowych w Espeo Software. Chętnie podejmuje się ciekawych zleceń.


Wzbudziliśmy Twoje zainteresowanie?

Szukasz pomocy? formularz kontaktowy