W Internecie jest wiele sprzecznych informacji na temat partycjonowania serwera Unix, więc potrzebuję porady, jak postępować.
Do tej pory na serwerach, które w naszym środowisku testowym tak naprawdę nie dbałem o partycjonowanie, skonfigurowałem pojedynczą monolityczną /
partycję plus swap. Ten schemat partycjonowania nie wydaje się dobrym pomysłem dla naszych serwerów produkcyjnych. Znalazłem dobry punkt wyjścia tutaj , ale wydaje się bardzo niejasne w sprawie szczegółów.
Zasadniczo mam serwer, na którym będę obsługiwał podstawowy stos LAMP (Apache, PHP i MySQL). Będzie musiał obsługiwać przesyłanie plików (do 2 GB). System ma macierz RAID 1 o pojemności 2 TB.
Planuję ustawić:
/ 100GB
/var 1000GB (apache files and mysql files will be here),
/tmp 800GB (handles the php tmp file)
/home 96GB
swap 4GB
Czy to brzmi rozsądnie, czy też nadmiernie komplikuję?
Odpowiedzi:
Podczas układania partycji należy pamiętać o trybach awaryjnych. Zazwyczaj to pytanie ma postać: „Co się stanie, gdy partycja x zapełni się?” Najdroższy voretaq7 przywołał sytuację z pełną
/
przyczyną wielu trudnych do zdiagnozowania problemów. Spójrzmy na bardziej konkretne sytuacje.Co się stanie, jeśli Twoja partycja przechowująca dzienniki jest pełna? Tracisz dane audytu / raportowania i czasami są wykorzystywane przez atakujących w celu ukrycia ich aktywności. W niektórych przypadkach system nie uwierzytelni nowych użytkowników, jeśli nie będzie mógł zarejestrować ich zdarzenia logowania.
Co dzieje się w systemie opartym na RPM, kiedy
/var
jest pełny? Menedżer pakietów nie będzie instalował ani aktualizował pakietów i, w zależności od konfiguracji, może zawieść cicho.Wypełnianie partycji jest łatwe, szczególnie gdy użytkownik jest w stanie do niej pisać. Dla zabawy, uruchom polecenie i zobacz jak szybko można zrobić dość duży plik:
cat /dev/zero > zerofile
.Wykracza to także poza wypełnianie partycji, gdy umieszczasz lokalizacje w różnych punktach montażu, możesz również dostosować ich opcje montażu.
Co się stanie, gdy
/dev/
nie zostanie zamontowanynoexec
? Ponieważ/dev
zwykle zakłada się, że jest obsługiwany przez system operacyjny i zawiera tylko urządzenia, był często (a czasem nadal) używany do ukrywania złośliwych programów. Opuszczenienoexec
pozwala uruchamiać przechowywane tam pliki binarne.Z tych wszystkich i wielu innych powodów wskazówki dotyczące hartowania będą omawiać partycjonowanie jako jeden z pierwszych kroków, które należy wykonać. W rzeczywistości, jeśli budujesz nowy serwer, sposób partycjonowania dysku jest prawie dokładnie pierwszą rzeczą, którą musisz podjąć decyzję, a często najtrudniejszą do późniejszej zmiany. Istnieje grupa o nazwie Center for Internet Security, która produkuje mnóstwo łatwych do odczytania przewodników konfiguracji. Prawdopodobnie możesz znaleźć przewodnik dla konkretnego systemu operacyjnego i zobaczyć wszelkie szczegóły, które mogą powiedzieć.
Jeśli spojrzymy na RedHat Enterprise Linux 6, zalecany schemat partycjonowania jest następujący:
Zasadą stojącą za wszystkimi tymi zmianami jest zapobieganie sobie wzajemnego wpływu i / lub ograniczenie tego, co można zrobić na określonej partycji. Weźmy
/tmp
na przykład opcje . Mówi to, że nie można tam utworzyć żadnych węzłów urządzeń, nie można stamtąd uruchamiać programów, a bitu set-uid nie można ustawić na niczym. Z samej swojej natury/tmp
jest prawie zawsze dostępny do zapisu na świecie i często jest specjalnym typem systemu plików, który istnieje tylko w pamięci. Oznacza to, że osoba atakująca może użyć go jako łatwego punktu przejściowego do upuszczenia i wykonania złośliwego kodu, a następnie awarii (lub po prostu ponownego uruchomienia) system wyczyści wszystkie dowody. Ponieważ funkcja/tmp
nie wymaga żadnej z tych funkcji, możemy łatwo wyłączyć funkcje i zapobiec takiej sytuacji.Miejsc składowania dziennika,
/var/log
i/var/log/audit
są rzeźbione przy pomocy buforu do nich z wyczerpaniem zasobów. Dodatkowo, skontrolowany może wykonywać pewne specjalne czynności (zwykle w środowiskach o wyższym poziomie bezpieczeństwa), gdy jego magazyn danych zaczyna się zapełniać. Po umieszczeniu go na partycji wykrywanie zasobów działa lepiej.Aby być bardziej szczegółowym i zacytować
mount(8)
, to są dokładnie to, co powyżej używane opcje:Z punktu widzenia bezpieczeństwa są to bardzo dobre opcje do poznania, ponieważ pozwolą ci na ochronę samego systemu plików. W wysoce bezpiecznym środowisku możesz nawet dodać tę
noexec
opcję/home
. Utrudni to zwykłemu użytkownikowi pisanie skryptów powłoki do przetwarzania danych, powiedzmy analizowanie plików dziennika, ale także uniemożliwi im wykonanie pliku binarnego, który podniesie uprawnienia.Należy również pamiętać, że domyślnym katalogiem głównym użytkownika root jest
/root
. Oznacza to, że będzie w/
systemie plików, a nie w/home
.Dokładnie ile dajesz każdej partycji może się znacznie różnić w zależności od obciążenia systemu. Typowy serwer, którym zarządzam, rzadko wymaga interakcji użytkownika i dlatego
/home
partycja wcale nie musi być bardzo duża. To samo dotyczy,/var
ponieważ ma tendencję do przechowywania raczej ulotnych danych, które są często tworzone i usuwane. Jednak serwer WWW zwykle używa/var/www
jako swojego placu zabaw, co oznacza, że albo musi on znajdować się na osobnej partycji, albo/var/
musi być duży.W przeszłości zalecałem następujące wartości podstawowe.
Należy je przejrzeć i dostosować zgodnie z celem systemu i sposobem działania środowiska. Poleciłbym również korzystanie z LVM i nie przydzielanie całego dysku. Umożliwi to łatwe powiększanie lub dodawanie partycji, jeśli takie rzeczy są wymagane.
źródło
noexec
Obserwacja jest ważna w ogóle - jest uważane za dobre praktyki do montażu/tmp
znoexec
flagą, aby uniknąć rootkity złośliwych użytkowników, przesyłając przez exploitów zabezpieczeń przeglądarki. Podobnie/home
jest często montowany,nosuid
ponieważ nie ma powodu, aby istniały binaria setuid. Re:/dev
inoexec
na wielu (choć nie wszystkich) współczesnych systemach/dev
jest częstodevfs
system plików i nie pozwala użytkownikom na tworzenie / przechowywanie zwykłych plików (na FreeBSD zwraca „Operation not supported
”, na Ubuntu, na którymudev
zamontowany system plików/dev
pozwala tworzyć zwykłe pliki. )./tmp
jako padu skokowego jest świetną zabawą, ponieważ zawsze tam jest i prawie nigdy nie jest zablokowane.Ignorując leżącą u podstaw macierz RAID ( zobacz to pytanie, aby uzyskać więcej informacji na temat poziomów macierzy RAID i kiedy chcesz ich użyć ), skoncentrujmy się na głównym pytaniu, jakie zadajesz :
„Jak mam rozplanować systemy plików mojego serwera Unix?”
Co jest nie tak z jedną wielką
/
partycją?Jak zauważyłeś w swoim pytaniu, wiele dystrybucji Linuksa (szczególnie dystrybucji „Desktop”, takich jak Ubuntu) używa bardzo prostego układu systemu plików:
/
i[swap]
.Ten schemat ma tę zaletę, że jest prosty - jest świetny dla użytkowników DOS / Windows, którzy są przyzwyczajeni do swojego domowego komputera z „dyskiem twardym” jako jednym dużym monolitycznym pojemnikiem (
C:\
), do którego wrzucasz rzeczy i nie musisz się martwić na temat braku miejsca w systemach plików - upewnij się, że nie masz dostępu do pojemności dysku i wszystko jest (przynajmniej teoretycznie) w porządku.Schemat pojedynczego systemu plików ma jednak kilka wad - najczęściej wymienianą wadą jest to, że systemy uniksowe reagują bardzo źle, gdy główny system plików zapełnia się (do momentu odmowy uruchomienia) i jeśli wszystko pisze do
/
(root) jeden niepoprawny program lub użytkownik może zdjąć cały system.Pojedynczy duży system plików jest również podatny na całkowitą utratę w przypadku awarii systemu i późniejszego uszkodzenia systemu plików.
Powyższe problemy oraz silne poczucie organizacji powodują, że serwery Unix zwykle mają wiele systemów plików.
Jak rozkładasz system plików Unix?
Mam nadzieję, że jesteś przekonany, że posiadanie wielu systemów plików ma sens. Pytanie brzmi: w jaki sposób dzielisz system na logiczne części i jak decydujesz, ile miejsca dostaniesz?
Odpowiedź brzmi: wiesz i rozumiesz, co twój system operacyjny zamierza umieścić. Punktem wyjścia do tego zrozumienia jest
hier
strona man. Większość systemów uniksowych pochodzi (man hier
z systemu Linux iman hier
BSD ), a to plus twoja lokalna wiedza na temat tego, co zrobisz instalowany kod , poprowadzi cię w tworzeniu rozsądnego układu partycjonowania.Mam zamiar opisać tutaj ogólny schemat partycjonowania, ale ten schemat powinien zawsze być modyfikowany, aby spełnić Twoje specyficzne potrzeby.
Ogólny schemat partycjonowania Unixa
Specjalne systemy plików
źródło
/usr
lub/var
nie pomaga, jeśli/
jest uszkodzony. Podobnie nienaruszony/
nie pomaga (dużo), jeśli/home
jest uszkodzony. W obu przypadkach musisz przywrócić dane z kopii zapasowej. Nie wspominając o takich awariach, które są na milion, chyba że używasz nowego / niestabilnego fs.Praktyka tworzenia takiego systemu plików pochodzi z dni, w których nie było nalotu na oprogramowanie, a dyski były małe, więc trzeba było użyć kilku z nich, a zatem jedynym sposobem na to było rozbicie systemu plików i umieść różne katalogi na różnych dyskach. Innym historycznym powodem było to, że można łatwo odmontować partycję i
dump
wykonać kopię zapasową, czego nie można zrobić z rootem. To narzędzie w większości wypadło obecnie z faworyzowania i zamiast tego można go używać w migawce LVM nawet w katalogu głównym.Nie ma już żadnego powodu, aby to robić. Jedynym powodem, dla którego warto to zrobić, jest na przykład zapobieganie
/tmp
zapełnieniu całego dysku.Ten powód jest obecnie w dużej mierze nieistotny, ponieważ udowadnianie użytkownikom ogólnego dostępu do powłoki poszło na marne, a dziś serwery obsługują dedykowane usługi, takie jak serwery sieciowe lub pocztowe. Ponieważ nie masz losowych użytkowników zdolnych do uruchamiania dowolnych poleceń, zazwyczaj nie musisz się martwić, że próbują zapełnić system plików (a nawet wtedy, gdy to zrobiłeś, miałeś przydziały dysku, aby to zatrzymać).
Jeśli chodzi o to, jakiego poziomu rajdu użyć, musisz pamiętać, że głównym celem rajdu nie jest ochrona danych (do tego służą kopie zapasowe), ale utrzymanie czasu sprawności. Jeśli włączysz
/tmp
raid0, twój serwer nadal będzie działać i będziesz musiał go naprawić, jeśli jeden z dysków ulegnie awarii. Możesz także użyć raid10 zamiast raid1, aby uzyskać lepszą wydajność.Bardzo dobrym powodem, aby NIE rozbijać systemu plików, jest to, że jeśli źle przydzielisz alokacje, możesz skończyć z zapełnieniem części systemu plików, pomimo dużej ilości wolnego miejsca w innym miejscu. Korekta tego może być trudna, chyba że użyjesz LVM i nie pozostawisz trochę nieprzydzielonego miejsca.
źródło
dump
, tworzenie kopii zapasowych różnych części fs nie musi znajdować się na różnych partycjach. Ulepszenia nie dbają w ten czy inny sposób. Obrazowanie również nie jest dobrym sposobem na robienie różnych rzeczy.Wiele informacji o partycjonowaniu zostało wygenerowanych, gdy brakowało miejsca na dysku. W rezultacie zobaczysz stosunkowo małe partycje dla wielu przypadków. Wymagane rozmiary partycji różnią się w zależności od użycia serwera. Najbardziej zmienna bywają
/tmp
,/var
,home
,/opt
, i/srv
./usr
ma zwykle rozsądny i stabilny rozmiar. Miejsce na/
może obejmować dowolną lub wszystkie inne partycje i ich wymagania dotyczące miejsca. Rozmiar jest naprawdę zależny od tego, co robisz w systemie.Chciałbym zwiększyć
swap
i zamontować/tmp
natmpfs
. Państwo/tmp
użyje swap sklepie podkładu, ale pamięć użycia jako dostępne. Twój rozmiar/tmp
wygląda na bardzo wysoki, ale poradzi sobie z przerwanym przesyłaniem, które nie zostało wyczyszczone.Rozważałbym przeniesienie plików MySQL do
/srv
. Jest to stosunkowo nowy poziom w hierarchii dysków.Jeśli nie znasz swoich ostatecznych wymagań, rozważ użycie LVM i rozszerzenie partycji jako uzupełnienie.
źródło
/tmp
może być wymagana duża przestrzeń.tmpfs
i spodziewasz się, że trafisz swap jako sklep z zapleczem, powinieneś mieć „wystarczającą” ilość swapów, aby spełnić twoje wymagania tmpfs, a także odpowiednią rezerwę dla systemu. (Nie jest to coś, o czym zwykle myślę, ponieważ jedyny system, w którym korzystam,tmpfs
jest skonfigurowany tak, aby nie uruchamiać wymiany, ponieważ ma nadwyżkę pamięci RAM i używam tymczasowej przestrzeni dla małych plików, które szybko się tworzą / usuwają :)W zależności od architektury - możesz nie chcieć używać / tmp, ponieważ jest usuwane po każdym ponownym uruchomieniu. Jeśli Twoja witryna zajmuje się ostatecznym przetwarzaniem przesłanych plików, pomysłem może być zmiana jej na inną lokalizację (za pośrednictwem php.ini); w którym możesz ustawić dowolny punkt montowania.
Jak sugerowano wcześniej, zdecydowanie zaleca się stosowanie LVM i zwiększanie w razie potrzeby.
Gorąco polecam także dedykowaną partycję dla danych MySQL (nadal możesz ją zamontować w katalogu / var / lib / mysql).
źródło
/tmp
może nie być później - oszczędza to później nieprzyjemnych niespodzianek :-)