wtorek, 28 lutego 2012

Linux terminal session live hijacking!

Przepraszam za krzykliwy angielski tytuł ale nie mogłem się powstrzymać :)

Wyobraźcie sobie taką scene:

Oto admin widzi że system spowalnia. Loguje się przez ssh i sprawdza kto jest zalogowany, jakie procesy konsumują czas procesora oraz I/O. Ma podejrzenie, że jest to użytkownik psuj. By sprawdzić co też nasz psuj psuje, mógłby wykonywać co chwile polecenie w oraz obserwować procesy poleceniem top. Chciałby jednak obserwować sesje użytkownika na żywo (on live).

Niestety psuj nie uruchomił programu script, a w systemie również nie mamy innych narzędzi monitorujących. Co powinien zrobić nasz sprytny admin i czy jest w ogóle możliwy taki podgląd? Systemy Unixowe mają ogromne możliwości i zaraz się o tym przekonacie na własne oczy :)

niedziela, 26 lutego 2012

Łatwe prlimit bez prlimit

Ostatnio pisałem w jaki sposób poradzić sobie bez wywołania systemowego prlimit. Okazuje się, że poradzić sobie można nawet jeszcze łatwiej!

Wystarczy znaleźć adress funkcji setrlimit w pamięci naszego procesu

# cat /proc/7747/maps | grep libc
b767f000-b781b000 r-xp 00000000 08:03 64163 /lib/libc-2.15.so
b781b000-b781d000 r--p 0019c000 08:03 64163 /lib/libc-2.15.so
b781d000-b781e000 rw-p 0019e000 08:03 64163 /lib/libc-2.15.so

# printf "0x%x\n" $(( 0xb767f000 + 0x000e06d0 ))
0xb775f6d0

Pamiętajcie, że liczba 0x000e06d0 to oczywiście offset funkcji setrlimit w bibliotece dzielonej libc-2.15.so, który znaleźliśmy ostatnio ;] Teraz wystarczy już tylko:

Prlimit bez prlimit!

Chwile czasu mnie nie było, więc teraz postaram się trochę nadrobić zaległości w blogowaniu :)

Kto słyszał już o nowej funkcji systemowej Linuksa, prlimit? Wywołanie to pozwala na zmianę nałożonych wcześniej limitów (np. ograniczenie czasu procesora, otwartych plików) dla już działającego procesu. Niby nic takiego ale jednak. Umożliwia to tuningowanie parametrów pracy serwera bez potrzeby restartu serwisów. Administrator systemu nie musi już ostrzegać o niedostępności usług, lub wysłuchiwać skarg użytkowników, gdy chce przydzielić np więcej czasu procesora dla serwera Apache.

Wszystko ładnie pięknie, ale jest to rozwiązanie które jeszcze nie weszło na dobre do systemu i nie wiadomo kiedy zacznie się pojawiać w stabilnych wersjach Linuksa. Czy do tej pory nie można było zmieniać limitów bez prlimit i restartu? Oczywiście że tak!