[#] Forkbomb - destabilizacja systemu (ulimit)

( Ostatnio zmieniony wt., 10/06/2008 - 02:39 )
 

Jeśli administrujesz serwerem z systemem Linux, powinieneś przyjrzeć się uważnie temu co mogą zrobić w nim użytkownicy.

Ostrzeżenie:
Nie uruchamiaj tego skryptu w powłoce systemowej! Jeśli nie ustaliłeś odpowiednich ograniczeń system może przestać odpowiadać lub nawet zawiesić się.

Fork-bomba

:(){ :|:& };:

Jak się przed tym zabezpieczyć?

Komendy ulimit i sysctl umożliwiają określenie limitów zasobów systemowych, które mogą zostać użyte w różnych warunkach. Takie ograniczenia są bardzo ważne i mogą w zasadniczy sposób ułatwić administrację, np. kiedy użytkownik uruchamia dużą liczbę procesów, czyni system mniej responsywnym i utrudnia korzystanie z niego przez innych użytkowników.

Aby zobaczyć jak wyglądają aktualne ustawienia limitów, wykonaj:

ulimit -a

### ubuntu 7.04
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) unlimited
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


### Ubuntu 8.04

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8125
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8125
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Jak widać na powyższym Ubuntu 7.04 nie nakłada limitów na większość ustawień. Istotną z punktu widzenia naszego problemu (forkbomb) jest zmienna max_users_pro­cesses, która jest nieograniczona. Oznacza to, że dowolny użytkownik może wykonać dowolną liczbę procesów (a tym samym ładnie zadziała forkbomb'a). Wszystkie powyższe ustawienia mogą być zmienione.

Celem działania skryptu forkbomb, jest utworzenie maksymalnej możliwej liczby procesów, co może doprowadzić do zawieszenia systemu jeśli nie wprowadzono odpowiednich ograniczeń ulimit:

Ustawinianie limitu liczby procesów

ulimit -u 30
ulimit -a
...
max user processes     (-u) 30
...

Teraz jeśli spróbujesz uruchomić nasz skrypt, powinien on zadziałać, ale szybko zobaczymy komunikat o błędzie „fork: resource temporarily unavailable“. Oznacza to że system nie pozwolił skryptowi na uruchomienie kolejnych procesów. Inne opcje polecenia ulimit mogą pomóc w uniknięciu podobnych problemów, ale przy ustalaniu limitów powinieneś być bardzo ostrożny – ustawienie zbyt małej wartości np. data seg size może nawet uniemożliwić start powłoki systemowej!

Twoja ocena: Brak Średnio: 5 (2 głosy)

Dodaj nową odpowiedź

Informacja:

Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich, mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Upewnij się, że twoja wypowiedź nie godzi w niczyje mienie.

  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <strong> <blockquote> <code>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

Łapirobot
Proszę odpowiedzieć
H
f
e
a
n
4
F
K
S
b
Enter the code without spaces and pay attention to upper/lower case.