Skrypt pokazujący status dowolnych usług na dowolnej ilości serwerów

Wpis zamieszczony o 17:39:01, 19 marca 2007 - 10 komentarzy


Czytając techbloga natknąłem się na taki oto wpis. Rozwiązanie ciekawe, ale niezbyt efektywne. Postanowiłem podzielić się swoim sposobem - wydaje mi się on ciekawszy i co najważniejsze - lepszy. Możemy sprawdzać dowolną ilość usług na dowolnych serwerach.

LINK DO SKRYPTU
A tutaj można podejrzeć jak on się sprawuje.

Czytaj dalej : 10 komentarzy

Efektywna praca z konsolą w Linuksie cz.2

Wpis zamieszczony o 17:15:39, 19 marca 2007 - 21 komentarzy


Mój poprzedni wpis dotyczący poprawy wydajności pracy pod konsolą spotkał się z dość ciepłym przyjęciem, postanowiłem więc kontynuować ten temat i przedstawić Wam 5 kolejnych narzędzi, bez których żyć nie potrafię. Jeśli któregoś z nich nie będziecie mogli znaleźć w Waszym systemie - skorzystajcie ze znanych już Wam narzędzi jak apt-cache, apropos (pierwsza propozycja na dziś) i innych. Wszystkie są dostępne w repozytoriach Ubuntu i Debiana.



1. Jaka to była komenda...

W czasie pracy w konsoli może nam się zdarzyć zapomnieć o jakiejś komendzie, znamy jednak jej zastosowanie. Możemy sobie z tym bardzo prosto poradzić. Wpisujemy
$ apropos {słowo klucz}
Gdzies {słowo klucz} to słowo, które jest powiązane z działaniem komendy. Dla przykładu - gdy szukamy polecenia, które umożliwia nam sprawdzenie miejsca na dysku wpisujemy:
$ apropos disk
aby zawęzić "grono podejrzanych" możemy zastosować standardowe narzędzia i otrzymujemy:

[16:31:44] root@orion:/serwer/konta/download# apropos disk | grep usage
df (1)               - report file system disk space usage
quota (1)            - display disk usage and limits
quotacheck (8)       - scan a filesystem for disk usage, create, check and repair quota files

Nic prostszego. Przecież nikt z nas nie zna na pamięć wszystkich potrzebnych komend. :-)


2. Co mi tyle miejsca zajmuje..

Z czasem wszyscy zaczynamy z przerażeniem patrzeć na ilość zajętego miejsca na naszej głównej partycji. Wartość ta jakkolwiek duża by nie była partycja w którymś momencie zaczyna nas niepokoić. Stosuję wtedy szybki chwyt aby zobaczyć co gdzie i czemu mi zabiera tyle miejsca. Komenda:
$ du -h -c --max-depth=1 zwraca nam w całkiem przystępnej formie ilość zajętego miejsca w każdym katalogu poczynając od miejsca wykonania polecenia. W ten sposób, zaczynając od / możemy sprawdzić, co tak naprawdę zabiera najwięcej wolnego miejsca i spróbować się tego pozbyć. Nie raz nie dwa sposób ten pozwolił mi zaoszczędzić godziny poszukiwań. Polecam!


3.Alternatywa dla fdisk'a

Nie potrafię obsługiwać fdiska. Przyznaję się bez bicia. To toporny i nieintuicyjny program. Po co mi męczyć się z tym programem.. Mam przecież coś lepszego!
# cfdisk
Nigdy w życiu nie widziałem lepszego zarządcy partycji dla Linuksa. Używam go regularnie od kilkudziesięciu tygodni i sprawdza się po prostu znakomicie. Zdaję sobie sprawę, że partycjonowania nie wykonujemy codziennie, jednak posiadanie pod ręką wspomnianego narzędzia w sytuacji "kryzysowej" jest nieocenione.


4.Co mi się dzieje w systemie...

Analiza logów systemowych to temat - rzeka. Za czasów gdy dinozaury przechadzały się po naszej planecie Linuksowcy przeglądali je ręcznie, co sprytniejsi grepowali, awkowali, sedowali i co się tam jescze dało. Po co?
# logwatch
Po krótkiej chwili na Wasze lokalne (skonfigurowane!) konto mailowe przyjdzie wiadomość w "ludzkim formacie" podsumowująca działanie systemu przez ostatnie 24 godziny (licząc od dnia wczorajszego). Jeśli nie mamy skonfigurowanego konta mailowego możemy wydrukować raport na konsolę - odsyłam do pomocy samego programu. Logwatch jest najlepszym moim zdaniem automatycznym analizatorem logów systemowych. Możliwość pełnego oskryptowania, dodawania swoich własnych modułów, mobilność i prostota użycia przy bardzo dokładnej analizie końcowej - nieocenione. 10/10!


5.Limitowanie upload/download

I ostatnie już narzędzie - trickle. Służy ono do cięcia naszego łącza internetowego dokładnie tak, jak my chcemy. Przykład:
$ trickle -u 1 -d 70 wget -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2
Wywołanie takie spowoduje ściąganie najnowszego dostępnego na chwilę obecną kernela linuksa z prędkością 70KB/s, nigdy wyższą. Możemy dzięki temu uruchomić kilka różnych sesji wget'a i nadal dysponować łączem na przeglądanie np. stron internetowych lub wygodną rozmowę poprzez komunikatory internetowe. Osobiście używam trickle do przeprowadzania transparentnych aktualizacji na swoim serwerze. Użytkownicy nawet nie widzą spadku wydajności a system spokojnie się update'uje. Wygodne :-)

Na dziś to tyle. Jak zwykle:

Enjoy!

Czytaj dalej : 21 komentarzy

Poważna luka w domyślnych ustawieniach pam.d Ubuntu

Wpis zamieszczony o 04:14:58, 14 marca 2007 - 11 komentarzy


pam.d, czyli Pluggable Authentication Modules to zestaw bibliotek odpowiedzialnych za zarządzanie uwierzytelnianiem usług w systemie Linux. Dzięki niemu przydzielane są odpowiednie uprawnienia dla procesów potomnych sshd czy sposób zarządzania uprawnieniami po zmianie użytkownika poleceniem su.

Dość dawno temu pisałem o fork bomb. Dziś postanowiłem sprawdzić, jak zareaguje mój system na forkbomba. Ustawiłem restrykcyjne zabezpieczenia poprzez /etc/security/limits.conf, zalogowałem się poprzez ssh na nieupoważnionego do wykonywania zmian użytkownika i wykonałem niszczycielską komendę. System przetrwał :-). Zadowolony udałem się na spoczynek, jednak przypomniałem sobie o pewnym kruczku.
Powtórzyłem moje działania, logując sie jednak poprzez komendę "su" na wybranego użytkownika... I zwiesiłem system..

System Ubuntu w domyślnej konfiguracji posiada źle skonfigurowany plik /etc/pam.d/su !
Pozwala to na obejście wszystkich limitów zawartych w pliku /etc/security/limits.conf. Wystarczy, że użytkownik naszego teoretycznie zabezpieczonego serwera wykorzysta po zalogowaniu się komendę "su" omijając w ten sposób nasze misternie skonstruowane limity. Niezabezpieczenie się na tak prosty atak może być fatalne w skutkach dla naszego systemu.

Oto krótki pokaz, w jaki sposób obejść zabezpieczenia systemu Ubuntu.

haxor_pwned@omega:~$ groups
haxor_pwned serwer
haxor_pwned@omega:~$ ulimit -u
10

Użytkownik nie posiada żadnych uprawnień grupowych i należy do grupy "serwer", która narzuca limit 10 procesów.
Załóżmy, że użytkownik haxor_pwned ma kolegę (niech się nazywa gorion, a co mi tam:P:P), który na naszym serwerze posiada konto o mniejszych ograniczeniach (dla przykładu - 20 procesów).

gorion@omega:~$ groups
gorion serwer2
gorion@omega:~$ ulimit -u
20

Jak widzimy, gorion należy do grupy serwer2, której limit został ustalony na 20 procesów. Przeprowadźmy zatem "atak".
Haxor przekazuje hasło naszemu gorionowi, ten loguje się na konto Haxora i...

gorion@omega:~$ su haxor_pwned
Password:
haxor_pwned@omega:/home/testowy2$ groups
haxor_pwned serwer
haxor_pwned@omega:/home/testowy2$ ulimit -u
20

Haxor należący do grupy o mniejszych uprawnieniach posiada uprawnienia konta, z którego nastąpiło przelogowanie! Prawie jak w TVN...

Żarty na bok - to poważna luka w zabezpieczeniach i nie mam zielonego pojęcia, czemu Canonical umożliwia tak nierestrykcyjną politykę pam.d!

Jak się zabezpieczyć? Wszystkiemu winny jest plik:
# vi /etc/pam.d/su
W którym musimy dodać poniższą linijkę.

session    required   pam_limits.so

Od kolejnego zalogowania nasz system zabezpieczeń zacznie działać poprawnie... Wreszcie...

Powyższy artykuł ma na celu ujawnienie problemu i próbę załatania błędu w systemie, nie jest on pokazem umiejętności "hakerskich" ani HowTo "jak skrakować koledze serwera". Polecam sprawdzenie Waszych plików konfiguracyjnych, bo jak widać nie zawsze zabezpieczony = bezpieczny.

Czytaj dalej : 11 komentarzy

Quota dyskowa dla użytkowników

Wpis zamieszczony o 12:39:53, 08 marca 2007 - 8 komentarzy


Zabrałem się w końcu za swój własny serwer. Jedną z pierwszych rzeczy, o które musiałem się zatroszczyć były quoty dyskowe. Jak powszechnie wiadomo użytkownicy mają w zwyczaju wykorzystywać wszystkie dane im możliwości, w moim przypadku zapełnienie 1/3 dysku serwera niezbyt mi sie uśmiecha :). Stworzyłem więc limity danych, które każdy z użytkowników może trzymać w swoim katalogu domowym.
W czasie przeszukiwania internetu natknąłem się na kilkanaście HowTO dotyczących tego zagadnienia. Niestety, jak to zwykle w świeci Linuksowym bywa, większość z nich została napisana kilka dobrych lat temu i porady tam zawarte nijak się mają do obecnych standardów. Dlatego też pojawił się ten artykuł. Do dzieła!

Instalacja i konfiguracja quoty dyskowej w Ubuntu

Zaczynamy od instalacji samej quoty:
# apt-get install quota
Następnie musimy się zastanowić, dla jakiej partycji zaczniemy stosować quotę. W moim przypadku są to dwie partycje stworzone specjalnie dla użytkowników serwera - partycja /dev/hda5 i /dev/hda6. Jak tylko zdecydujemy się na którąś z naszych partycji wyedytujmy plik /etc/fstab:
# nano -w /etc/fstab
I do wybranej przez nas partycji dopiszmy w opcjach montowania usrquota:

UUI(..)17 /home/serwer/konta ext3 defaults,usrquota 0 0
UUI(..)97 /home/serwer/konta2 ext3 defaults,usrquota 0 0

Istnieje pojęcie grpquota, czyli limity dla grup, jednak nie będę zajmował się tym zagadnieniem, nie interesują mnie limity grupowe.
Po dopisaniu odpowiednich wpisów do fstab musimy przemontować partycje na których dokonaliśmy zmian (lub zrestartować komputer).
Otrzymaliśmy zatem wybraną przez nas partycję zamontowaną w trybie quoty. Skonfigurujmy ją zatem!
# quotaon -avug
Polecenie powyższe włączy tryb quoty użytkownika na wybranej przez nas partycji.
Pozostało nam stworzenie dodatkowego pliku startowego do włączania quoty dyskowej:
nano -w /etc/init.d/quota_check_on

if [ -x /usr/sbin/quotacheck ]
then
echo "Sprawdzam quote..."
/usr/sbin/quotacheck -avug
echo " OK "
fi

if [ -x /usr/sbin/quotaon ]
then
echo "Wlaczam quote..."
/usr/sbin/quotaon -avug
fi

# chmod +x /etc/init.d/quota_check_on
# update-rc.d quota_check_on defaults 99
Voila! Nasza quota już działa! Sprawdźmy ją zatem.
Stwórzmy użytkownika, którego katalog domowy będzie zawierał się na stworzonej przez nas partycji z quotą. W moim przypadku ścieżka dostępu dla użytkownika testowy wygląda tak:

testowy@orion:/home/serwer/konta/testowy$  

Gdy stworzymy użytkownika musimy ustawić mu rozmiar quoty dyskowej. Należy zwrócić uwagę, że w tej chwili każdy z naszych użytkowników dysponuje własną, indywidualnie przydzielaną przez nas quotą dyskową. Quotę dla użytkownika ustalamy poprzez:
# edquota [user]
więc w moim przypadku:
# edquota testowy
Pojawia nam się nasz ulubiony edytor :-) z konfiguracją quoty. Krótki opis:

Limity dyskowe user testowy (uid 1003):
  System plików                bloki        miękki     twardy   i-węzły    miękki   twardy
  /dev/hda6                         0          0          0          0        0        0
  /dev/hda5                     10124         70      10125          6        0        0

Takie same reguły dla i-węzłów.
grace time ustalamy za pomocą komendy:
# edquota -t
Jest to czas, w którym użytkownik może przekraczać miękki limit.
Aktywujmy zatem dla naszego użytkownika testowego niską wartość quoty (zgodnie z blokami naszego dysku twardego), przelogujmy się na niego i spróbujmy przekroczyć ustalony limit quoty. Niespodzianka!

$ while [ 1 == 1 ]; do echo $RANDOM >> plik; done
bash: echo: bład zapisu: Disk quota exceeded
bash: echo: bład zapisu: Disk quota exceeded
bash: echo: bład zapisu: Disk quota exceeded

Biedny userek :-)

Mam nadzieję, że w dość jasny sposób opisałem tworzenie quot dyskowych. Sposób użycia pozostawiam Wam. Nieznośny brat zapełniający dysk obrazami gier? Konta dla innych użytkowników? Serwer shellowy.
Ponownie ogranicza tylko wyobraźnia...

Art ten jest pierwszym z cyklu krótkich "HowTo" dotyczących stawiania swojego małego serwera shell//mail//jabber i innych usług. Na początku skupiać się będę na stworzeniu struktury usług, w dalszej części się na bezpieczeństwie serwera, limitach użytkowników itp.
Enjoy!

Czytaj dalej : 8 komentarzy

Toshiba Portégé R111 + Ubuntu

Wpis zamieszczony o 22:17:51, 04 marca 2007 - 16 komentarzy


Jako właściciel Toshiby Portégé czuję się zobowiązany do opisania Mojego Maleństwa.
W sieci nie znalazłem żadnego opisu konfiguracji systemu Linux pod tą cudowną maszynkę. Opiszę sposób uruchomienia wszystkich możliwości tego sprzętu, tak dla swojego pożytku w przyszłości, jak i dla innych. Podobny wpis przygotowałem na wiki Ubuntu. Poradnik ten może być stosowany także dla modelu R100 i w szczególnym przypadku dla R200 (różnica w konfiguracji wi-fi). No to zaczynamy.

Opis sprzętu:


W opisywanym notebooku znajdziemy (z ważniejszych rzeczy):

Pełne lspci: (troszkę ucięte, możliwość zobaczenia całości po zaznaczeniu i skopiowaniu gdziekolwiek)

[21:38:31] night@omega:~$ lspci
00:00.0 Host bridge: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:00.1 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:00.3 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:02.0 VGA compatible controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)
00:02.1 Display controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83)
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)
00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03)
01:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (MOB) Ethernet Controller (rev 83)
01:0a.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)
01:0b.0 CardBus bridge: Toshiba America Info Systems ToPIC100 PCI to Cardbus Bridge with ZV Support (rev 32)
01:0d.0 System peripheral: Toshiba America Info Systems SD TypA Controller (rev 03)
[21:38:51] night@omega:~$ 


Zacznijmy zatem:
CPU - do uruchomienia speedsteppingu potrzebujemy załadowania modułów toshiba_acpi asus_acpi freq_table acpi_cpufreq backlight processor i wszystkich zależnych od nich. Wszystkie one znajdują się domyślnie w jądrze Ubuntu 7.04 i w moim przypadku nie było potrzeby ich ręcznego ładowania. Dodatkowo potrzebujemy pakiet acpid oraz powersaved. Do zarządzania tym wszystkim używam kpowersave.
# apt-get install powersaved acpid kpowersave
Skalowanie częstotliwości procesora odbywa się dynamicznie i bez naszego większego wkładu.
Karta graficzna - uruchomienie i855GM odbywa się poprzez edycję pliku xorg.conf. Skorzystałem z OpenSourceowego sterownika i810, który umożliwia sprzętową akcelerację oraz AIGLX. Dodatkowo musiałem doinstalować pakiet libgl1-mesa-dri
$ sudo apt-get install libgl1-mesa-dri
Po tych zabiegach cieszę się pełną akceleracją i berylem działającym z całkiem zadowolającą prędkością :-).
Karty sieciowe - obydwie karty, ethernet oraz wi-fi działają całkowicie OOTB! Dodatkowo Toshiba umożliwia sprzętowe wyłączenie karty wi-fi małym przełącznikiem znajdującym się na jednym z boków notebooka. Piękna sprawa! Polecam użycie Knetworkmanager, praca z siecią staje się wyjątkowo przyjemna.
Wyświetlacz LCD - po konfiguracji karty graficznej i załadowaniu modułów z punktu pierwszego uzyskujemy programową możliwość zmiany jasności matrycy. Po odpowiedniej i nieskomplikowanej konfiguracji wyświetlacz będzie dynamicznie reagował na zmiany zasilania, przechodząc w z góry zdefiniowane stany zgodnie z obowiązującym profilem.
Bateria - wewnętrza i zewnętrzna bateria działa OOTB wraz z wymienionymi wyżej modułami jądra. System widzi je doskonale. Przykład:

[21:53:37] night@omega:~$ acpi -b
Battery 1: discharging, 100%, 03:35:19 remaining
Battery 2: discharging, 67%, 04:09:45 remaining

Cóż... Czas pracy na dwóch bateriach na profilu "wydajność" jest chyba zadowalający czyż nie? :-)
Touchpad - przeżyłem szok. Xorg7.2 automatycznie skonfigurował urządzenie wskazujące! Działają wszystkie funkcje, włącznie ze scrollem na brzegach itp. Takie OOTB to ja rozumiem!
Dodatkowe klawisze na klawiaturze - nie działają. Nie mam pomysłu jak sprawić aby działały, xev nie widzi ich nawet i nie czyta ich stanu. Trzeba by znaleźc odpowiedni moduł jądra aby zaczęły współpracę. Ja do tej pory nie znalazłem. Klawisze te działają w oparciu o toshiba_acpi. Należy sprawdzić ich wywołania w /var/log/acpid i dane eventy dopisać do odpowiednich (wybranych przez siebie!) poleceń w /etc/acpi/events/klawisze. I pięknie jest :-)
Usypianie, wstrzymanie itp. - pełne OOTB. Działa jak marzenie.

Oto krótki raport poinstalacyjny Jak widać w zasadzie wszystko działa bez żadnej ingerencji użytkownika. Cóż, skoro kupuje się laptopa z wyższej półki, nie jakiegoś ACERa, wymaga się od niego wiele.
Wymagałem i się nie zawiodłem. Jeden z moich najlepszych zakupów w ostatnim czasie. Polecam!

Czytaj dalej : 16 komentarzy

LinkLift