PLD Linux Forum Strona Główna PLD Linux Forum
Oficjalne forum dystrybucji PLD Linux

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
MINI-HOWTO - Własne skrypty startowe w PLD
Autor Wiadomość
abramov 

Distro: PLD 3.0
Dołączył: 08 Sty 2011
Posty: 4
Wysłany: 11 Styczeń 2011, 20:10   MINI-HOWTO - Własne skrypty startowe w PLD

Cześć,

Ponieważ to mój pierwszy post na forum, witam wszystkich forumowiczów. Parę słów o mnie. Z PLD zetknąłem się po raz pierwszy w połowie 2006 roku i był to pierwszy Linux, który zagościł na moim komputerze. Korzystałem z niego dość krótko bo około pół roku, ale pozostało mi po nim zamiłowanie do minimalistycznych dystrybucji, które pozwalają (m.in. poprzez mocno modularną budowę pakietów) dostosować system ściśle do moich własnych potrzeb. Na serwerach pracuje głównie z systemami z rodziny BSD (Free i Open), rzadziej Linuksem. Od jakiegoś czasu na nowo zainteresowałem się jednak tym systemem, a ponieważ jak to mówią, stara miłość nie rdzewieje - trafiłem właśnie tutaj ;)

Tworzyłem ostatnio na własne potrzeby skrypty startowe dla PLD, a że czasem lubię zapisywać to co robię, zrobiło się z tego małe how-to. Mam nadzieję, że się komuś kiedyś przyda. Jest ono również dostępne na TEJ stronie.

Pozdrawiam,
Krzysiek
------------------------------------------

I. Wstęp

Poniższe howto opisuje sposób tworzenia bardzo prostych skryptów startowych w systemie PLD Linux (Th). Jako przykład posłuży nam skrypt zarządzający usługą zapory sieciowej IPTABLES. Będzie on obsługiwał podstawowe komendy odpowiedzialne za uruchomienie, zatrzymanie i przeładowanie firewalla oraz sprawdzanie stanu usługi (start-stop-restart-status).

Niniejszy dokument nie jest przewodnikiem po procesie rozruchowym PLD. Nie zawiera szczegółowych informacji dotyczących SysV init, poziomów pracy systemu ani opisów istotnych - z punktu widzenia rozruchu systemu - plików i folderów (np. /etc/sysconfig/*). Ma on za zadanie jedynie pokazać budowę uproszczonego skryptu startowego na bazie, którego można tworzyć własne, bardziej funkcjonalne i bardziej rozbudowane programy.

II. Pliki konfiguracyjne IPTABLES

Na potrzeby tego how-to stworzymy dwa pliki konfiguracyjne zapory i umieścimy je w katalogu /etc/skrypty. Pierwszy z nich - firewall.sh zawiera reguły, które będą wczytywane podczas startu usługi:

Kod:

IPT=/usr/sbin/iptables

# DOMYSLNA POLITYKA
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

# CZYSZCZENIE LANCUCHOW
$IPT -F
$IPT -X
$IPT -F -t nat
$IPT -X -t nat
$IPT -F -t mangle
$IPT -X -t mangle
$IPT -Z

# ACCEPT NA LOOPBACK
$IPT -A INPUT -i lo -j ACCEPT

# KONTROLA STANOW
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# POLACZENIA PRZYCHODZACE
$IPT -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT


Drugi skrypt - stop.sh zawiera reguły odpowiedzialne za zatrzymanie zapory (czyszczenie łańcuchów i ustawienie domyślnej polityki na ACCEPT):

Kod:

IPT=/usr/sbin/iptables

# DOMYSLNA POLITYKA
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# CZYSZCZENIE LANCUCHOW
$IPT -F
$IPT -X
$IPT -F -t nat
$IPT -X -t nat
$IPT -F -t mangle
$IPT -X -t mangle
$IPT -Z


Ponieważ zestaw reguł nie jest istotny z punktu widzenia tego howto, oba pliki zawierają najprostszą z możliwych konfigurację (pojedynczy host wpuszczający tylko połączenia SSH i icmp echo request).

III. Skrypt /etc/rc.d/init.d/firewall

Skrypty startowe PLD znajdują się w katalogu /etc/rc.d/init.d/. Tam też umieścimy nasz własny skrypt. Możemy to zrobić również w folderze /etc/init.d/, który stanowi dowiązanie symboliczne do wyżej wspomnianego /etc/rc.d/init.d/ :

Kod:
[root@pldvirtual]# ls -l /etc | grep init.d
lrwxrwxrwx  1 root root        11 01-06 12:49 init.d -> rc.d/init.d


Nasz skrypt startowy będzie nosił nazwę firewall. Po jego utworzeniu nie wolno zapomnieć o nadaniu mu atrybutu wykonywalności:

Kod:
[root@pldvirtual]# cd /etc/rc.d/init.d
[root@pldvirtual]# touch firewall
[root@pldvirtual]# chmod ug+x firewall
[root@pldvirtual]# ls -l
razem 120
-rwxr-xr-- 1 root root  1283 12-22 11:51 allowlogin
-rwxr-xr-- 1 root root  2519 2007-01-28  blockdev
-rwxr-xr-- 1 root root  4121 2009-03-23  console
-rwxr-xr-- 1 root root  3353 12-22 11:51 cpusets
-rwxr-xr-- 1 root root  1935 2010-05-24  crond
-rwxr-xr-- 1 root root  4313 12-22 11:51 cryptsetup
-rwxr-xr-- 1 root root     0 01-09 13:11 firewall
-rw-r--r-- 1 root root 29047 12-22 11:51 functions
-rwxr-xr-- 1 root root   757 12-22 11:51 killall
-rwxr-xr-- 1 root root   741 12-22 11:51 local
-rwxr-xr-- 1 root root  4997 12-22 11:51 netfs
-rwxr-xr-- 1 root root  8188 12-22 11:51 network
-rwxr-xr-- 1 root root  1843 12-22 11:51 random
-rwxr-xr-- 1 root root  1549 12-22 11:51 single
-rwxr-xr-- 1 root root  3714 10-20 12:58 sshd
-rwxr-xr-- 1 root root  4233 12-22 11:51 sys-chroots
-rwxr-xr-- 1 root root  3214 12-24 17:47 syslog-ng
-rwxr-xr-- 1 root root  1903 10-31 20:29 timezone


Poniżej, zawartość pliku /etc/rc.d/init.d/firewall:
Kod:

#!/bin/bash

# chkconfig: 345 70 30
# description: firewall - skrypt odpowiedzialny za zarzadzanie usluga IPTABLES

# Wczytywanie biblioteki funkcji zewnetrznych
. /etc/rc.d/init.d/functions

RETVAL=0
prog="firewall"
sub="/var/lock/subsys/firewall"

# Sprawdzanie czy istnieja wymagane pliki konfiguracyjne
# oraz czy sa one wykonywalne
[ -x /etc/skrypty/firewall.sh ] || exit 0
[ -x /etc/skrypty/stop.sh ] || exit 0


start () {
    show "Starting $prog"
    if [ -f $sub ]
    then
        fail
        echo "Firewall juz jest uruchomiony! "
    else
            /etc/skrypty/firewall.sh
        RETVAL=$?
        if [ $RETVAL -eq 0 ]
        then
            touch $sub
            ok
        else
            fail
        fi
    fi
}

stop () {
    show "Stopping $prog"
        /etc/skrypty/stop.sh
    RETVAL=$?
    if [ $RETVAL -eq 0 ]
        then
              rm -rf $sub
              ok
        else
              fail
        fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
    status firewall
    ;;
  *)
        echo $"Usage: $0 {start|stop|restart|status}"
    exit 1
esac

exit $RETVAL


Warto zwrócić uwagę na wpis "# chkconfig: 345 70 30". Program chkconfig odpowiada za dowiązania symboliczne do katalogów /etc/rc.d/rcX.d, gdzie X oznacza poziom uruchomienia sytemu (runlevel). Cyfry 345 mówią chkconfig aby zrobił dla usługi firewall dowiązania symboliczne w katalogu /etc/rc.d/rc{3,4,5}.d (czyli - aby uruchamiał usługę firewall na poziomie pracy systemu równym 3,4 lub 5). Natomiast liczby 70 i 30 wyznaczają odpowiednio: kolejność uruchamiania usługi przy starcie i kolejność jej zatrzymywania przy zamykaniu sytemu. Im wyższa liczba tym późniejszy start lub zatrzymanie usługi.

Dzięki dołączeniu do skryptu pliku systemowego /etc/rc.d/init.d/functions możliwe jest m.in. wykorzystanie w skrypcie poleceń show, ok, fail odpowiedzialnych za "eleganckie" wyświetlanie na terminalu informacji o powodzeniu bądź niepowodzeniu uruchomienia/zatrzymania usługi. Również użyta w skrypcie funkcja status jest zdefiniowana w pliku /etc/rc.d/init.d/functions.

IV. Testy

Poniższa komenda stworzy dowiązania symboliczne do skryptu firewall w odpowiednich katalogach:

Kod:
[root@pldvirtual]# chkconfig --add firewall


Sprawdzamy czy wszystko jest w porządku:

Kod:
[root@pldvirtual]# chkconfig --list | grep firewall
firewall           0:nie    1:nie    2:nie    3:tak    4:tak     5:tak     6:nie

[root@pldvirtual]# ls -l /etc/rc.d/rc3.d/ | grep firewall
lrwxrwxrwx 1 root root 25 01-09 20:37 S70firewall -> /etc/rc.d/init.d/firewall

[root@pldvirtual]# ls -l /etc/rc.d/rc6.d/ | grep firewall
lrwxrwxrwx 1 root root 25 01-09 20:37  K30firewall -> /etc/rc.d/init.d/firewall


Możemy przystąpić do testowania skryptu:

Kod:
[root@pldvirtual]# service firewall start
Starting firewall..................................................[ ZROBIONE ]
[root@pldvirtual]# service firewall start
Starting firewall..................................................[ PROBLEMY ]
Firewall juz jest uruchomiony!
[root@pldvirtual]# service firewall stop
Stopping firewall..................................................[ ZROBIONE ]
[root@pldvirtual]# service firewall status
firewall jest zatrzymany


Poprawność wczytania reguł firewalla możemy sprawdzić poleceniem iptables -nvL.

V. Post scriptum

* Więcej informacji na temat skryptów startowych można uzyskać pod TYM adresem.
* W repozytorium PLD istnieją bardziej zaawansowane i funkcjonalne skrypty służące do zarządzania zaporą sieciową - iptables-init.
 
 
spid3r 

Distro: PLD 3.0
Dołączył: 18 Paź 2010
Posty: 21
Wysłany: 14 Styczeń 2011, 15:12   

W tej chwili jestem dosłownie na 5 minut ale chciałbym podziękować za tekst - właśnie miałem się zabierać za skrypty startowe i nie wiedziałem od czego zacząć. Wieczorem, jeżeli wrócę o rozsądnej porze, obiecuję przeczytać i skomentować ;)
 
 
svl 
paweld


Pomógł: 115 razy
Dołączył: 19 Lis 2006
Posty: 1038
Skąd: Toruń
Wysłany: 14 Styczeń 2011, 18:11   

może lepiej wrzucić to na http://pld-users.org/
_________________
God, root, what is difference?
 
 
shadzik 


Pomógł: 128 razy
Dołączył: 08 Lip 2005
Posty: 1773
Skąd: Berlin
Wysłany: 15 Styczeń 2011, 12:40   

svl napisał/a:
może lepiej wrzucić to na http://pld-users.org/


A sprawdzisz i zweryfikujesz czy ten tekst w ogóle jest poprawny i zgodny ze standardami PLD?
Czy na tej stronie po prostu jest wszystko wrzucane co ktoś napisze?

P.S.
mnie się na przykład nawet nie chce tego czytać :)
_________________
checking for beer in -lfridge... no
Warning: No beer found in fridge!
We highly suggest that you rectify this situation immediately.
 
 
abramov 

Distro: PLD 3.0
Dołączył: 08 Sty 2011
Posty: 4
Wysłany: 15 Styczeń 2011, 15:54   

shadzik napisał/a:
(...) zgodny ze standardami PLD?

Z ciekawości zapytam. Co to są "standardy PLD", jeżeli chodzi o pisanie tekstów? I czego mają dotyczyć? Treści? Formatowania?

shadzik napisał/a:
mnie się na przykład nawet nie chce tego czytać :)

A ktoś Cię zmusza do tego? :)
 
 
shadzik 


Pomógł: 128 razy
Dołączył: 08 Lip 2005
Posty: 1773
Skąd: Berlin
Wysłany: 15 Styczeń 2011, 18:15   

abramov napisał/a:
Z ciekawości zapytam. Co to są "standardy PLD", jeżeli chodzi o pisanie tekstów? I czego mają dotyczyć? Treści? Formatowania?


Poprawność sprowadza się do tego czy tam aby nie bajdurzysz jakichś ciekawych teorii i robisz skrypty startowe wg wyznaczonych w PLD norm. Mamy opisane takie rzeczy gdzieś w CVSie.

abramov napisał/a:
A ktoś Cię zmusza do tego?


A czy ja mówię, że ktoś mnie zmusza? ;)
Nie stwarzaj problemów nadinterpretując moje słowa. Pisząc, że nie chce mi się czytać, miałem na myśli, że... nie chce mi się czytać. Przy czym nie wiem czy Twój opis jest poprawny czy nie, bo go nie czytałem. Może jest poprawny, może nie. Natomiast zanim to gdzieś wyląduje mniej lub bardziej oficjalnie, to wypadałoby żeby to ktoś sprawdził.
_________________
checking for beer in -lfridge... no
Warning: No beer found in fridge!
We highly suggest that you rectify this situation immediately.
 
 
abramov 

Distro: PLD 3.0
Dołączył: 08 Sty 2011
Posty: 4
Wysłany: 15 Styczeń 2011, 20:20   

shadzik napisał/a:
Poprawność sprowadza się do tego czy tam aby nie bajdurzysz jakichś ciekawych teorii i robisz skrypty startowe wg wyznaczonych w PLD norm. Mamy opisane takie rzeczy gdzieś w CVSie.

W takim razie od razu mówię, że pisząc to howto nie myślałem o żadnych standardach PLD dlatego trudno tu mówić o jakiejkolwiek zgodności. Napisałem skrypt startowy na własny użytek, nie na użytek dystrybucji. Jedynie co wiąże go z PLD, to wykorzystanie funkcji predefiniowanych w pliku /etc/rc.d/init.d/functions i nic więcej. Postarałem się jednak aby działał, w przeciwnym wypadku nie wrzucałbym go tutaj ;)

shadzik napisał/a:
A czy ja mówię, że ktoś mnie zmusza? ;)
Nie stwarzaj problemów nadinterpretując moje słowa. Pisząc, że nie chce mi się czytać, miałem na myśli, że... nie chce mi się czytać. Przy czym nie wiem czy Twój opis jest poprawny czy nie, bo go nie czytałem. Może jest poprawny, może nie. Natomiast zanim to gdzieś wyląduje mniej lub bardziej oficjalnie, to wypadałoby żeby to ktoś sprawdził.

Gdybym pytał na poważnie, nie umieszczałbym po znaku zapytania " :) ". Dla mnie byłoby super gdyby ktoś znalazł błędy i niedociągnięcia, jeżeli dzięki temu tekst i sam skrypt miałby być bliższy "standardom PLD". Po to go tutaj publikowałem. Nie myślałem, że ktoś chciałby go zamieścić gdzieś indziej, ale jeżeli już to jest dla mnie oczywiste, że powinien go wcześniej sprawdzić. Dlatego liczę na wszelkie możliwe uwagi.
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 15 Styczeń 2011, 22:23   

Moim zdaniem jako przykład skryptu startowego spełnia "standardy PLD", jedyne nad czym bym się zastanawiał to czy nazwanie katalogu z konfiguracją /etc/skrypty jest "standardowe", ale IMO dla tematu nie ma to większego znaczenia.
_________________
Krystian T.
"Errare humanum est."
 
 
abramov 

Distro: PLD 3.0
Dołączył: 08 Sty 2011
Posty: 4
Wysłany: 15 Styczeń 2011, 23:11   

KrystianT napisał/a:
Moim zdaniem jako przykład skryptu startowego spełnia "standardy PLD", jedyne nad czym bym się zastanawiał to czy nazwanie katalogu z konfiguracją /etc/skrypty jest "standardowe", ale IMO dla tematu nie ma to większego znaczenia.

Zgadzam się, że lepszym miejscem dla nich mogłoby być np. /etc/sysconfig/*, skąd większość skryptów startowych pobiera swoją konfigurację. Zwykle staram się jednak nie umieszczać swoich własnych programów w katalogach systemowych i tworzę dla nich odrębną lokalizację. Ułatwia mi to znacznie sprawę - łatwiej odszukać i łatwiej przenieść skrypty na inna maszynę, niż gdyby miały być rozsiane po całym systemie. Więc to co sam upichcę trzymam w jednym, góra dwóch katalogach.
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group