Skrypt pokazujący status dowolnych usług na dowolnej ilości serwerów
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.
Efektywna praca z konsolą w Linuksie cz.2
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!
Poważna luka w domyślnych ustawieniach pam.d Ubuntu
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.
Quota dyskowa dla użytkowników
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
- bloki - obecna przestrzeń dyskowa użyta przez usera
- miękki - "miękki" limit zajętych bloków z wyłączeniem tzw. grace time, czyli czasu pobłażliwości (patrz niżej)
- twardy - ostateczny limit zajętości bloków, grace time nie liczy się.
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!
Toshiba Portégé R111 + Ubuntu

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):
- Procesor Pentium M 1,1GHz z pełnym speedsteppingiem (technologia Centrino)
- 512MB RAM (z możliwością rozszerzenia do 2GB, mój model ma 768MB RAM)
- Kartę graficzną Intel i855GM z akceleracją sprzętową
- Karty sieciowe - przewodowa i bezprzewodowa firmy Intel
- Wyświetlacz 12,1", 1024x768
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!
