Szerver info

2012.01.15 10:45


Az alábbi egyszerű szkript arra szolgál, hogy olyan információkat gyűjtsön az adott gépről, amivel szükség esetén a beállítások és a konfiguráció egyszerűen visszaállítható legyen. A szkript cron-ból fut és az információk összegyűjtését követően az egészet átmásolja a mentő szerverre.
Főleg virtuális szerverek (VM) esetén van haszna, hiszen ezeknél nem evidens pl a processzor és a memória mennyisége.
Értelem szerűen az adatok mentéséről külön kell gondoskodni,

#!/bin/bash

OUTDIR=/etc/scripts
OUTFILE=$OUTDIR/host.info
DATE=`date +%F`
DATE_FOURWEEKSAGO=`date -d '4 weeks ago' +%F`
HOST=`hostname`

RUN() {
    echo -e "\n------------------------------\n\t$*\n------------------------------\n"  >> $OUTFILE 2> /dev/null
    $* >> $OUTFILE 2> /dev/null
}

if [ ! -d "$OUTDIR" ]
then
    mkdir -p $OUTDIR
fi

echo > $OUTFILE

RUN date +%F-%R
RUN hostname
RUN hostname -f
RUN uname -a
RUN cat /etc/issue
RUN getent passwd
RUN getent group
RUN free
RUN ip a
RUN fdisk -l
RUN mount
RUN df -ah
RUN pvdisplay
RUN vgdisplay
RUN lvdisplay
RUN cat /proc/cpuinfo
RUN dpkg -l
RUN dpkg --get-selections


tar -zcf /var/backups/etc.$HOST.$DATE.tar.gz /etc/
scp /var/backups/etc.$HOST.$DATE.tar.gz $HOST@backup:/backup/$HOST/
rm -f /var/backups/etc.$HOST.$DATE_FOURWEEKSAGO.tar.gz

Hozzászólások száma: 0
Kulcsszavak: backup, mentés, Linux, script, szkript, host, info, bash, cron

Az óra mindig legyen pontos!

2011.12.18 10:34


Az alábbi parancs- összállítással egy lépésben telepíthető az ntp csomag és az óránkénti szinkronizáció:

apt-get install -y ntpdate && echo -e '#!/bin/bash\n\nntpdate-debian -sb' > /etc/cron.hourly/ntp && chmod +x /etc/cron.hourly/ntp && cat /etc/cron.hourly/ntp

Hozzászólások száma: 0
Kulcsszavak: ntp, Linux

Icinga és NConf telepítése chroot-olt környezetbe

2011.11.27 14:00

Icinga, NConf, chroot

A chroot-olt környezet egy nem szokványos megoldás, legalábbis hálózat monitorozás szempontjából nem. Én azért döntöttem ez mellet, mert így ezt a szolgáltatást szükség esetén egyszerűen át lehet helyezni másik gépre. Esetemben egy régi szerverre telepítem, de már tervben van egy új szerver telepítése és oda a szolgáltatások költöztetése.

A chroot-olt (chrooted) környezet egy alaprendszerből indul ki, ami egy alap rendszerből áll, mindenféle szolgáltatás nélkül. Erre fogom felépíteni a rendszert. A chrooted környezetben lesz webszerver, de nem ez lesz az elsődleges, így ezt más porton kell használni. Kelleni fog MySQL is, de ebből is elég egy...

Alaprendszer telepítése


Az alap rendszert a /var/chroot/monitoring alá építem fel, a debootstrap segítségével. Ezzel a megoldással elrérő rendszereket is össze lehet állítani, például esetemben Debin Lenny „hostra” Squeeze-t fogok telepíteni:

# mkdir -p /var/chrooted/monitoring
# apt-get install debootstrap

# debootstrap squeeze /var/chrooted/monitoring/ http://ftp.hu.debian.org/debian

/etc/fstab aljába az alábbi sorokat felvesszük:

proc /var/chrooted/monitoring/proc proc defaults 0 0
sysfs /var/chrooted/monitoring/sys sysfs defaults 0 0

majd mount -a -val csatoljuk fel.

# cp /etc/hosts /var/chrooted/monitoring/etc/
# cp /etc/mtab /var/chrooted/monitoring/etc/mtab
# ln -s /dev/ /var/chrooted/monitoring/dev/

A chroot paranccsak lehet „átlépni” a chrooted környezetbe:

# chroot /var/chrooted/monitoring/
# apt-get update
# apt-get install apache2 build-essential libgd2-xpm-dev mysql-client-5.1 libdbi0 libdbi0-dev libdbd-mysql psmisc
# apt-get clean

Icinga telepítése

Néhány szót az Icinga-ról


Az Icinga a népszerű Nagios szupportőrjeinek egy, a Nagios-ra épülő és vele teljesen kompatibilis folk-ja. A fejlesztése folyamatban van ,így várhatók benne újítások. Felmerül a kérdés, hogy miért van rá szükség, hiszen a Nagios már bizonyított.
Itt található egy részletes táblázat ami a fontosabb funkciók szerint összehasonlítja az Icinga Classic ,Icinga New Web és a Nagios Core-t:

https://www.icinga.org/nagios/feature-comparison/

A Nagios XI nincs itt felsorozva, mert az fizetős változat

A telepítés menete

# useradd -m icinga
Állítsunk be erős jelszót a felhasználónak:
# passwd icinga
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# groupadd icinga-cmd
# usermod -a -G icinga-cmd icinga
# usermod -a -G icinga-cmd www-data

A lefordítani kívánt csomagokat a /usr/src/-be töltjük le.

# cd /usr/src
# wget http://kent.dl.sourceforge.net/project/icinga/icinga/1.5.1/icinga-1.5.1.tar.gz
# tar xvzf icinga-1.5.1.tar.gz
# cd icinga-1.5.1
# ./configure --enable-idoutils –with-command-group=icinga-cmd
# make all
# make fullinstall
# make install-config
# cd /usr/local/icinga/etc
# cp idomod.cfg-sample idomod.cfg
# cp ido2db.cfg-sample ido2db.cfg

A /usr/local/icinga/etc/icinga.cfg fájl végéhez hozzáadjuk az idoutils moduljának támogatását:

# echo "broker_module=/usr/local/icinga/bin/idomod.o config_file=/usr/local/icinga/etc/idomod.cfg" >> /usr/local/icinga/etc/icinga.cfg

A „Host” gépen van a MySQL szolgáltatás, így itt kell létrehozni az adatbázist, felhasználókat...

# mysql -u root -p
mysql> CREATE DATABASE icinga;
mysql> GRANT USAGE ON *.* TO 'icinga'@'localhost' IDENTIFIED BY 'icinga' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
mysql> GRANT SELECT , INSERT , UPDATE , DELETE ON icinga.* TO 'icinga'@'localhost';
mysql> FLUSH PRIVILEGES ;
mysql> exit
#mysql --defaults-file=/etc/mysql/debian.cnf icinga < /var/chrooted/monitoring/usr/src/icinga-1.5.1/module/idoutils/db/mysql/mysql.sql

A /usr/local/icinga/etc/ido2db.cfg fájl következő sorait szerkeszteni kell (ugye erős jelszót állítottunk a felhasználónak?):

db_host=127.0.0.1
db_name=icinga
db_user=icinga
db_pass=icinga

térjünk vissza a /usr/src/icinga-1.5.1/ könyvtárba

# cd /usr/src/icinga-1.5.1/
# make install-cgis
# make install-html
# make install-webconf
# htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin
New password:
Re-type new password:
Adding password for user icingaadmin

A későbbi egyszerűbb üzemeltetés miatt a /etc -ben is jelenítsük meg az icinga konfigját:

# ln -s /usr/local/icinga/etc/ /etc/icinga

Nagios pluginok telepítése

A hivatalos telepítő leírás az alábbi módon javasolja a Nagios plugin-ok előkészítését, de ezt a csomagtelepítővel és némi drótozással is meg lehet oldani

# cd /usr/src
# wget http://ignum.dl.sourceforge.net/project/nagiosplug/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz
# tar xvzf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --prefix=/usr/local/icinga --with-icinga-user=icinga --with-cgiurl=/icinga/cgi-bin --with-htmurl=/icinga --with-nagios-user=icinga --with-nagios-group=icinga
# make install


NConf telepítése


Az Nconf-ról néhány szót

Az NConf eredetileg a Nagios-hoz készült webes konfiguráció szerkesztő alkalmazás. Segítségével egyszerűen és gyorsan konfigurálhatjuk a monitorozó rendszerünket. Mivel a Nagios és az Icinga konfigurációja megegyezik, így használható a folkhoz is. Az Nconf MySQL-ben tárolja a konfigurációt

Az Icingahoz használható további konfiguráció szerkesztő / generáló alkalmazásokról itt lehet többet olvasni:

https://www.icinga.org/2011/11/17/addons-for-icinga-configuration-interfaces-tools/

A telepítés menete

# apt-get install php5 php5-mysql
# apt-get clean
# cd /usr/local/
# wget http://heanet.dl.sourceforge.net/project/nconf/nconf/1.2.6-0/nconf-1.2.6-0.tgz
# tar xvzf nconf-1.2.6-0.tgz
# cd nconf
# chown www-data -R config output static_cfg temp
# cp /usr/local/nconf/config.orig/* /usr/local/nconf/config/

mysql szerveren:

mysql> CREATE DATABASE nconf;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON `nconf`.* TO 'nconf'@'localhost' IDENTIFIED BY 'nconf';
Query OK, 0 rows affected (0.03 sec)
mysql> FLUSH PRIVILEGES ;
Query OK, 0 rows affected (0.06 sec
# mysql -unconf -peephooK9 nconf < /var/chrooted/monitoring/usr/local/nconf/INSTALL/create_database.sql

chrooted környezetben néhány fájl szerkesztésre szorul:

A /usr/local/nconf/config/mysql.php következő sorait írjuk át:
define('DBHOST', "127.0.0.1");
define('DBNAME', "nconf");
define('DBUSER', "nconf");
define('DBPASS', "nconf");

Ha chroot-olt környezetben dolgozunk, a MySQL kapcsolódás nem fog menni, ha localhost-ot használunk, át kell írni 127.0.0.1-re. (Nem vagyok benne biztos, talán azért, mert localhost esetén socke-en kommunikál?)

/usr/local/nconf/config/nconf.php
define('NCONFDIR', "/usr/local/nconf");
define('NAGIOS_BIN', "/usr/local/icinga/bin/icinga");

Majd:
# chmod +x /usr/local/icinga/bin/icinga

Így mindenki futtathatja a fájlt.

Érdemes az NConf-hoz is autentikációt állítani, ez a legegyszerűbb:
/usr/local/nconf/config/authentication.php
define('AUTH_ENABLED', "1");
define('AUTH_TYPE', "file");

# cp /usr/local/nconf/config.orig/.file_accounts.php /usr/local/nconf/config/
/usr/local/nconf/config/.file_accounts.php
admin::valami::admin::Administrator::

Nincs szükségünk a telepítő fájlokra:
# rm -rf /usr/local/nconf/INSTALL/
# rm -rf /usr/local/nconf/UPDATE/
# rm /usr/local/nconf/UPDATE.php
# rm /usr/local/nconf/INSTALL.php

Automatikus konfiguráció beállítása

Nem túl magyaros szakaszcím. Az a lényege, hogy amikor az NConf-ban a Generate Nagios config parancsra kattintunk, automatikusan létrejön egy tömörített fájl, benne az Icinga (Nagios) konfigurációval. Az NConf-fal kapunk egy egyszerű szkriptet, ami ezt elvégzi automatikusan.

A /usr/local/nconf/ADD-ONS/deploy_local.sh fájlt kell szerkeszteni az alábbiak szerint:
OUTPUT_DIR="/var/chrooted/monitoring/usr/local/nconf/output/"
NAGIOS_DIR="/var/chrooted/monitoring/usr/local/icinga/etc/"

Az utolsó előtti sort pedig át kell írni erre:
/etc/init.d/chroot_icinga reload

A host gép /etc/crontab fájljába a következő képen ütemezve minden 5. percben ellenőrizzük, hogy történt-e konfiguráció generálás:

*/5 * * * * root /var/chrooted/monitoring//usr/local/nconf/ADD-ONS/deploy_local.sh

Icinga és Nconf

Az első futtatást érdemes kézzel csinálni. Ekkor létrejön az Icinga (/etc/icinga, /usr/local/icinga/etc)alatt két fontos könyvtár:
/usr/local/icinga/etc/Default_collector/
/usr/local/icinga/etc/global/
Ezeket kell az Icinga-nak megadni a /usr/local/icinga/etc/icinga.cfg fájl szerkesztésével.
Az összes cgf_file kezdetű sort ki kell kommentelni és az alábbi sorokat felvenni:
cfg_dir=/usr/local/icinga/etc/Default_collector/
cfg_dir=/usr/local/icinga/etc/global/

Nem árt egy kicsit csinosítani az Icingát, a képeket csomagban kapjuk. A következő parancsokkal telepíthetők:
# cd /tmp/
# wget https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Base-Images/imagepak-base.tar.tar –no-check-certificate
# tar fxv imagepak-base.tar.tar
# cp -rv base/ /usr/local/icinga/share/images/logos/

Az Nconf misccommand menüpontja alatt a notify-host-by-email parancssorát az alábbira módosítottam:

/usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -f "MONITORING " -t $CONTACTEMAIL$ -s 127.0.0.1 -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"

A notify-service-by-email parancssorát pedig az alábbira:

/usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -f "MONITORING " -t $CONTACTEMAIL$ -s 127.0.0.1 -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$ is $HOSTSTATE$ **"

Apache beállítás

Apache beállítása a chroot-olt környezetben

Rá kell bírni, hogy a 81-es porton működjön. Ehhez a következőket futtassuk:

# sed -i 's/80/81/' /etc/apache2/ports.conf
# sed -i 's/*:81/127.0.0.1:81/' /etc/apache2/ports.conf
# sed -i 's/443/10443/' /etc/apache2/ports.conf
# sed -i 's/*:80/127.0.0.1:81/' /etc/apache2/sites-enabled/000-default

Létre kell hozni a /etc/apache2/conf.d/nconf fájlt az alábbi tartalommal:

Alias /nconf "/usr/local/nconf/"

Az apache2 újraindítását követően a host gépen tudjuk ellenőrizni így:

# telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
exit
Connection closed by foreign host.

Host webszerverének beállítása

Az átirányításokhoz létrehozuk a /etc/apache2/conf.d/monitoring fájlt:

ProxyRequests Off
SetEnv proxy-nokeepalive 1
ProxyPreserveHost On
ProxyPassInterpolateEnv On
ProxyPass /icinga http://127.0.0.1:81/icinga
ProxyPass /nconf http://127.0.0.1:81/nconf

Szükség van néhány apache modulra:

# a2enmod proxy
# a2enmod proxy_connect
# a2enmod proxy_http

Eztkövetően a /etc/apache2/mods-available/proxy.conf fájlban
deny from all sort kicseréljük allow from all-ra

Szolgáltatás indítás és leállítás beállítása

A „host” gépen célszerű létrehozni három fájlt, amelyek a chroot-olt icinga, idoutils és apache 2 szolgáltatásokatindítják.
# /etc/init.d/chroot_apache2
#!/bin/sh -e
case $1 in
start)
chroot /var/chrooted/monitoring/ /etc/init.d/apache2 start
;;
stop)
chroot /var/chrooted/monitoring/ /etc/init.d/apache2 stop
;;
reload)
chroot /var/chrooted/monitoring/ /etc/init.d/apache2 reload
;;
restart | force-reload)
chroot /var/chrooted/monitoring/ /etc/init.d/apache2 restart
;;
*)
echo "Usage: /etc/init.d/apache2
start|stop|restart|reload|force-reload"
;;
esac

# /etc/init.d/chroot_ido2db
#!/bin/sh -e
case $1 in
start)
chroot /var/chrooted/monitoring/ /etc/init.d/ido2db start
;;
stop)
chroot /var/chrooted/monitoring/ /etc/init.d/ido2db stop
;;
reload)
chroot /var/chrooted/monitoring/ /etc/init.d/ido2db reload
;;
restart | force-reload)
chroot /var/chrooted/monitoring/ /etc/init.d/ido2db restart
;;
*)
echo "Usage: /etc/init.d/ido2db
start|stop|restart|reload|force-reload"
;;
esac

# /etc/init.d/chroot_icinga
#!/bin/sh -e
case $1 in
start)
chroot /var/chrooted/monitoring/ /etc/init.d/icinga start
;;
stop)
chroot /var/chrooted/monitoring/ /etc/init.d/icinga stop
;;
reload)
chroot /var/chrooted/monitoring/ /etc/init.d/icinga reload
;;
restart | force-reload)
chroot /var/chrooted/monitoring/ /etc/init.d/icinga restart
;;
*)
echo "Usage: /etc/init.d/icinga
start|stop|restart|reload|force-reload"
;;
esac

Futtathatóvá kell tenni és gondoskodni az alapértelmezett indításról és leállításáról:

# chmod +x /etc/init.d/chroot_ido2db
# chmod +x /etc/init.d/chroot_apache2
# chmod +x /etc/init.d/chroot_icinga
# update-rc.d chroot_ido2db defaults 98
# update-rc.d chroot_apache2 defaults 99
# update-rc.d chroot_icinga defaults 99
Végül újraindítjuk az összes szükséges szolgáltatást:

# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
# /etc/init.d/chroot_ido2db restart
Stopping ido2db: done.
Starting ido2db: done.
# /etc/init.d/chroot_icinga restart
Running configuration check...OK
Stopping icinga: Stopping icinga done.
Starting icinga: Starting icinga done.
# /etc/init.d/chroot_apache2 restart
Restarting web server: apache2 ... waiting .

A http://domain/icinga/ alatt elérjük a monitorozó alkalmazást
A http://domain/nconf/ alatt pedig a konfiguráció kezelőt


Elkészültünk.

Hozzászólások száma: 0
Kulcsszavak: Icinga, Nagios, Linux, check_host, service, szolgáltatás, Nconf, chroot, MySQL, Debian

Hálózati szolgáltatások feltérképezése

2011.10.26 14:50

 Az alábbi kis szkript segítségével a megadott alhálózat gépeinek hálózati szolgáltatásait lehet feltérképezni egész jó hatásfokkal.
Átalakítva akár Nagios konfig generátort is lehet belőle készíteni...

Természetesen nagy hálózat is feltérképezhető vele, de 32-es netmask-ot megadva egyetlen host ellenőrzésére is alkalmas.

#!/bin/bash
NETWORK=$1
NETMASK=$2
TEMPFILE=/tmp/tmp.$$
RESULT=/tmp/res.$$
if [ ${#1} -eq  0 ] || [ ${#2} -eq 0 ]
then
    echo -e "\n$0 Network Netmask \nPl.: $0 192.168.0.0 16\n"
else
    fping -a -g $NETWORK/$NETMASK > $TEMPFILE 2> /dev/null
    nmap -nsP $NETWORK/$NETMASK  | awk '/Host/ {print $2}' >> $TEMPFILE 2> /dev/null

    for IP in `cat $TEMPFILE | sort -n | uniq `
    do
        echo "=============== $IP ===============" >> $RESULT
        host $IP | awk '{gsub(/3\(NXDOMAIN\)/,"Nincs");print"Domain: " $5}' >> $RESULT
        nmap -PN $IP | grep -E 'open|filtered|cosled' | sed 's/Not shown://' >> $RESULT
    done

    rm $TEMPFILE
    cat  $RESULT
fi

Hozzászólások száma: 0
Kulcsszavak: nmap, fping, network, discover, bash, linux

A Nagios lehetőségei

2011.10.04 10:55

Mi a Nagios?

A Nagios az egyik legelterjedtebb informatikai infrastruktúra monitorozó alkalmazás. Mivel szélesebb körben használják, mint a hozzá hasonló megoldásokat (Zabbix, Groundwork, Zenoss, Icinga, Hyperic, OpenNMS, stb), ezért a fejlesztése sem áll meg. Széles körű felhasználásának köszönhetően az általános igényekre már van kész megoldás, nem jellemző, hogy kiegészítéseket kelljen készíteni hozzá.
A feladata egyszerűen megfogalmazva az, hogy a beállított szolgáltatásokat ellenőrizze, az ellenőrzés során az adott szolgáltatás ellenőrizni kívánt jellemzőjét számszerűsíteni kell és a kapott értéket a megadott szintekhez viszonyítva megkapjuk a szolgáltatás aktuális állapotát.
Ha az ellenőrizett jellemző értéke eltér a megadott szintektől, akkor a beállított feladatot végzi. Ez a feladat lehet értesítés küldése a megfelelő személynek vagy egy program futtatása.
A Nagios két részből áll. Az alsó réteg a Nagios Core, amely a konfiguráció alapján az ellenőrzéseket, értesítéseket, log fájl készítést és rotálást végzi. Ennek működéséhez egy Linux vagy Unix operációs rendszerre van szükség.
A Nagios Core- hoz tartoznak cgi szkriptek, amelyek a webes felület működtetéséért felelősek, ez a második szintje a programnak. Ezek a szkriptek generálják a weboldalakat, ahol az aktuális állapot és az eddigi események követhetők, továbbá ellenőrzések futtathatók. A webes megjelenítéshez az ajánlott webszerver az Apache, de nginx és lighthttpd webszerverrel is működésre bírható.
A webes megjelenítést a Nagios Core-hoz „kapott” felülettől függetlenül más megjelenítők is elláthatják. Az exchange.nagios.org weboldalon több megjelenítő közül választhatunk.
A Nagios Windows-on való futtatására a Nagwin ad lehetőséget, amely a NagiosCore mellett webszervert és egyéb a program futtatásához szükséges kiegészítőket tartalmaz.

Mért van rá szükség?

Azért van létjogosultsága egy ilyen szoftvernek, mert több száz, több ezer gép több tízezer jellemzőjét tudja rendszeres időközönként figyelni. Ezt más módon is meg lehet oldani. Lehetőség van arra, hogy egy arra kijelölt személy ezen szolgáltatásokat az adott gépre bejelentkezve kézzel ellenőrizze, meg lehet oldani, hogy a gép önállóan futtasson saját magán ellenőrzéseket és valamilyen úton jelezze, ha rendellenességet talál. Ezek a megoldások is működnek, de kevésbé hatékonyak, mint az automatizált, előre beállított limit értékekkel futtatott ellenőrzések.

Működési elv

A Nagios felépítése nem túl egyszerű, így eleinte nehéz megérteni a működését, ugyanakkor logikus és kellően rugalmas, hogy a felmerülő igényeket teljesíteni tudja. Működését tekintve a központban a Nagios processz áll. Körülötte a host- ok, ezek olyan, számítógép hálózatra kapcsolt gépek, amelyekhez szolgáltatásokat (service) lehet hozzárendelni. A hostokat célszerű a valós hálózati topológia alapján elrendezni. Ha a valós topológiát követjük a beállításoknál akkor probléma esetén annak okának feltárása és elhárítása is gyorsabb lehet. Például ha egy router megy tönkre, amire több más gép kapcsolódik és a Nagios is ennek megfelelően lett beállítva, akkor ha a hálózati eszköz elérhetetlenné válik, akkor a rá kapcsolt további gépek és azok szolgáltatásai is elérhetetlen (Unreachable) állapotba kerülnek. Így hálózati térképet megnézve rögtön látható, hogy nem a kiszolgálókkal és azok szolgáltatásaival van probléma, hanem a hálózati struktúrában előttük álló eszközzel.
Erre ad lehetőséget, a parent host beállítás, amivel megadható, hogy melyik gép a hálózatban milyen más eszköztől függ.
A szolgáltatások host- hoz vannak rendelve, a host- ok nem csak számítógépek, vagy szerverek lehetnek, hanem szinte bármi, ami IP kommunikációra képes – hálózati nyomtatótól szünetmentes tápegységig.
A szolgáltatások hozzárendelése némely esetben magától értetődő (levelező szerver esetén levelező szolgáltatások figyelése), más esetekben logikai hozzárendelés. (Pl.: annak ellenére, hogy egy webszerver SSL kulcsának lejárati idejét figyeljük, az ellenőrzést nem kötelező a levelező szerverről futtatni.)
A szolgáltatások sem feltétlenül egy kiszolgáló egy bizonyos hálózati szolgáltatását foglalják magukban. Bármi lehet Nagios service, ami számokkal kifejezhető, akár az elmúlt 5 percben a szerverszoba hőmérsékletének változása. Service tehát lehet valamilyen szoftveres állapotváltozás, vagy valamilyen fizikai, a hardvert érintő változás.
A szolgáltatások ellenőrzését plugin-ok végzik. A Nagios mellé az általánosan felhasznált plugin-ok települnek, de speciális ellenőrzésekhez a Nagios társoldalain fellelhetők jól megírt és dokumentált kiegészítések.
Szükség esetén saját plugin is készíthető, mivel a plugin- nal szembeni követelmények elérhetők a Nagios weboldalán.

Állapotok

A host- ok és a service- k az ellenőrzések eredményeként különböző állapotokat vehetnek fel. Gépek esetén a lehetőségek Up, Down, Unreackable. Az első kettő egyértelmű, a harmadik pedig a fenti példánál maradva, akkor következik be, ha a parent host sem elérhető.
Szolgáltatások tekintetében hasonló a helyzet. Állapotukat tekintve a szolgáltatások OK, Warning, Critical és Unknown állapotban lehetnek. Az ismeretlen állapotot akkor veszik fel a szolgáltatások, amikor valami okból kifolyólag az ellenőrző programok a Nagios számára nem értelmezhető értéket adnak vissza.
Minden szolgáltatáshoz beállíthatók különböző paraméterek. A legfontosabb opciók azok, amelyek meghatározzák az adott szolgáltatás aktuális állapotát. Ezeket Warning és Critical limit-nek is nevezik.

Beállítások

Szolgáltatás opciók

További beállítások megadásával lehet szabályozni, hogy milyen időszakban (check period) (Pl. 00:00 és 1:00 között) ellenőrizze az adott szolgáltatást, továbbá a megadott időszakban milyen rendszerességgel (check interval). Abban az esetben, ha a Nagios az ellenőrzés során azt tapasztalja, hogy annak állapota az előzőhöz képest változik (Pl. Valamilyen adatbázisban az aktuálisan futó lekérdezések száma 10-ről 50-re emelkedett), akkor a beállított értékek alapján bizonyos idő elteltével (retry interval) újra ellenőrzi azt a megadott alkalommal (max check attempts). Ha az összes ellenőrzés alkalmával eltérést tapasztal, akkor változtatja a szolgáltatás állapotát. Ez a működés igaz a szolgáltatás „elromlása” és „helyreállása” esetén is.
További beállítások is rendelhetők még egy szolgáltatáshoz, amik az értesítésekkel kapcsolatosak. A szolgáltatás ellenőrzésének időszakától függetlenül lehet beállítani az értesítés időszakát (notification period). Az sem mindegy, hogy kiknek és milyen formában küld értesítést. Ezt a Contactgroup szolgáltatáshoz való rendelésével lehet beállítani. Arra külön figyelmet kell szentelni, hogy milyen állapotokról küldjön értesítést. Egy körültekintően kialakított rendszernél érdemes különválasztani a Warning állapotot a Critical- tól. Például ügyeleti időben elég a felelőst a kritikus állapotról tájékoztatni, amely azonnali beavatkozást igényel, míg a figyelmeztetési szint (warning) olyan állapotot feltételez, amely mellett a szolgáltatás működése nem igényel azonnali beavatkozást. Ilyen eseteknél szükségtelen a szolgáltatás OK állapotról tájékoztatni a felelős személyt, hiszen ő maga tesz intézkedéseket, hogy ezt elérje.
A fent említett ellenőrzési és figyelmeztetési időszakokat Timeperiods néven illeti a szakirodalom. A Timeperiods lehetőségnél megadott időszakok közül lehet választani. Itt heti bontásban lehet megadni időszakokat, egy napra akár többet is.

Contactgroup

A fent említett Contactgroup nagy segítség abban, hogy a megfelelő értesítés a megfelelő személynek jusson el. Szolgáltatáshoz és géphez Contactgroup- ot célszerű hozzárendelni, Contact -ot (kapcsolattartó személyt) közvetlenül nem. Még egy személyt tartalmazó csoportot is célszerű létrehozni, így ha személyi változás történik, akkor a megfelelő személyt a megfelelő csoportba kell elhelyezni, nem kell semmi mást állítani. Egy szolgáltatáshoz vagy géphez több Contactgroup is megadható, továbbá igaz, hogy egy személy több Contactgroup tagja is lehet.

Contacts

Személyenként meg lehet adni, hogy az illetőt milyen, az egész gépet érintő változásról milyen időszakban és milyen módon tájékoztassa a Nagios, ehhez hasonlóan megadható, hogy milyen szolgáltatást állapotváltozásról milyen módon és milyen időszakban adjon jelentést.
Természetesen a felhasználó nevét, email címét és szükség esetén telefonszámát is meg lehet adni.
Meg lehet választani, hogy milyen értesítést küldjön a rendszer. Alapértelmezetten email útján kap jelentést a felhasználó, de igény esetén sms értesítés is beállítható. Ugyan értesítésnek hívják, de beállítható, hogy probléma esetén milyen programot, milyen paraméterekkel futtassa. Beállítható, hogy az állapot változásokról log fájlt készítsen, vagy akár egy programot indítson, argumentumként a gép IP címével vagy gépnevével.

Konfigurációs megoldások

Látható, hogy a Nagios konfigurálása elégé összetett is lehet. A beállításokat fájlokban tárolja és a megadott formázási feltételeknek meg kell felelniük. A könnyebb és átláthatóbb Nagios konfiguráció készítésére sorra készülnek a karakteres és webes felületek. Jó tapasztalataim vannak az Nconf nevű eszközzel, ami egy webes felület, amely adatbázisban tárolja a beállításokat és igény esetén a Nagios számára értelmezhető konfigurációt generál. A logikáját megértve nagyon megkönnyíti a beállítások módosítását, továbbá lehetőséget ad egy kiválasztott gép minden beállításának klónozására, így nagyon gyorsan bővíthető a Nagios- szal felügyelt hálózat.
Nconf
Az Nconf egy webes felületű, PHP-ban íródott alkalmazás. Működéséhez PHP Perl és MySQL szükséges. Linux operációs rendszerre való telepítése ajánlott, de feltehetőleg a szükséges programok telepítését követően Microsoft szoftvereken is használható.
A gyors működés érdekében a felületen található beállítások adatbázisban vannak eltárolva, viszont a Nagios számára a konfigurációt fájlokban adja át, mivel a Nagios csak fájlokból tudja kiolvasni a konfigurációját. Az aktuális állapotot is egyetlen fájlban írja le a Nagios. Ennek köszönhető, hogy a sajátján kívül más webes felület hozzáillesztése is viszonylag egyszerű.

Adatforrások

Közvetlen port ellenőrzés

Attól függően, hogy milyen szolgáltatást szeretnénk ellenőrizni, meg kell választani a legmegfelelőbb módot arra, hogy az ellenőrzést futtassuk. A legegyszerűbb eset, amikor a Nagios-t futtató számítógép egy alhálózatban van az ellenőrizni kívánt gépekkel és annak IP porton történő szolgáltatásait szeretnénk ellenőrizni. Ilyen esetben nem nehéz a feladat, a Nagios-szal kapot pluginok közül a megfelelőt kell futtatni a szükésges paraméterekkel (távoli gép IP címe, warning és critical level). Ilyen ellenőrzésre tipikus eset egy publikus szolgáltatás működésének az ellenőrzése, például SMTP, http szolgáltatások.

SNMP

Egy kicsit összetettebb az ellenőrzés elvégzése, ha nem publikus szolgáltatást, hanem valamilyen aktuális állapotot, például egy switch optikai portjának kimenő forgalmát, annak is az elmúlt 5 perces átlagát szeretnénk monitorozni. Ilyen esetekben az SNMP protokoll segítségére támaszkodhatunk.

Távoli gépek ellenőrzése

Az eddigiek segítségével csak „kívülről” láttunk bele az ellenőrizni kívánt gépbe, de sok esetben ez nem elég, hiszen egy szolgáltatás működésének leállása általában előre jelezhető, ha van lehetőség a kiszolgáló egyéb paramétereit is figyelni (memória, CPU, diszk kihasználtság). Erre több lehetőség kínálkozik. Az elterjedtebb megoldás szerint a Nagios kiszolgáló igény esetén kéri a távoli gépen a szolgáltatás ellenőrzését. Erre a feladatra Linux / Unix esetén az NRPE (Nagios Remote Plugin Executor) alkalmazható, míg Windows esetén az NSClient++ használható. Működésük megegyezik, a Nagios-hoz teljesen hasonló módon, ugyanazon plugin-ok futtatására használható. Egyszerűen megfogalmazva a Nagios szerver és a monitorozandó gép közötti hálózati kommunikációt biztosítja biztonságos körülmények között.
Erre a feladatra egy másik, kevésbé eltredt megoldás is létezik, amikor a monitorozott gép rendszeres időközönként futtaja az ellenőrző pluginokat majd azok eredményéről tájékoztatja a Nagios szerver. Ennek a neve: NSCA (Nagios Service Check Acceptor). Ennek a használatához a Nagios szerverre is telepíteni kell NSCA klienst. Hátránya az előzőekhez képest, hogy váratlan leállás esetén több időbe telik, amíg a Nagios – így annak felhasználói – értesül a problémáról.

Milyen legyen az ellenőrzés eredménye?

Az alábbi kép jól szemlélteti, hogy miként érdemes kialakítani az ellenőrzéseket. Ahogy látható fent azt ellenőrizzük, hogy egy szolgáltatás a kiszolgálón hány példányban fut. Sajnos egy példányban fut, ami biztosan nem jó, hiszen a limit értéket meghaladja. Rövid tájékoztatást kapunk, ami informatiív.
Az alatta lévő probléma már közel sem ennyire nyilvánvaló. Az kiderül, hogy egy Windows eseménynaplóját figyeljük, de a pontos problémát nem látjuk.
 
Az ilyen esetekben érdemes több részre osztani a szolgáltatást. Probléma esetén legyen egyértelmű, hogy mivel van probléma.
Egy ellenőrzés eredménye három részből áll. Egy állapotjelzőből, ami 0-2 értéket vehet fel (0- Ok, 1- Warning, 2 - Critical). A következő része a Status Information. Ez rövid, de egyértelmű leírása problémának. A harmadik rész a Performance Data. Ez nem jelenik meg az összesítő táblázatban, így lehet bőbeszédű. Érdemes a plugin-t úgy kialakítani, hogy a Status Information ne leyen több, mint 100 karakter. A részleteket a Performance Data szakaszban érdemes megadni, ami akár 1000 karakter is lehet.

Mit és hogyan érdemes ellenőrizni?

A fenti kérdés megválaszolása egyáltalán nem egyszerű. Nincs egyértelmű szabályozás arra vonatkozólag, hogy egy kiszolgáló milyen paramétereit kell figyelni. A Nagios üzemeltetése a hosszú telepítés és beüzemelés után még hosszabb finomhangolásról híres.
Érdemes monitorozni a szerverek létfontosságú szolgáltatásait, továbbá olyan paramétereit, amelyek közvetve hatással lehetnek a szolgáltatás működésére. Ilyen például a gép hardver elemeinek állapotát figyelő ellenőrzések, a hálózati kapcsolat meglétét és minőségét figyelő ellenőrzések. Gyakran előfordul, hogy olyan hibával találkozunk, amit előre nem láttunk. Ilyenkor a probléma elhárítását követően tanácsos megtalálni a módját, hogy az ehhez hasonló hibákról először a Nagios küldjön értesítést, ezzel lényegesen felgyorsítható a probléma elhárítása.
Hálózatbiztonsági szempontból hasznos az elérhető és telepítésre váró frissítések számának és meglétének figyelése. Deb csomagokkal működő Linux disztribúciók esetén a check_apt hasznos lehet, míg Windows esetén a check_windows_updates lehet az üzemeltetők segítségére.

Van lehetőség arra, hogy a DHCP szerver mellett futtatott daemon a log fájl alapján összegyűjtse a hálózatban működő gépek MAC címeit, esetleg gépnévvel és IP címmel. Ha ritkán változik a hálózatba kötött gépek száma, akkor a Nagios által lehetőség van új gép megjelenéséről értesülni.

Szintén a hálózatbiztonságot szem előtt alkalmas bármilyen log fájl feldolgozására. Szükség esetén külső programot, szkriptet futtathat, amelynek az eredményét feldolgozva szinte bármit nyomon lehet követni általa.
Összességében elmondható, hogy legyen szó Windows vagy Linux rendszerről, bármilyen programnyelven elkészített külső szkript adhat a Nagios számára értelmezhető választ egy ellenőrzésre. Három értéket célszerű a Nagios-nak eljuttatni:

1.    Az ellenőrzés eredményét: OK, Warning, Critical
2.    Az állapotot leíró rövid, szöveges, lényegre törő értesítés (Status Information)
3.    Nem kötelező, inkább tájékoztató jellegű hosszabb, szintén szöveges leírás, ami további információt ad az ellenőrzésről.

Megfigyelendő paraméterek

A következőkben felsorolt paramétereket érdemes figyelni. Nem bontom szét a listát külön Windows és Linux kiszolgálókra.
Általános paraméterek:
•    Processzor(ok) terhelési adatai
•    Memeória kihasználtság
•    Swap, pagefájl kihasználtság
•    Háttértár szabad kapacitás – minden tárolót külön service-ként érdemes figyelni
•    Folyamatos ping a hálózati kapcsolat állapotának megfigyelésére
•    Hálózati sávszélesség figyelése – ahol érdekes

Hardverrel kapcsolatos ellenőrzések:

•    Hőmérő szenzorok értékének monitorozása (processzor, alaplap, merevlemezek)
•    Hűtőventillátorok működésének ellenőrzése
•    Merevlemezek SMART adatainak figyelése
•    RAID tömbök állapotának ellenőrzése
•    Hálózat minőségének monitorozása (csomagveszteség)

Szoftverrel kapcsolatos ellenőrzések:

•    A kiszolgáló szolgáltatásainak monitorozása legalább „kívülről”
•    Fontos daemonok, szervizek futásának ellenőrzése.
•    Elérhető frissítésekről valamilyen információ gyűjtése
•    Összes futó processz száma
•    Bejelentkezett felhasználók száma


Néhány példa log fájlok feldolgozására Linux rendszerek estén:
Az alábbi felsorolt próbálkozásokat indító távoli gépeket jól konfigurált fail2ban szoftver automatikusan képes tetszőleges időre kitiltani tűzfal szabályokkal. Akár az általa generált tűzfal szabályok száma is mérhető.
•    auth.log – sikeres/sikertelen bejelentkezések száma – általában szótárak alapján különböző feljhasználónevekkel próbálkoznak. Ha sikerült kideríteni, hogy milyen felhasználók vannak akkokr jöhetnek a jelszavak szótárból
•    mail.err – Ip címenként az elmúlt órában hány levelet küldtek olyan felhasználónak, aki nem létezik? – Szótáras próbálkozással megpróbálják kitalálni a létező email címeket, hogy spam listában eladják azokat
•    apache2/error.log – IP címenként hány kérést utasított el a kiszolgáló 404 hibával? – Jellemzően gyakran használt webes programok exploitjait próbálják kihasználni, első próbálkozásként ki kell deríteniük, hogy melyikek vannak telepítve a gépre. (/webmail, /phpmyadmin, stb)
•    syslog – tűzfal által eldobott csomagok száma.

Lehetőségek Windows szerverek vagy munkaállomások esetén:
A Windows eseménynaplóban a bejegyzések különböző Event ID –val vannak ellátva. A Windows naplóbejegyzések általában három csoportra vannak szétosztva: System, Security, Application Ezek a kiszolgálóra telepített szolgáltatásoktól függően továbbiakkal egészülnek ki.
Vannak különböző alkalmazások, amelyek képesek a Windows Event Log- ját csv formátumba exportálni. Így összetettebb ellenőrzésre is lehetőség van.
A Windows eseménynapló monitorozása Nagioson keresztül több lehetőség kínálkozik. A fent említett NSClient++ szolgáltatás telepítése után lehetőség nyílik a CheckEventLog kiegészítést használni, amivel célirányosan kereshető a keresett bejegyzés.
Egy másik lehetőség a Nagios EventLog agent for Windows nevű alkalmazás kell telepítése a megfigyelni kívánt Windows- ra, ahol felhasználóbarát módon lehet létrehozni a szűrési feltételeket.
A Nagios- hoz ez NSCA-n keresztül kapcsolódik, tehát az ellenőrzött gép küld üzeneteket a Nagios szerver felé, nem pedig fordítva. Mivel ez egy Windows szolgáltatás, ha a szűrési feltételeknek megfelelő eseményt talál a naplóban, azonnal értesítést küld a Nagios- nak.

A fent leírt megoldások bármelyikével lehetőség van a Windows események összesítését a  Nagios- ba irányítani. Ha speciális igények (nyomtatás, USB használat, napi mentés befejezésének jelzés stb) merülnek fel, akkor a Windows- on be kell állítani, hogy az esemény az EventLog- ba kerüljön egyedi EventId- val. A szűrést hozzáigazítva szinte bármilyen esemény továbbítható a Nagios- ba. Természetesen mindkét esetben megoldható, hogy milyen időszakra visszamenőleg keressen a Logban és mekkora számú előrefordulás esetén milyen állapotot jelezzen (Pl CheckEventLog futtatásakor a következő limitek adhatók meg: MinWarn, MinCrit, MaxWarn, MaxCrit).
Ha sok eseményről szeretnénk a Nagios- on keresztül értesülni, akkor megfontolandó egy Powershell, .NET vagy más program elkészítése, ami a beállított eseményeket figyeli és valamilyen úton a Nagios felől jövő kérdésre a részletes ellenőrzés eredményét átadja.
Tehát, ha szeretnénk a napi sikertelen helyi és távoli bejelentkezéseket, valamilyen művelet lefutását (pl. mentés), új fájl létrejöttének, változásának megtörténtét, stb. figyelni, akkor vagy mindegyikhez külön ellenőrzést hozunk létre, vagy a Windows-on elvégzett ellenőrzések eredményét adjuk át áttekinthető formában! a Nagios számára. Ilyen esetben fontos megtalálni az egyensúlyt. Mert a fenti képen látható nem egyértelmű hibajelentés lehet a vége.
Példák:
Az elmúlt 30 napban ki és mikor állította le a gépet?
check_nrpe -H 192.168.9.85 -p 5666 -c CheckEventLog  -a filter=new file=system MaxWarn=5 MaxCrit=10 filter-generated=\>30d filter+eventID==1073 "syntax=%strings%  %generated%"                            SIMONTEST, SIMONTEST\Administrator,   Tuesday, August 16, 2011 14:55:11|'eventlog'=1;5;10
Az elmúlt fél évben mikor állították le szabálytalanul a gépet?
check_nrpe -H 192.168.9.85 -p 5666 -c CheckEventLog  -a filter=new file=system MaxWarn=5 MaxCrit=10 filter-generated=\>180d filter+eventID==6008 "syntax=%generated%"
Thursday, April 21, 2011 11:13:48|'eventlog'=1;5;10
Az elmúlt két napból azok a bejegyzések, amelyek hibára utalnak:
./check_nrpe -H 192.168.9.85 -p 5666 -c CheckEventLog  -a file=system descriptions MaxWarn=5 MaxCrit=10 "filter=generated gt -2d AND severity NOT IN ('success', 'informational')"  "syntax=%message%"
The system uptime is 183536 seconds., The system uptime is 269921 seconds., The NSClientpp (Nagios) 0.3.9.322 2011-07-04 x64 service terminated unexpectedly.  It has done this 1 time(s).|'eventlog'=3;5;10
Az elmúlt egy napban a sikertelen bejelentkezések ideje:
file=security descriptions MaxWarn=5 MaxCrit=10 "filter=generated gt -1d AND  message LIKE 'failed to log on'" "syntax=%generated%,"
Al elmúlt két napban bizonyos tartalommal és EventIDval hány bejegyzés volt(mentést végző szkript figyelésére):
file=application descriptions unique MinWarn=1 MinCrit=0 "filter=id = 2 AND source='EventCreate' AND generated gt -2d " "syntax=%message%"

Példák adatbázisok állapotának, kihasználtságának figyelésére.
A legegyszerűbb ellenőrzés az adatbázis szolgáltatás működésének ellenőrzése egy egyszerű, minden adatbázistól független lekérdezés futtatása, például ha select 1+2 lekérdezés nem 3-at ad eredményül, akkor probléma van.
A Mysql 5-ös verziójától kezdve lehetőség van arra, hogy a slow query log magába az adatbázisba kerüljön. A korábbi verziók esetén ez szöveges log fájlba került. Mindkét esetben lehetőség van arra, hogy figyeljük, hogy az elmúlt időszakban volt-e olyan lekérdezés, ami bizonyos rekordszámnál többet adott vissza, vagy egy meghatározott időnél tovább futott. Lehetőség van az összes adatbázis művelet monitorozására, így egy csak olvasásra rendeltetett adatbázis táblába való beszúrás biztosan rendkívüli jelenség.
Hasznos adatokkal szolgálnak a SHOW kezdetű lekérdezések eredménye, ami többek között a kapcsolatok számáról, átmeneti tárolók kihasználtságáról, tábla és rekord -zárolásokról, nyitott fájlokról, adatbázis táblákról, stb. add információt.

A fenti példák MySQL- re értendőek, de valószínűleg más adatbázis-kezelőkhöz is elérhetőek hasonló állapotjelző lehetőségek.
SSL kulcsok lejárati idejének figyelése.
Fontos, hogy a lejárat napján legkésőbb meg legyenek újítva a kulcsok, mivel a szolgáltatás fennakadását okozhatja.
A Nagios-hoz több ilyen tevékenységet végző plugin érhető el, viszont ezek jellemzően valamilyen SSL réteggel kiegészített hálózati szolgáltatás kulcsát ellenőrzik. OpenVPN esetén is fontos a kulcsok kezelése, így ennél is meg kell oldani valahogy a figyelést. Az összes kulcs csak a szerver oldalon érhető el, így ezen az oldalon érdemes az ellenőrzést futtatni. Sajnos nem találtam olyan plugin-t, ami pontosan megfelelne az igényeknek, viszont a következő parancs jó kiindulása lehet egy saját plugin készítésének:
for i in `find /etc/openvpn/ -name *.crt`; do openssl x509 -in $i -noout -enddate | awk '{gsub("notAfter=","");print $4" "$1" "$2}'; done
Ezzel a paranccsal a meghatározott könyvtár certificat fájljainak lejárati idejét OpenSSL segítségével kiíratjuk és feldolgozzuk.

Elosztott ellenőrzésű rendszerek

Egy bizonyos méretű infrastruktúra ellenőrzése után érdemes megfontolni azt, hogy az ellenőrzéseket és azok kiértékelését nem egyetlen Nagios szolgáltatásra bízzuk. Szerencsére léteznek ingyenesen elérhető alkalmazások, amik segítségével az ellenőrzések futtatása elosztott módon történhet, azok eredménye mégis egyetlen felületről ellenőrizhető.
Ezek működése eltér egymástól. A legegyszerűbb az, amikor a távoli Nagios állapotát egyetlen, a központi Nagios-on futó szolgáltatás mutatja. Ez összesített információt gyűjt a távoli Nagios állapotáról és számokban összesíti azt. Egy másik megoldás a Nagios Core és a szolgáltatások közé beépült modul használata. Ebben az esetben a központi Nagios végez minden ellenőrzést, ám nem közvetlenül, hanem a telepített modulnak adja át a feladatot.
A fent leírt megoldások megpróbálják valamilyen módon megoldani a nagy infrastruktúra ellenőrzésekor jelentkező problémákat, de nem oldják meg azokat.
A tényleges megoldásra, amikor több gép végzi az ellenőrzéseket több lehetőség is kínálkozik ingyenes szoftverek használatával:
•    DNX (Distributed Nagios eXecutor) A probléma egyszerű megközelítése. A Nagios szerverek Master- Slave hierarchiában állnak, a konfiguráció és az ellenőrzések időzítése a Master feladata, az ellenőrzéseket pedig a saját konfigurációval nem rendelkező Slave szerverek végzik. Csak az elvégzett ellenőrzés eredményét közlik a Master kiszolgálóval.
•    MNTOS (Multi-Nagios Tactical Overview System) Sok tekintetben az előző ellentéte. A nem központi szerepben álló Nagios- ok a teljes infrastruktúrának csak egy bizonyos részét ellenőrzik és a központi gépen áttekintést, adnak az általuk ellenőrzött részletről.
•    Nagios Fusion: A Nagios fizetős szoftvere, amely központi képet ad az ellenőrzött hálózatról. A konfiguráció és az ellenőrzések az elosztott szervereken vannak elhelyezve, ez lényegében egy központi felület kibővített lehetőségekkel (több felhasználó, eltérő felület, felhasználók között elosztott infrastruktúra, stb.)

Hozzászólások száma: 0
Kulcsszavak: Nagios, Linux, check_host, service, szolgáltatás

Dovecot kvóta kihasználtság ellenőrzése Nagios-szal

2011.09.07 21:29

Az alábbi check_quota Nagios plugin segítségével a Dovecot maildir-ben tárolt postafiókok  kvóta kihasználtságát ellenőrizhetjük.
Az adatokat a virtuális felhasználók adatait tároló MySQL adatbázisból kérdezi le, a kihasználtságot pedig a maildirsize fájl feldolgozásával kalkulálja. Ez a fájl általában a Maildir könyvtárban van elhelyezve, minden felhasználóé külön-külön. Az első sora a quota értéket tartalmazza, a továbbiak pedig a levelek méretét tárolják, így nincs dolgunk, mint a második sortól kezdődően összegezni a levelek méretét és az első sorban megadott értékhez hasonlítani.
A plugin kimenete a megadott warning vagy critical szintet meghaladó felhasználók neve és a kihasználtásg %-an kifejezve, továbbá a Perfirmance Data értékként az összes fiókhoz tartozó érték.

A pluginban be kell állítani a MySQL adatbázishoz való castlakozáshoz a felhasználónevet, jelszót (esetleg hostnevet). Futásához két argumentumot igényel, az első a Warning, a második a Critical szint százalékban.

Következzen maga a plugin:
#!/bin/bash
WARNLIMIT=$1
CRITICALLIMIT=$2
USERLIST=""
EXIT_STATUS=0
DETAIL=""
OUTPUT=OK
VMDIR=/var/vmail/domain.hu/

for db_user in `mysql -uUSERNAME -p'PASSWORD' DATABASE -e "select maildir from mailbox where active = 1 and maildir like 'domain%' order by maildir;" | tail -n +2`
do
        user=`echo $db_user | sed 's/domain.hu\///' | tr -d "/"`
        if [ -e $VMDIR/$user/maildirsize ]
        then
                QUOTA_LIMIT=`head -n 1  $VMDIR/$user/maildirsize  | awk '{print $1}' | tr -d "S"`
                SUM=0
                for i in `tail -n +2  $VMDIR/$user/maildirsize  | awk '{print $1}'`
                do
                        SUM=`echo $SUM+$i | bc -l`
                done
                USED_PERCENT=`echo "$SUM/$QUOTA_LIMIT*100" | bc -l | cut -c -2 | tr -d "."`
                if [ $USED_PERCENT -gt $WARNLIMIT ]
                then
                        EXIT_STATUS=1
                        OUTPUT="WARNING user over limit:"
                        USERLIST="${USERLIST} $user - $USED_PERCENT%,"
                fi
                if [ $USED_PERCENT -gt $CRITICALLIMIT ]
                then
                        EXIT_STATUS=2
                        OUTPUT="CRITICAL user over limit:"
                        USERLIST="${USERLIST}$user - $USED_PERCENT%,"
                fi
                DETAIL="${DETAIL} $user - $USED_PERCENT%,"
        fi
done

echo "$OUTPUT $USERLIST | $DETAIL"
exit $EXIT_STATUS

Hozzászólások száma: 0
Kulcsszavak: Dovecot, levelezés, IMAP4, SMTP, quot, Nagios, plugin, MySQL

Windows 2008 Könyvtár jogosultságok mentése

2011.09.07 21:14

Az előzőekben bemutattam, hogy kell rsync szolgáltatást telepíteni Windows szerverre.  Sajnos ezzel a megoldással a fájl és könyvtár jogosultságokat nem tudjuk lementeni, de szerencsére van a windowsban beépített alkalmazás ennek a problémának a megoldására.

Az icacls parancs segítségével egy könyvtár (és annak tartalma) jogosultságait le tudjuk menteni és vissza is tudjuk állítani.
Mentés:
icacls c:\windows\* /save AclFile /T

Ekkor az AclFile fájlba menti a jogosultságokat


Visszaállítás:

icacls c:\windows\ /restore AclFile


Visszaállítás az AclFile-ból


Ha egy megosztott könyvtár megosztásánál beállított jogosultságokat is menteni akarjuk, akkor a registry HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Shares
alatti adatokat kell menteni.

A fent leírtak segítségével mentést készíthetünk egy Windows szerver megosztott könyvtárának adatairól és azok jogosultságairól.
Mivel ezt célszerű ütemezni, ezért készítettem egy PowerShell szkriptet, amelyet a feladatütemezőben futtatva a szerver önállóan is meg tudja oldani a feladatot.

Íme a szkript, ami a fenti adatokat lementi és a 30 nappal ezelőttieket törli. Mivel az icacls kimenete elég nagy lehet, ezért érdemes tömörítve tárolni.

$NAPOK_SZAMA=-30
$MENTES_HELY="f:\backup\ACL_BACKUP\"
$LOGFAJL="f:\backup\ACL_BACKUP\ACL_save.log"
$MA= (get-date).ToString('yyyy-MM-dd')
$REGINAP=( get-date ).AddDays($NAPOK_SZAMA).ToString('yyyy-MM-dd')
$REGISTRY_CMD="reg EXPORT HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Shares"

echo "$(get-date) ACL Mentes elkezdodott" >> $LOGFAJL
invoke-expression "icacls f:\kozos\* /save $MENTES_HELY/ACL.$MA /T /C"

echo "$(get-date) ACL tomorites" >> $LOGFAJL
invoke-expression "& 'c:\Program Files\7-Zip\7z.exe' a $MENTES_HELY\ACL.$MA.7z $MENTES_HELY\ACL.$MA"

echo "$(get-date) ACL Mentes vege " >> $LOGFAJL
invoke-expression "del $MENTES_HELY\ACL.$MA"
invoke-expression "del $MENTES_HELY\ACL.$REGINAP.7z"
echo "$(get-date) Regi ACL (ACL.$REGINAP.7z) totolve" >> $LOGFAJL

echo "$(get-date) Registry Mentes elkezdodott" >> $LOGFAJL
invoke-expression "$REGISTRY_CMD $MENTES_HELY\$MA.reg "
echo "$(get-date) Registry Mentes vege " >> $LOGFAJL

invoke-expression "del $MENTES_HELY\$REGINAP.reg"
echo "$(get-date) Registry ($REGINAP.reg) totolve" >> $LOGFAJL

Hozzászólások száma: 0
Kulcsszavak: Windows, Server, 2008, ACL, mentés, backup

Rsync beállítása Windows 2008 szerveren

2011.09.07 20:58


Letölteni, kitömöríteni:
http://www.brentnorris.net/rsync.zip

c:\windows\system32\rsyncd.conf tartalmát módosítani az alábbihoz hasonlóan:
uid = 0
gid = 0
use chroot = false
strict modes = false
hosts allow = backupserver
log file = rsyncd.log
read only = true
secrets file = rsyncd.scrt
transfer logging = yes
#Menteni kivant konyvtarak:
[Kozos]
path = /cygdrive/f/kozos

[Privat]
path = /cygdrive/f/Privat

c:\windows\system32\rsyncd.scrt fájlba az autentikációhoz szükséges adatok - ha kell:
backup:rsyncbackup
Ha nem szeretnél autentikációt, akkor az rsyncd.conf-ba nem kell a secrets file = rsyncd.scrt

Érdemes szolgáltatásként használni, ehhez:
http://www.virtualizationadmin.com/files/autoexnt.zip
letölteni, kicsomagolni, majd
c:\windows\system32\autoexec.bat fájlt létrehozni az alábbi tartalommal:

rsync --config=c:\windows\system32\rsyncd.conf --daemon
exit

SERVMESS.DLL és AUTOEXNT.EXE fájlokat is áthelyezni a c:\windows\system32\ könyvtárba
Start - Futtatás - CMD - Ikonra jobb egérgombbal kattintás, majd Run as Administrator
Futtatni a kitömörített könyvtárban:
INSTSRV.EXE install

Majd az automatikus indítást beállítani:
Sajátgép / Kelezés / szolgáltatások / AutoEXNT indítás típust átállítani automatikusra.

Az utolsó lépés a tűzfal:
Tűzfalon a tcp 873-as portot engedélyezni kell!

Ennyi az egész, ugya nem is bonyolult.

Hozzászólások száma: 0
Kulcsszavak: rsync, backup, mentés, Windows, 2008, Server

MySQL adatbázisok mentése

2011.09.03 11:50

Nemtudom ki hogy van vele, én általában az egész adatbázist, annak minden adatbázisával és táblájával együtt szoktam  menteni.
Persze visszaállításkor valahogy meg kell oldani, hogy csak az a bizonyos adatbázis, esetleg csak egy táblája legyen visszaállítva.
Már azzal megkönnyítem a helyzetem, ha az adatbázisszerverről külön- külön mentem az adatbázisokat, hiszenen így visszaállításkor nem kell a másikakkal foglalkozni, egyszerűbb a helyzet.

Régebben mindig úgy állítottam be a MySQL mentését, hogy létrehoztam egy felhasználót, akinek csak select és lock table jogosultsága volt minden adatbázisra és csak localhoston jelentkezhet be.
Ez körülményes, viszont talán a legbiztonságosabb megoldás.

Ennél egy sokkal kényelmesebb és jól beállított fájl jogosultság után biztonságos  megoldást mutatok. Arra figyelni kell, hogy annak akinek feltétlenül nem szükséges, ne módosíthassa a szkriptet, mert a debian-sys-maint felhasználó adatai megjelenhetnek benne.

Szóval a szkript működése szavakban:
Minden adatbázisról visszamenőleg az előző 14 nap mentését tartja meg.
Első körben lekérdezi a helyi kiszolgálón az adatbázisokat (show databases;) majd először letörli a régi mentést, végül a mysqldump paranccsal mentést készít róla a mai dátummal a fájl nevében. Természetesen tömöríti  a mentést, hiszen nem szabad a háttértárat pazarolni.
Mint látható minden adatbázist lement, kivéve egyet, az information_schema nevűt. Ez ugyanis nem tartalmaz olyan adatot, ami máshol ne lenne elérhető, MySQL metaadatokat tartalmaz.


Következzen maga a MySQL mentést végző szkript:
#!/bin/bash
MAINAP=`date +"%Y-%m-%d"`
REGINAP=`date --date='14 day ago' +"%Y-%m-%d"`
MYCONFIG=" --defaults-file=/etc/mysql/debian.cnf "
MYCONFIG_BACKUP=" --defaults-file=/etc/mysql/debian.cnf --opt -Q  -B "
DIRECTORY=/var/backups
for DBTABLE in `mysql $MYCONFIG -e "show databases" | tail -n +2`
do
        if [ $DBTABLE != "information_schema" ]
        then
                if [ -f $DIRECTORY/mysql_dump.$DBTABLE.$REGINAP.bz2 ]
                then
                        rm $DIRECTORY/mysql_dump.$DBTABLE.$REGINAP.bz2
                fi
                if [ ! -f $DIRECTORY/mysql_dump.$DBTABLE.$MAINAP.bz2 ]
                then
                        mysqldump $
MYCONFIG_BACKUP $DBTABLE -e | bzip2 > $DIRECTORY/mysql_dump.$DBTABLE.$MAINAP.bz2
                fi
        fi
done

Remélem tetszett

Hozzászólások száma: 0
Kulcsszavak: Linux, backup, mentés, script, MySQL, Cron

Központosított mentés rsync- kel

2011.08.13 22:02

Feladat:
Központosított mentési kiszolgáló kialakítása
Elvárások:
  • Rsync- ken alapul és a mentési helyek hozzáadása, eltávolítása könnyen módosítható.
  • A napi mentésről email értesítést küldjön a megadott email címre.
  • A mentés módja az alábbiak szerint működjön:
  • Minden hónap 1- én szinkronizálja a helyi és a távoli adatokat (teljes mentés, a mentési helyen törölje azokat az adatokat, amik már nem elérhetők a távoli szerveren)
  • Minden vasárnap az előző vasárnap óta történt változásokat mentse (teljes mentés)
  • Minden héten hétfőtől szombatig inkrementális mentést készítsen külön könyvtárba
  • Csak az elmúlt két hét mentését tárolja, a régebbit törölje

A fent felsorolt feladatok mindegyikére alkalmas az rsync alkalmazás.
A következőkben először a mentendő kiszolgáló beállításait mutatom be, majd a mentést végző szerver működését.

Mentendő szervereken elvégzendő beállítások:

  • Rsync csomag telepítése
  • /etc/default/rsync fájl szerkesztése, az alábbi tartalom beállítása:
RSYNC_ENABLE=true
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
  • /etc/rsyncd.conf létrehozása. Ez tartalmazza a beállításokat:
use chroot = yes
max connections = 1
uid = root
gid = root
timeout = 600
read only = yes
host allow = backupserver
ignore nonreadable = yes
refuse options = checksum

[etc]
    path = /etc

[boot]
    path = /boot

[varwww]
    path = /var/www

A konfiguráció két jól elkülönülő részből áll. A felső rész a globális beállításokat tartalmazza, ezek minden, az alsó szakaszban beállított elérésekre érvényesek, viszont ha a path alatti sorokba más opciót írunk, akkor az adott szakaszra az itt megadott beállítások lesznek érvényesek.

Például ha azt szeretnénk, hogy a /data könyvtárba rsync-kel is lehessen adatot írni, akkor a következőket kell beállítani:
[data]
   path = /data
   read only = no

Az rsync daemon elindítását (/etc/init.d/rsync start)követően a mentendő szerver beállításaival elkészültünk.

Backup server beállításai

Rsync segítségével teljes biztonsági mentést pl a következő paranccsal végzek:

rsync -avz --size-only szerver1::etc /backup/szerver1/etc

Teljes mentés, a backup szerveren töröljük azokat a fájlokat, amik a mentendő helyen már nem elérhetők:

rsync -avz --size-only --delete szerver1::etc /backup/szerver1/etc

Inkrementális mentés rsync- kel:

rsync -avzm --size-only  --compare-dest=/backup/szerver1/etc  szerver1::etc /backup/szerver1/diff/etc

Kapcsolók jelentése:
-a archiv mód, ami a következőket tartalmazza: rekurzív (r), symlinket symlinkként másol (l), megtartja a jogokat (p), létrehozási időt megtartja (t), a tulajdonos csoport megtartása (g), tulajdonos csoport megtartása (o), ...
-v bőbeszédű mód
-z tömöríti az adatokat a hálózati forgalmazás során
-m törli az üres könyvtárszerkezeteket. Ezt sajnos nem teljesen teszi meg, így ahogy a késöbbiekben is látható, a következő karanccsal törlöm az üres könyvtárakat: find ${DIFF_KONYVTAR[$i]}/ -depth -type d -empty -exec rmdir {} \;
--size-only csak a fájlok méretét veszi alapul, nem a tartalmát - lényegesen meggyorsítja a mentés folyamatát
--delete törli a célhelyen azokat a fájlokat, könyvtárakat, amik nem elérhetők a forrás helyen
--compare-dest az itt megadott helyet veszi etalonnak az inkrementális mentés során
--exclude-from a megadott fájlban soronként felsoroltakra illeszkedő könyvtárakat, fájlokat nem menti

Létrehoztam egy bash shell script- et, ami a fent leírt feladatot elvégzi. A script elején adatokat deklarálok:

TAVOLI_KONYVTAR[1]=szerver1::boot
HELYI_KONYVTAR[1]=/backup/szerver1/boot
DIFF_KONYVTAR[1]=/backup/szerver1/diff/boot
EXCLUDE[1]=""
LOG_FAJL[1]=/backup/log/szerver1.log

TAVOLI_KONYVTAR[2]=szerver1::samba
HELYI_KONYVTAR[2]=/backup/szerver1/samba
DIFF_KONYVTAR[2]=/backup/szerver1/diff/samba
EXCLUDE[2]=/etc/scripts/exclude-szerver1
LOG_FAJL[2]=/backup/log/szerver1.log


Az itt megadott adatok alapján fog a script menteni. Látható, hogy az adatokat tömbökbe vesszük fel. Fontos, hogy a tömb minden indexéhez legyen érték rendelve!
Ezeket az adatokat lehetne valamilyen adatbázisban tárolni és szükség esetén onnan lekérdezni...
Szükség esetén az EXCLUDE változónak is adhatunk értéket, ami egy szöveges fájlra mutat. Az ebben a fájlban soronként felsorolt szövegrészekre illeszked ő fájlokat, könyvtárakat az rsync ki fogja hagyni.
Például ha azt szeretnénk, hogy a log fájlokat és a cache könyvtárat ne mentse, akkor a /etc/scripts/exclude-szerver1 fájlt az alábbi tartalommal kell létrehozni:
*.log
cache
Fontos, hogy felesleges szóközök és egyéb karakterek ne legyenek a fájlban, mert befolyásolják a mentést.
Az adatok beállítását követő rész a script lényegi része, ami a mentést végzi.
A saját szkriptek és konfigurációs fájlok tárolására a /etc/scripts könyvtárat szoktam létrehozni, mert egy kiszolgáló mentésekor jellemzően a /etc könyvtárat mentem és ezekről a saját készítésű dolgokról is célszerű mentést végezni, hiszen alkalmanként sok munkába kerülnek.
Tehát az EXCLUDE adatokat és magát a scriptet is a /etc/scripts- ben tárolom.

Következzen maga mentést végző szkript:

cat /etc/scripts/rsync.sh
#!/bin/bash

TAVOLI_KONYVTAR[0]=szerver1::etc
HELYI_KONYVTAR[0]=/backup/szerver1/etc
DIFF_KONYVTAR[0]=/backup/szerver1/diff/etc
EXCLUDE[0]=""
LOG_FAJL[0]=/backup/log/szerver1.log

TAVOLI_KONYVTAR[1]=szerver1::boot
HELYI_KONYVTAR[1]=/backup/szerver1/boot
DIFF_KONYVTAR[1]=/backup/szerver1/diff/boot
EXCLUDE[1]=""
LOG_FAJL[1]=/backup/log/szerver1.log


TAVOLI_KONYVTAR[2]=szerver1::samba
HELYI_KONYVTAR[2]=/backup/szerver1/samba
DIFF_KONYVTAR[2]=/backup/szerver1/diff/samba
EXCLUDE[2]=/etc/scripts/exclude-szerver1
LOG_FAJL[2]=/backup/log/szerver1.log

TAVOLI_KONYVTAR[3]=szerver1::home
HELYI_KONYVTAR[3]=/backup/szerver1/imap
DIFF_KONYVTAR[3]=/backup/szerver1/diff/imap
EXCLUDE[3]=/etc/scripts/exclude-szerver1
LOG_FAJL[3]=/backup/log/szerver1.log

TAVOLI_KONYVTAR[4]=szerver2::etc
HELYI_KONYVTAR[4]=/backup/szerver2/etc
DIFF_KONYVTAR[4]=/backup/szerver2/diff/etc
EXCLUDE[4]=""
LOG_FAJL[4]=/backup/log/szerver2.log

TAVOLI_KONYVTAR[5]=szerver2::boot
HELYI_KONYVTAR[5]=/backup/szerver2/boot
DIFF_KONYVTAR[5]=/backup/szerver2/diff/boot
EXCLUDE[5]=""
LOG_FAJL[5]=/backup/log/szerver2.log

TAVOLI_KONYVTAR[6]=szerver2::samba
HELYI_KONYVTAR[6]=/backup/szerver2/samba
DIFF_KONYVTAR[6]=/backup/szerver2/diff/samba
EXCLUDE[6]=/etc/scripts/exclude-szerver2
LOG_FAJL[6]=/backup/log/szerver2.log

UTOLSO_MENTES_NAP=14
REGINAP=`date --date="$UTOLSO_MENTES_NAP day ago" +%Y%m%d`
MAINAP=`date +%Y%m%d`
LOGFAJL="/backup/log/rsync.log"
NAPSZAM=`date +%u`
DATUM_NAP=`date +%d`
ADMIN_EMAIL=info@rendszergazda.org.hu

# A meg futo mentest megallitjuk:
pkill 'rsync -azv'

df -h /backup > $LOGFAJL

echo -e "\n`date` ============== Rsync Start ==============" >> $LOGFAJL

if [ $NAPSZAM -eq 7 ] && [ $DATUM_NAP -ne 01 ]
then

#Vasarnap van, nem elseje -> Teljes mentes

    echo "`date` ============== Teljes mentes " >> $LOGFAJL
    for  ((i=0; i<${#TAVOLI_KONYVTAR[*]}; i++ )) do
        SZAMLALO=$((i+1))
        echo "`date` $SZAMLALO / ${#TAVOLI_KONYVTAR[*]} ============== ${TAVOLI_KONYVTAR[$i]}" >> $LOGFAJL
            echo "`date` ============== ${TAVOLI_KONYVTAR[$i]}" >> ${LOG_FAJL[$i]}
        if [ ${#EXCLUDE[$i]} -eq 0 ]
        then
            EXCLUDE_STRING=""
        else
            EXCLUDE_STRING="--exclude-from=${EXCLUDE[$i]}"
        fi
                rsync -azv --size-only $EXCLUDE_STRING= ${TAVOLI_KONYVTAR[$i]} ${HELYI_KONYVTAR[$i]} >> ${LOG_FAJL[$i]}
    done
else
    if [ $DATUM_NAP -eq 01 ]
    then

#Elseje van -> Teljes mentes, torlessel

                echo "`date` ============== Teljes mentes torlessel " >> $LOGFAJL
        for  ((i=0; i<${#TAVOLI_KONYVTAR[*]}; i++ )) do
            SZAMLALO=$((i+1))
                        echo "`date` $SZAMLALO / ${#TAVOLI_KONYVTAR[*]} ============== ${TAVOLI_KONYVTAR[$i]}" >> $LOGFAJL
                    echo "`date` ============== ${TAVOLI_KONYVTAR[$i]}" >> ${LOG_FAJL[$i]}
                        #============== Regi mentes torlese
                        rm -rf ${DIFF_KONYVTAR[$i]}/$REGINAP
                    if [ ${#EXCLUDE[$i]} -eq 0 ]
                    then
                    EXCLUDE_STRING=""
                    else
                            EXCLUDE_STRING="--exclude-from=${EXCLUDE[$i]}"
                    fi
                        rsync -azv --size-only --delete $EXCLUDE_STRING ${TAVOLI_KONYVTAR[$i]} ${HELYI_KONYVTAR[$i]} >> ${LOG_FAJL[$i]}
    done
    else

#Hetfotol szombatig (nincs vasarnap, sem elseje ) -> Inkrementalis mentes

                echo "`date` ============== Inkrementalis mentes " >> $LOGFAJL
        for  ((i=0; i<${#TAVOLI_KONYVTAR[*]}; i++ )) do
            SZAMLALO=$((i+1))
            echo "`date` $SZAMLALO / ${#TAVOLI_KONYVTAR[*]} ============== ${TAVOLI_KONYVTAR[$i]}" >> $LOGFAJL
                        echo "`date` ============== ${TAVOLI_KONYVTAR[$i]}" >> ${LOG_FAJL[$i]}
            #============== Mai naphoz a konyvtar letrehozasa
            if [ ! -d "${DIFF_KONYVTAR[$i]}/$MAINAP" ]
            then
                mkdir -p ${DIFF_KONYVTAR[$i]}/$MAINAP
            fi
                        #============== Regi mentes torlese
                        if [  -d "${DIFF_KONYVTAR[$i]}/$REGINAP" ]
            then
                rm -rf ${DIFF_KONYVTAR[$i]}/$REGINAP
            fi
            #============== Mentunk
            if [ ${#EXCLUDE[$i]} -eq 0 ]
            then
                                EXCLUDE_STRING=""
                        else
                                EXCLUDE_STRING="--exclude-from=${EXCLUDE[$i]}"
            fi
            rsync -azvm --size-only $EXCLUDE_STRING --compare-dest=${HELYI_KONYVTAR[$i]}  ${TAVOLI_KONYVTAR[$i]} ${DIFF_KONYVTAR[$i]}/$MAINAP  >> ${LOG_FAJL[$i]} &&  find ${DIFF_KONYVTAR[$i]}/ -depth -type d -empty -exec rmdir {} \;
        done
    fi
fi

echo "`date` ============== Rsync Finished ==============" >> $LOGFAJL

echo "============== Mai mentes merete: ==============" >> $LOGFAJL
du -sh /backup/*/diff/*/$MAINAP/ | grep -v K >> $LOGFAJL
echo "============== Maradek hattertar : ==============" >> $LOGFAJL
df -h /backup >> $LOGFAJL

mail $ADMIN_EMAIL -s " Rsync mentes $MAINAP " < $LOGFAJL

# Logrotalas
mv $LOGFAJL $LOGFAJL.$MAINAP
rm $LOGFAJL.$REGINAP


A fenti shell script elvégzi a munkát, már csak a rendszeres futtatásról kell gondoskodni. Ehhez az alábbi sort kell beilleszteni a /etc/crontab- ba:
0 19    * * *    root    /etc/scripts/rsync.sh

Így a mentés minden nap 19:00- kor fog elindulni.

Innen letölthető, egy köszönöm, jólesik...

Hozzászólások száma: 2
Kulcsszavak: rsync, backup, mentés, Bash, shell, script, Linux, inkrementális

RAID5 tömbben lévő lemezek számának csökkentése

2011.07.27 13:30

A feladat egy 11+1 lemezből álló RAID5 tömb átalakítása 9+1 lemezes állapotra, mivel egy 3 portos RAID vezérlő megbízhatatlanul működik. Van még egy szabad port, oda helyezem át az egyik lemez kábelét. Ez nem igényel semmilyen módosítást, a gépet le kell állítani és egyszerűen át kell dugni a kábelt.
A másik két lemez eltávolítása sokkal összetettebb, mert a használatban lévő, a RAID5 tömb elemét képező lemezekről van szó.
A következő leírás is ebben a témában íródott, ez alapján oldottam meg a problémát: http://blog.stalkr.net/2009/10/reducing-number-of-devices-in-raid-5.html

A RAID tömbre LVM került és ezen foglal helyet a rendszer:
#ls -1 /dev/filesystem
backup
iscsi
root
swap

A legnagyobb mérete a Backup nevű Logical Volume-nak van, így ennek a méretét csökkentem.

Előkészületek:
Le kell csatolni azt a LV-ot, amelyiken dolgozunk

sync; umount /backup #- ide volt felcsatolva


Ellenőrizzük a fájlrendszert:

#e2fsck -fyv -C 0 /dev/filesystem/backup

Csökkentjük a fájlrendszer méretét a végleges értékre (esetleg egy kicsit kisebbre):

#resize2fs -f  /dev/filesystem/backup 500G

Jöhet az első lemez RAID-ből való kiszabadításának folyamata
Csökkentjük az LVM méretét:

#lvreduce -L501G /dev/filesystem/backup

Beállítjuk a RAID tömb méretét egy lemezzel kisebbre. Ezt úgy számoljuk ki, hogy RAID5-nél a rendelkezésre álló terület az összes lemez területe - egy lemez területe.

# mdadm -Q -D /dev/md1 | grep size
     Array Size : 4882867200 (4656.67 GiB 5000.06 GB)
     Used Dev Size : 488286720 (465.67 GiB 500.01 GB)
     Chunk Size : 512K

Tehát a Array Size- ból ki kell vonni a Used Dev Size méretet, így megkapjuk az egyel kisebb lemezből álló tömb felhasználható méretét.
4882867200  - 488286720  = 4394580480
Ezt az értéket adjuk meg mint array-size

#mdadm /dev/md1 --grow --array-size=4394580480

A RAID tömbből kiveszünk egy lemezt (a --raid-devices-be nem kell beleszámolni a spare diskeket):

mdadm /dev/md1 --grow --raid-devices=10 --backup-file=/root/backup

Ennek hatására az mdadm elkezdi újraszinkronizálni a tömböt, majd ha végez akkor a kivett lemez átkerül spare állapotba
Erről a szinkronizálás alatt és utána a következő parancs ad információt:

#mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Jun 23 10:01:02 2011
     Raid Level : raid5
     Array Size : 4394580480 (4191.00 GiB 4500.05 GB)
  Used Dev Size : 488286720 (465.67 GiB 500.01 GB)
   Raid Devices : 10
  Total Devices : 12
    Persistence : Superblock is persistent

    Update Time : Mon Jul 25 18:11:00 2011
          State : clean, recovering
 Active Devices : 11
Working Devices : 12
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Reshape Status : 0% complete
  Delta Devices : -1, (10->9)

           Name : debian:1
           UUID : 2f4b016c:54c46bf9:0efd1543:b1ae7dbf
         Events : 328

    Number   Major   Minor   RaidDevice State
       0       8       82        0      active sync   /dev/sdf2
       1       8        2        1      active sync   /dev/sda2
       2       8       18        2      active sync   /dev/sdb2
       3       8       34        3      active sync   /dev/sdc2
       4       8       50        4      active sync   /dev/sdd2
      11       8      178        5      active sync   /dev/sdl2
       6       8       98        6      active sync   /dev/sdg2
       7       8      114        7      active sync   /dev/sdh2
       8       8      130        8      active sync   /dev/sdi2
       9       8      146        9      active sync   /dev/sdj2

      10       8      162       10      active sync   /dev/sdk2
      12       8       66        -      spare   /dev/sde2


A második lemez esetén teljesen hasonlóan járunk el (az array-size és a raid-devices változókra kell figyelni)

#lvreduce -L501G /dev/filesystem/backup
#mdadm /dev/md1 --grow --array-size=3906293760
#mdadm /dev/md1 --grow --raid-devices=9 --backup-file=/root/backup1

A szinkronizáció végén így néz ki:

# mdadm --detail /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Thu Jun 23 10:01:02 2011
     Raid Level : raid5
     Array Size : 3906293760 (3725.33 GiB 4000.04 GB)
  Used Dev Size : 488286720 (465.67 GiB 500.01 GB)
   Raid Devices : 9
  Total Devices : 12
    Persistence : Superblock is persistent

    Update Time : Tue Jul 26 21:57:06 2011
          State : clean
 Active Devices : 9
Working Devices : 12
 Failed Devices : 0
  Spare Devices : 3

         Layout : left-symmetric
     Chunk Size : 512K

           Name : debian:1
           UUID : 2f4b016c:54c46bf9:0efd1543:b1ae7dbf
         Events : 10238

    Number   Major   Minor   RaidDevice State
       0       8       82        0      active sync   /dev/sdf2
       1       8        2        1      active sync   /dev/sda2
       2       8       18        2      active sync   /dev/sdb2
       3       8       34        3      active sync   /dev/sdc2
       4       8       50        4      active sync   /dev/sdd2
      11       8      178        5      active sync   /dev/sdl2
       6       8       98        6      active sync   /dev/sdg2
       7       8      114        7      active sync   /dev/sdh2
       8       8      130        8      active sync   /dev/sdi2

       9       8      146        -      spare   /dev/sdj2
      10       8      162        -      spare   /dev/sdk2
      12       8       66        -      spare   /dev/sde2

Ha a szintkronizáció véget ér, akkor ki lehet venni a lemezt a tömbből:

#mdadm -f -r /dev/md1 /dev/sde2
#mdadm -f -r /dev/md1 /dev/sdk2

Ha van másik RAID tömb, abból is ki kell venni a lemezt:

#mdadm -f -r /dev/md0 /dev/sde1
#mdadm -f -r /dev/md0 /dev/sdk1

Ha sok lemez van egy gépben, nem könnyű őket megkülönböztetni. A következő paranccsal ki tudjuk olvasni a lemez széria számát, amit a cimkén is megtalálunk:

#smartctl -i /dev/sde
smartctl 5.40 2010-10-16 r3189 [i486-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint T166 series
Device Model:     SAMSUNG HD501LJ
Serial Number:    S0MUJ2KP925564
Firmware Version: CR100-11
User Capacity:    500,107,862,016 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 3b
Local Time is:    Tue Jul 26 09:35:34 2011 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Ha a csökkentés megtörtént, akkor növelni kell az LVM-et,  de mennyivel?

# pvscan
  PV /dev/md1   VG filesystem   lvm2 [4.55 TiB / 4.52 TiB free]
  Total: 1 [4.55 TiB] / in use: 1 [4.55 TiB] / in no VG: 0 [0   ]

Tehát még 4.52 TB-tal gazdálkodhatunk, egyelőre elég lesz 3Tb a backup LVM-nek. A mostani 501GB-hoz adjunk még 2.5TB-ot:

# lvextend -L +2.5T /dev/filesystem/backup

A végeredmény:

# lvdisplay /dev/filesystem/backup
  --- Logical volume ---
  LV Name                /dev/filesystem/backup
  VG Name                filesystem
  LV UUID                Y7nKXy-zL1O-1626-BtYd-0qQd-YvKr-UhcPmS
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                3.00 TiB
  Current LE             786432
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     16384
  Block device           253:3

 Az LVM-et már megnöveltük, a fájlrendszert is hozzá kell igazítani:

# resize2fs /dev/filesystem/backup

Ha ez is megvan, akkor ismét használhatjuk a backup LV-ot

Hozzászólások száma: 0
Kulcsszavak: Linux, RAID, LVM, Debian, backup

Grub2 grub rescue>

2011.07.27 13:07

Személy szerint a Grub2 bevezetését a Stable Debian verzióba (Squeeze) nem érzem előrelépésnek a Grub-hoz viszonyítva.
Amióta ez megjelent, többet látom a grub> és grub rescue> promptot induláskor, mint előtte összesen.
Előfordul, hogy a telepítőnek sem sikerül egy RAID tömbre, vagy LVM LV-ra megfelelően telepíteni a Grub2-t és a telepítés végén ott áll az ember és tudja, hogy újraindulás után bizony nem egy frissen telepített rendszert kap, hanem egy problémát.
Ha a grub rescue> promt jelenik meg, akkor a legegyszerűbb egy LiveCD után nyúlni. Én a Systemrescue CD-t használom.
A következő példa egy olyan gépen történtek, ahol a /boot könyvtárnak egy RAID1-et hoztam léte, minden más pedig LVM felett lett tárolva.
Az LVM a következő képen néz ki:
# lvscan
  ACTIVE            '/dev/filesystem/swap' [3.72 GiB] inherit
  ACTIVE            '/dev/filesystem/root' [9.31 GiB] inherit
  ACTIVE            '/dev/filesystem/iscsi' [9.31 GiB] inherit
Tehát a felcsatolások így néznek ki:
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/filesystem-root 9.2G  1.9G  6.9G  22% /
/dev/md0                        92M   21M   66M  24% /boot

A probléma egyszerű, a gép indulásakor a grub ugyan elindul - tehát a lemezre, amelyikről indul fel van telepítve a Grub2- de a "no such disk" felirat után a grub rescue> promt jelenik meg.
A következőt tettem:
SystemrescueCd-ről elindítottam a rendszert, ez felismeri és kezeli a RAID tömböket és az LVM-et is.
Miután elindult, előfordul, hogy a RAID tömböket nem olyan sorszámmal jelöli, mint az számunkra ismerős. Célszerű a /dev alatt létrehozni a szimbolikus linkeket az általunk ismert nevekre, tehát:

/dev/md126 -> /dev/md0
/dev/md127 -> /dev/md1
/dev/md126 -> /dev/md/0
/dev/md127 -> /dev/md/1

Ez csak példa!
Ha ez megvan, akkor készítsünk egy könyvtárat ahova felcsatolhatjuk a fájlrendszerünket:

#mkdir/tmp/filesystem

#mount /dev/filesystem/root /tmp/filesystem
#mount /dev/md126 /tmp/filesystem/boot

Ezeket elvileg mindenféle probléma nélkül elvégzi.
Ha a következő parancs kimenete ismerős, akkor jó úton járunk:

#
ls -la /tmp/filesystem/boot

Annak érdekében, hogy lássa a processzeket és az eszközöket, fel kell csatolni őket -o bind opcióval:

#mount -obind /dev tmp/filesystem/dev

#mount -obind /proc tmp/filesystem/proc
#mount -obind /sys tmp/filesystem/sys

Ha ez is megvan, akkor jöhet a chroot.
Előtte érdemes átváltani bash shellre, mert a systemrescue alapértelmezetten a zsh-t használja.
Tehát:

#bash

#chroot /tmp/filesystem

Érdemes ellenőrizni, hogy jó helyen vagyunk-e:

# ls -la /


Ha igen, akkor jöhet a probléma lényegi megoldása:
Az itt (http://blog.timetombs.org/?tag=grub2) található leírás szerint az initramfs-t újra kell generálni - lehet, hogy ezt kihagyva is működik,
Szóval:

#update-initramfs -u -t


Ennek hiba nélkül végig kell futnia - ha nem ír ki semmit akkor jó, ez szokott panaszkodni, ha a RAID tömbünk a Live CD-vel való indulás miatt nem érhető el azon a helyen, ahol telepítéskor.
Ha ez készen van, akkor jöhet a Grub2:

#grub-install --recheck /dev/md0

Ennek a kulcsa a --recheck, ugyanis ezzel a kapcsolóval vesszük rá a telepítőt, hogy nézze végig az eszközöket és a mostani állapotnak megfelelően telepítse a Grub2-t.
Ha ez is végigmegy és a következőhöz hasonlót ír: Installation complete. No error detected akkor készen is vagyunk, a következő indulásnál el kell indulnia.
A error: superfluous RAID member tartalmú sorokat sajnos egy bug eredményezi, remélhetőleg hamar javítják.

Hozzászólások száma: 0
Kulcsszavak: Debian, Linux, Sqeeze, Grub2, RAID, LVM, LiveCD, SystemRescueCD

Netgear Access Point beállítások

2011.07.25 15:21

Nergear WG103-as típus

Érdmes beszerezni egy konfigurációt, amit a webes felszínen állítottunk be, majd azt szerkeszteni.
A fontosabb sorok:
system:basicSettings:apName A_PNEVE
system:basicSettings:adminPasswd erkel1234
system:basicSettings:ipAddr AP_IP_CIME
system:wlanSettings:wlanSettingTable:wlan0:channel AP_CSATORNA_SZAMA
system:basicSettings:netmaskAddr 255.255.255.0
system:basicSettings:gatewayAddr 192.168.100.254

Alapértelmezetten 192.168.0.229 az IP címe (admin / password a belépéshez a felhasználónév és a jelszó)

Kell egy virtuális interfész az eredeti hálózatban
# ifconfig eth1:0 192.168.0.100/24
Egy másik virtuális interfész a beállítások ellenőrzése miatt
# ifconfig eth1:1 192.168.100.100/24Bejelentkezünk a fenti jelszóval
# ssh 192.168.0.229
root@192.168.0.229's password:
[root@netgearA660A8 /root]# cd /tmp/
[root@netgearA660A8 /tmp]# ftpget -u anonymous 192.168.0.100 konf WG103/KONFIG_FAJL_NEVE
[root@netgearA660A8 /tmp]# restore-configuration konf
Ezzel el is végeztük a beállításokat, az AP újra fog indulni.
Ellenőrizzük, hogy működik-e a konfiguráció:
#ping AP_IP_CIME

Netgear WG302 konfigurálása
Alapértelmezett ip cím: 192.168.0.228
ssh admin@192.168.0.228
jelszó: password
Az alábbiakat, legalábbis az alsó sort egyben érdemes bemásolni a konzolba.
Azért körülményes konfigurálni, mert amint másik statikus IP-t kap, azonnal átáll arra és újra be kell jelentkezni az új IP címre.
(a legalsó sor egyben van.)
set ntp status up
set ntp use-default-servers on
set interface wlan0 status up
set radio wlan0 tx-power 100
set radio wlan0 mode b
set radio wlan0 static-channel AP_CSATORNA_SZAMA
set system password UJ_JELSZO
set host id AP_NEVE
set interface wlan0 ssid SSID
set interface brvlan1 static-ip 192.168.100.4 && set interface brvlan1 static-mask 255.255.255.0 && set static-ip-route gateway 192.168.100.254 && save-running && reboot &

A fentiek kiadását követően az AP újraindul és munkára kész.

Hozzászólások száma: 0
Kulcsszavak: Netgear, Access Point, AP, WIFI, SSID

Diskless Linux - TFTP kiszolgáló

2011.07.23 18:08

TFTP szerver

Tftp kiszolgálóra is szükség van, mivel a Diskless Linuxok hálózatról indulnak. TFTP kiszolgálónak az atftpd-t választottam. Eredetileg inetd indítja a szolgáltatás, amikor az UDP 69-es portra érkezik kérés. Ezzel nem voltak jó tapasztalatok, ezért daemon- ként futtatjuk. Konfigurálása három lépésből áll:
  1. A /etc/inetd.conf fájlban a tftp kezdetű sor elé # jelet teszünk
  2. A /etc/default/atftpd fájlt az alábbira módosítjuk:
    USE_INETD=false
    OPTIONS="--daemon --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot"
  3. A /etc/rc.local fájlba az exit 0 sor elé a következő sort illesztjük:
    atftpd –daemon
Sajnos így sem mindig bírható működésre ez a szolgáltatás, ekkor minden szükséges beállítást a /etc/rc.local fájlban indításkor kell neki megadni. Tehát a fenti sor az alábbira változik:

atftpd --daemon --port 69 /tftpboot/

Az egyes gépekhez tartozó pxe konfigurációs fájl, ami a boot folyamatot indítja a /tftpboot/pxelinux.cfg/ fájl alatt található. Induláskor a gépek itt a saját MAC címükhöz tartozó fájlt keresik, ami 01-el kezdődik és a 12 karakteres hexadecimális MAC címet kettes osztásokban kötöjellel választja el egymástól.

Például a 70:71:bc:cd:01:a2 MAC című gép pxe konfigja a 01-70-71-bc-cd-01-a2 fájlban van.

Hozzászólások száma: 0

Diskless Linux - NFS kiszolgáló

2011.07.23 18:03

NFS kiszolgáló telepítése

Mivel a Diskless Linux kiszolgálását is ez a gép végzi, ezért NFS fájl szerverként is üzemel. Az nfs-kernel-server csomag feltelepítését követően (apt-get install nfs-kernel-server) a /etc/exports fájlt kell szerkeszteni:

/nfsroot/ 192.168.0.0/255.255.0.0(rw,no_root_squash,no_subtree_check)

Ebben a fájlban kell megadni, hogy melyik könyvtárakat szeretnénk kiajánlani, melyik IP címeknek vagy hálózatoknak és milyen opciókkal. A/nfsroot könyvtárat ajánljuk ki. Ez a Diskless Linux fájlrendszerét tartalmazza. Az itt elvégzett módosítások után azokat a következő paranccsal tudjuk érvényesíteni:

/usr/sbin/exportfs –a

Nincs szükség a szolgáltatás újraindítására.

Hozzászólások száma: 0

Diskless Linux készítése

2011.07.20 14:42

Egy nagyon hasznos szolgáltatás telepítését mutatom be. Sokszor lehet hasznos egy olyan hálózatról induló linux, ami a hardverek többségét felismeri és kezeli.
A szakirodalom Diskless Linux megoldásként ismeri, a lényege, hogy a hálózatról induló gép a TFTP kiszolgálóról megkapja a PXE konfigurációt, amiben le van írva, hogy milyen NFS kiszolgálóhoz kapcsolódjon.
Az indulás után egy karakteres vagy akár grafikus felületű Linux áll rendelkezésre, ami majdnem olyan gyorsan működik, mintha a gépben önálló HDD lenne.
A telepítés folyamata a következő:
A fájlrendszer számára készítünk egy könyvtárat

mkdir -p /nfsroot/diskless/

A már telepített debootstrap csomag segítségével egy alap fájlrendszert töltünk le, a --include után fel lehet sorolni csomagokat, amiket szeretnénk, hogy a debootstrap töltsön le és állítson be.

debootstrap --include=nfsbooted,dhcp3-client,procps,passwd,vim,less,configure-debian  lenny /nfsroot/diskless/  http://ftp.hu.debian.org/debian  --arch i386

Később az fstab- ban az alábbi könyvtárat adjuk meg, mint csatolási pont

mkdir -p /nfsroot/diskless/.nfsroot

Néhány alapvető fájlt beállítunk:

echo "127.0.0.1       localhost" > /nfsroot/diskless/etc/hosts
echo "diskless" > /nfsroot/diskless/etc/hostname
cp /etc/resolv.conf /nfsroot/diskless/etc/

A fájlrendszer csatolási pontját és az egyéb felcsatolásokat beállítjuk. Sokat lehet gyorsítani a Linux működésén, ha az olyan könyvtárakat, amelyekbe sokat írunk és nem baj, ha elveszik az ideiglenes adat, memóriában tároljuk. Erre jó a tmpfs és a ramfs

echo "NFSROOTDIR=/.nfsroot" > /nfsroot/diskless/etc/nfsbooted/mountfix.conf
cat < /nfsroot/diskless/etc/fstab
/               /.nfsroot       none    bind,ro         0 0
proc            /proc           proc    defaults        0 0
/dev/ram        /tmp            ramfs   defaults,rw,auto,dev            0 0
/dev/ram1       /var/run        ramfs   defaults,rw,auto,dev            0 0
/dev/ram2       /var/state      ramfs   defaults,rw,auto,dev            0 0
/dev/ram3       /var/lock       ramfs   defaults,rw,auto,dev            0 0
/dev/ram4       /var/account    ramfs   defaults,rw,auto,dev            0 0
/dev/ram5       /var/log        ramfs   defaults,rw,auto,dev            0 0
/dev/ram6       /var/lib/gdm    ramfs   defaults,rw,auto,dev            0 0
/dev/ram7       /var/tmp        ramfs   defaults,rw,auto,dev            0 0
/dev/ram8       /var/spool/cups ramfs   defaults,rw,auto,dev            0 0
EOF

Annak érdekében, hogy mindent megfelelően be tudjunk állítani, szükség van az alábbi felcsatolásokra:

mount -obind /proc /nfsroot/diskless/proc/
mount -obind /dev /nfsroot/diskless/dev/
mount -obind /sys /nfsroot/diskless/sys/

A chroot paranccsal a frissen telepített fájlrendszerbe lépünk, majd véglegesítjük a beállításokat.

chroot /nfsroot/diskless/
configure-debian –all
exit

Ezzel az alaprendszert el is készítettük, érdemes róla egy mentést készíteni

tar czf  diskless_diskless.tgz /nfsroot/diskless/

Telepítsünk néhány további csomagot, hogy grafikus felületen is dolgozhassunk. A fenti csatolásoknak működniük kell!.

chroot /nfsroot/diskless/
echo "deb http://ftp.hu.debian.org/debian diskless main contrib non-free" >/etc/apt/sources.list
apt-get update
apt-get install -y xserver-xorg-core gdm gnome-core smbfs mc less ssh

Annak érdekében, hogy az induláskor kapott pxe konfigból ki tudjuk nyerni az ott beállított gépnevet, az alábbira van szükség:

cat < /etc/init.d/sethostname
#!/bin/bash
recoveredName=\`dmesg  |  awk  '/host=/ {gsub(/host=/,"");gsub(/,/,"");print \$3}'\`
hostname \$recoveredName
touch /var/log/dmesg
EOF
chmod +x /etc/init.d/sethostname

Ezt a beállítást tegyük meg a második futási szinten.

ln -s /etc/init.d/sethostname /etc/rc2.d/S99sethostname

Érdemes beállítani az időzónát is:

dpkg-reconfigure tzdata
exit

A fentiekkel jó alapot készítettünk a Diskless Linuxunknak, már csak a kernel modulokat kell rendelkezésre bocsátani, hogy induláskor be tudja tölteni őket.
Ezért az előre elkészített kernelt át kell másolni /nfsroot/diskless/lib/modules/ és a /nfsroot/diskless/boot/ alá.
Azért van szükség új kernel létrehozására, mert nem hagyományos blokk eszközről kell indulnia, hanem NFS fájlrendszerről.
A telepítés folyamatáról és a kernel elkészítéséről az alábbi oldalak nyújtanak részletesebb tájékoztatást:

http://wiki.bolay.net/doku.php?id=operating_systems:linux:debian:nfsboot
http://www.jukie.net/~bart/blog/20070316092236

Hozzászólások száma: 0

Grep jegyzet

2011.05.09 16:11

Mára egy kevés grep tudás jutott:

Konfig fájloknál alkalmanként szükség van rá, hogy a kikommentelt részeket nem szeretnénk látni, csak a konfigurációt magát.
Erre egy lehetséges megoldás:

grep -v "#.*" dovecot.conf

Az így kapott kimenetben sok üres sor is megjelenik, hiszen a konfiguráció üres sorokat is tartalmaz.

Ezeket is kiszűrhetjük az előző példa módosításával:

grep -v "#.*" dovecot.conf | grep -v  "^$"

Ez a parancs átlátható konfigurációt eredményez. Ez nem szép megoldás, hiszen pipe-ot ( | ) és mégegy grep-et is használunk.

A következő példa is jó szolgálatot tehet, segítségével a grep kettő vagy több értékre keres:

 grep -v "#.*" dovecot.conf | grep -v  "^$" | grep -E 'imap|pop'


Hozzászólások száma: 0

IP Bonding - a maximális hálózati sebességért

2010.12.20 15:53

Kiszolgáló hálózati kapcsolatának gyorsítása IP bondinggal.

Két gépet, 4 Realtek hálókártyát és két Vigor switchet használtam. Az egyszerűség kedvéért a System Rescue Live CDt alkalmaztam mindkét gépen.
Mivel ez egy „pehelysúlyú” rendszer, ezért csak NFS kapcsolatot építettem fel a gépek között és így vizsgáltam a sebességet.
Az adatok tárolását a gép memóriájában oldottam meg, így a HDDk sebességét figyelmen kívül hagyhattam.
A próbáknál az adatfolyamot a /dev/zero-ból szedtem, így figyelmen kívül hagyhattam a gépek processzorának teljesítményét

Konfguráció:


Első gép:
modprobe  bonding
ip addr add 192.168.100.10/24 brd + dev bond0
ip link set dev bond0 up
ifenslave  bond0 eth1 eth2
mkdir /mnt/mem
mount -t tmpfs tmpfs /mnt/mem -orw,size=900M
/etc/exports
/mnt/mem  192.168.0.0/255.255.0.0(rw,no_root_squash,no_subtree_check,fsid=1) # az fsid=1 akkor kell, ha nem fizikai lemezzel dolgozunk
exportfs -a
/etc/init.d/nfs restart

Második gép:
modprobe  bonding
ip addr add 192.168.100.11/24 brd + dev bond0
ip link set dev bond0 up
ifenslave  bond0 eth1 eth2
/etc/init.d/nfsmount restart
mkdir /mnt/nfs
mount -t nfs 192.168.100.10:/mnt/mem /mnt/nfs


Próbák:

1. Az első tesztben minden UTP kábel egy switchbe futott be.


root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/128M  bs=1024K count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 7.37597 s, 18.2 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/256M  bs=1024K count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 14.4632 s, 18.6 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/512M  bs=1024K count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 27.2754 s, 19.7 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/768M  bs=1024K count=768
768+0 records in
768+0 records out
805306368 bytes (805 MB) copied, 42.2862 s, 19.0 MB/s


2. A második próbánál két switchet használtam. A két switch nem volt összekötve egymással, viszont mindkét gépből egy-egy kábel ment mindkét switchbe.
 
Látható, hogy a switchnek csak két portját használva, az átviteli sebesség megközelítette az elméleti sebesség határt, vagyis a 2x100Mb-et.

root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/128M  bs=1024K count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 6.02696 s, 22.3 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/256M  bs=1024K count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 11.7297 s, 22.9 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/512M  bs=1024K count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 23.216 s, 23.1 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/768M  bs=1024K count=768
768+0 records in
768+0 records out
805306368 bytes (805 MB) copied, 34.6693 s, 23.2 MB/s

3. A harmadik próbánál is két switchet használtam, viszont ezek össze voltak kötve egymással.
Látható, hogy a sebességet nem befolyásolta az összeköttetés.
Ezzel az összeállítással elkerülhető, hogy a két switchet összekötő portok sebessége csökkentse a hálózat sebességét. Ezt az útvonalat a switchre kötött más gépek használják az egymás közötti kommunikációjuk során – ha a kommunikációban résztvevő gépek nem egy switchre vannak kötve.

root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/128M  bs=1024K count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 6.01984 s, 22.3 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/256M  bs=1024K count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 11.7353 s, 22.9 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/512M  bs=1024K count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 23.1508 s, 23.2 MB/s
root@sysresccd /root % dd if=/dev/zero of=/mnt/nfs/768M  bs=1024K count=768
768+0 records in
768+0 records out
805306368 bytes (805 MB) copied, 34.5867 s, 23.3 MB/s

Konklúzió:
Az IP Bonding segítségével a kiszolgáló hálózati sebessége közel kétszeresére gyorsul (két hálózati kártya használata és 100Mb esetén). Továbbá a switchek közötti forgalom is csökkenthető, így elkerülhető, hogy egy switch egyetlen portján koncentrálódjon a kiszolgáló teljes hálózati forgalma.

Update
Konfigurációval kapcsolatos tapasztalatok

Kétféle konfigurációval próbálkoztam, mindkét konfiguráció működésének feltétele az
ifenslave csomag telepítése
1. megoldás
A bonding modult be kell tölteni a kernelbe. Ennek a modulnak beállításokat kell megadni. Erre az egyik lehetőség a következő sorok felvétele a etc/modprobe.d/arch/i386 fájlba:

alias bond0 bonding
options bond0 mode=5 miimon=100 downdelay=200 updelay=200 max_bonds=2

Ha ez megvan, akkor modprobe bonding és depmod –a után már használatjuk is a bond0 interfészt. A konfiguráció következő lépése a bond0 interfész beállítása. Ezt a /etc/network/interfaces fájlban a következő képen tettem meg:

auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto bond0
iface bond0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.254
up /sbin/ifenslave bond0 eth1
up /sbin/ifenslave bond0 eth0

A hálózat vagy az egész gép újraindítását követően máris működik a bonding. Állapotáról a /proc/net/bonding/bond0 ad információt
2. megoldás
Ez a megoldás kevésbé elegáns, de nem volt vele probléma.
A /etc/rc.local fájlba az exit 0 sor elé a következőket illesztettem:

modprobe bonding mode=5 miimon=100 downdelay=200 updelay=200
depmod –a
ifconfig bond0 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254
ifenslave bond0 eth0 eth1

Az első megoldásnál volt probléma, nem is egyszer. Valami okból kifolyólag az egyik bond0- ban használt interfészt a rendszer átnevezte és csak ifconfig –a paranccsal látszott. Ilyen esetekben ha bonding nélkül indítjuk a gépet, ismét megjelenik az interfész. Emiatt a hiba miatt bár kevésbé elegáns, de biztosabb megoldás a második. Mindkét esetben meg kell adni, hogy milyen módon kívánjuk használni a bond0 interfésznek megadott fizikai interfészeket. 7 módot adhatunk meg az igényeknek megfelelően. Ugyanakkor a módok használhatósága függ a switch- től is, nem minden switch-csel működik, ez a megoldás, erre is volt példa.

Hozzászólások száma: 0

Exchange helyett SOGo 2

2010.12.05 17:39


Az előző leírásban ldap autentikációt mutattam be. Most egy kicsit rövidebben a mysqlből való fehazsnáló azonosítást mutatom be.
A leírás ezúttal 10.04-es Ubuntu serverre készült, de nincs nagy különbség Debian esetén sem.

Hozzáadjuk a forrást, majd telepítjük a SOGo csomagot
echo "deb http://inverse.ca/ubuntu lucid main" >> /etc/apt/sources.list
apt-get update
apt-get install sogo


Mysqlben létrehozzuk a felhasználót, az adatbázist és a felhasználói adatok tárolására szolgáló sogo_view táblát:

CREATE USER 'sogo'@'localhost' IDENTIFIED BY 'sogo_db_passwd';
GRANT USAGE ON * . * TO 'sogo'@'localhost' IDENTIFIED BY 'sogo_db_passwd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
create database sogo;
GRANT ALL PRIVILEGES ON `sogo` . * TO 'sogo'@'localhost';
FLUSH PRIVILEGES;
use sogo;
CREATE TABLE `sogo_view`(
`c_uid` VARCHAR(255) ,
`c_name` VARCHAR(255) ,
`c_password` VARCHAR(255) ,
`c_cn` VARCHAR(255) ,
`mail` VARCHAR(255) ,
`givenName` VARCHAR(64) ,
`sn` VARCHAR(64) ,
`department` VARCHAR(255) ,
`title` VARCHAR(255)
);

Néhány felhasználót is beillesztünk:
INSERT INTO sogo_view (`c_uid`, `c_name`, `c_password`, `c_cn`, `mail`, `givenName`, `sn`, `department`, `title`) VALUES ('user1', 'user1', 'user1', 'Felhasznalo 1', 'user1@mail.hu', 'User1', 'user1', NULL, NULL);
INSERT INTO sogo_view (`c_uid`, `c_name`, `c_password`, `c_cn`, `mail`, `givenName`, `sn`, `department`, `title`) VALUES ('user2', 'user2', 'user2', 'Felhasznalo 2', 'user2@mail.hu', 'User2', 'user2', NULL, NULL);
INSERT INTO sogo_view (`c_uid`, `c_name`, `c_password`, `c_cn`, `mail`, `givenName`, `sn`, `department`, `title`) VALUES ('user3', 'user3', 'user3', 'Felhasznalo 3', 'user3@mail.hu', 'User3', 'user3', NULL, NULL);

A sogo konfigurálása az előzőleg bemutatótt módon zajlik, a különbség a SOGoUserSources sor tartalma, ez egy mysql adatbázishoz irányítja a szoftvert
su - sogo
defaults write sogod SOGoTimeZone "Europe/Budapest"
defaults write sogod SOGoMailDomain "company.hu"
defaults write sogod SOGoLanguage English
defaults write sogod SOGoAppointmentSendEMailNotifications YES
defaults write sogod SOGoFoldersSendEMailNotifications YES
defaults write sogod SOGoACLsSendEMailNotifications YES
defaults write sogod WOApplicationRedirectURL "http://company.hu"
defaults write sogod SOGoLoginModule calendar
defaults write sogod SOGoLanguage Hungarian
defaults write sogod SOGoProfileURL mysql://sogo:sogo_db_passwd@localhost:3306/sogo/sogo_user_profile
defaults write sogod OCSFolderInfoURL mysql://sogo:sogo_db_passwd@localhost:3306/sogo/sogo_folder_info
defaults write sogod SOGoMailingMechanism smtp
defaults write sogod SOGoSMTPServer localhost
defaults write sogod SOGoDraftsFolderName Drafts
defaults write sogod SOGoSentFolderName Sent
defaults write sogod SOGoTrashFolderName Trash
defaults write sogod SOGoIMAPServer localhost
defaults write sogod SOGoUserSources '({ type = sql; id = directory; viewURL = "mysql://sogo:sogo_db_passwd@localhost:3306/sogo/sogo_view"; canAuthenticate = YES; isAddressBook = NO; userPasswordAlgorithm = none; })'

A userPasswordAlgorithm = none; érdekes lehet. Ez szerint kódolatlanul tároljuk a felhasználók jelszavát. Itt van lehetőség md5 kódolást megadni, így egyirányú kódolással elrejtjük a valós jelszót.

Egy feature request írdott és pozitív visszajelzést adtak rá, így a következő verziótól követően a mysqlben tárolt és az encrypt függvénnyel elkódolt jelszavakat is tudja majd használni a SOGo, így akik pl email felhasználókat tárolják ilyen formán, azoknak sem lesz problémájuk és egy view tábla létrehozásával a levelezés és a SOGo felhasználói tábláját szinkronban tarthatjuk.

Az előző leírásból kimaradt, de itt pótolom az Apache2 beállításait:

A következő modulokat engedélyezni kell:

headers.load
proxy_ajp.load
proxy_balancer.load
proxy_connect.load
proxy_http.load
proxy.load

A /etc/apache2/conf.d/SOGo.conf tartalmát a következők eszerint kell formálni:

Alias /SOGo.woa/WebServerResources/ \
      /usr/lib/GNUstep/SOGo/WebServerResources/
Alias /SOGo/WebServerResources/ \
      /usr/lib/GNUstep/SOGo/WebServerResources/
AliasMatch /SOGo/so/ControlPanel/Products/(.*)/Resources/(.*) \
           /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2
<Directory /usr/lib/GNUstep/SOGo/>
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*jpg">
  SetHandler default-handler
</LocationMatch>
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*png">
  SetHandler default-handler
</LocationMatch>
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*gif">
  SetHandler default-handler
</LocationMatch>
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*css">
  SetHandler default-handler
</LocationMatch>
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*js">
  SetHandler default-handler
</LocationMatch>
<Location /SOGo>
  AuthType XXX
  Allow from all
</Location>
ProxyRequests Off
SetEnv proxy-nokeepalive 1
ProxyPreserveHost On
ProxyPassInterpolateEnv On
ProxyPass /SOGo http://127.0.0.1:20000/SOGo interpolate

Így nem kell a 20000-es portot használni, elég a company.hu.hu/SOGo -t beírni a böngészőbe

Hozzászólások száma: 0

Windows merevlemezének költöztetése más gépbe

2010.11.11 15:41

A költöztetés két lépésből áll.
  1. IDE vezérlő átállítása, driverek gépre másolása
  2. A merevlemez átszerelését követően az új hardverelemek telepítése, programok működésének ellenőrzése.

Előkészületek

Amennyiben a gép, amiről költöztetni szeretnénk a merevlemezt még működik, így a következő lépések elvégzése szükséges:

  • Az alaplaphoz tartozó új driverek felmásolása a merevlemezre (lehet, hogy később nem lesz hálózat)
  • A Sajátgép / Tulajdonságok / Hardver / Eszközkezelő alapértelmezett (Eszköz típusok szerinti nézetében)
  • IDE ATA/ATAPI vezérlők szakasz kinyitása
  • Dupla kattintás a helyi géphez tartozó vezérlő során (a képen Intel(R) 82371....)
Windows Eszközkezelő IDE vezérlő
  • Illesztőprogram fül / Frissítés gomb
  • Tovább - Lista mutatása az ismert komponensekről – Szabványos kétcsatornás PCI IDE- vezérlő sor kiválasztása – Tovább – Befejezés
  • Újraindítás

Újraindítás után

Újraindítás után az eszközkezelőben a következő képhez hasonlóan kell megjelennie a háttértár vezérlőnek:

windows eszközkezelő IDE vezérlő

A módosítás ellenőrzését követően a merevlemez átszerelhető a másik gépbe.

Átszerelést követően
  • Az új gépben való első induláskor a windows több új hardver elemet fog telepíteni. A legfontosabb a grafikus vezérlő, illetve a hálózati kártya. A driver telepítésekor a „Saját lemez használata” opciót kell kiválasztani és az előzőleg felmásolt könyvtárakra kell irányítani.
  • A fent leírtakhoz hasonlóan érdemes a háttértár illesztőprogramját ismét frissíteni, mert a windows találhat a szabványosnál jobb illesztőprogramot!

Megjegyzés

A leírás Windows XP és 2000 esetén is alkalmazható!

Hozzászólások száma: 0

Saját Nagios plugin készítése.

2010.10.26 11:14

A Nagios, vagy hozzá hasonló hálózat monitorozó alkalmazások nagyon sokat segítenek akkor, ha több szerver sok szolgáltatását kell ellenőrizni. Akár már egy szerver monitorozásánál is hasznos lehet, hiszen a beállított ellenőrzések és az azokhoz hozzárendelt hiba értékek alapján az ellenőrzések automatikusan és rendszeresen futnak...
A Nagios egy host (eszköz) vagy service (szolgáltatás) állapotát 3 gyakran használt értékkel tudja megadni: Ok, Warning, Critical.
Ezen kívül vannak állapototk, amelyek jellemzően új gép vagy szolgáltatás felvételekor, annak első ellenőrzéséig, vagy az előzőek közé be nem sorolt állapotban használ.

A Nagios telepítéséhez rengeteg plugint kapunk annak telepítésekor és az interneten sok egyéb kiegészítő fellelhető. Ennek ellenére speciális esetekben saját plugint készítése is megoldható.
Az alábbiakban egy egyszerű példán keresztül próbálom bemutatni a kiegészítők készítésének lehetőségeit. A Nagios egy több telephellyel rendelkező vállalat központjában elhelyezett szerveren fut, ahonnan a pl a telephelyek tárgyalótermeiben elhelyezett wireless AccessPointok működését ellenőrzi. A feladat annyi, hogy ellenőrizzük, hogy az eszköz a hálózatra van kötve és be van kapcsolva.
Minden eszköz rendelkezik webes adminisztrációs felülettel. Arról győződünk meg, hogy az eszköz 80-as TCP portja a kapcsolat kezdeményezésére válaszol.

Az alábbi plugin Bash Shell-ben íródott és az egyszerűség és átláthatóság volt a célja.
A script elején három tömbben tároljuk az APk adatait - IP cím, AP neve és AP helye.
Az alábbi sorokban beállítjuk az alapértelmezett visszatérési értékeket:
  • output="All APs are OK" - ez a szöveg jelenik meg a Nagios "Service Status Details" táblázatában akkor, ha minden rendben van (Status Information)
  • exit_status=0 - A script visszatérési értéke. Ennek változtatásával lehet módosítani, hogy a plugin Ok - 0, Warning - 1, Critical - 2 értéket mutasson a Nagiosban
  • affected_ips="" - Ha valamelyik eszközzel probléma van, akkor ebbe a változóba tesszük az adatait, ez is megjelenik az output változó mögött.

A script következő egysége egy for ciklus, ami az IP_cim tömbb elemein végighaladva futtatja a RESULT sorban megadott ellenőrzést:

RESULT=`/usr/lib/nagios/plugins/check_tcp -H ${ip_cim[$i]} -p 80 -t 10`


Látható, hogy egy másik Nagios plugint használunk az ellenőrzésre, de lehetőség van pl a ping parancs futtatására is.
A check_tcp hasznos plugin ilyen esetekben, mert sokkal gyorsabban ellenőrizhető vele egy host, mint pl a ping paranccsal:
linux:/tmp# time /usr/lib/nagios/plugins/check_tcp -H 192.168.200.1 -p 80 -t 10
TCP OK - 0.008 second response time on port 80|time=0.008068s;;;0.000000;10.000000

real    0m0.024s
user    0m0.000s
sys     0m0.004s

Látható, hogy egy eszköz ellenőrzése 0,024s vagyis 24 századmásodperc alatt végbement, ez ping esetén több másodpercet is igénybe vehet.
A check_tcp használatához legalább két változó megadására szükség van: -H IPCÍM, -p PORT_SZÁMA. A -t 10 azt a maximális időt jelzi, amíg a plugin az adott ellenőrzést futtatja - az érték megadása nélkül ez 3 másodperc.

Magyarázatra szorulhat a következő sor:
if [ `echo $RESULT | grep -c "TCP OK"` != 1 ]; then
Fent látható a sikeres port ellenőrzés kimenete. A fenti if ellenőrzés azt vizsgálja, hogy a parancs kimenetében hányszor szerepel a "TCP OK" karaktersor, ha ez nem egyszer (!=) szerepel, akkor probléma van az eszközzel.
Probléma esetén az output, affected_ips és exit_status változók értékét módosítjuk. Az affected_ips változó ezentúl az eddigi értékét és a most hibásnak talált eszköz adatait tartalmazza.

A for ciklus végén a visszatérési értéket a Nagios számára is használható módon írjuk ki.

A script maga:

linux:/tmp# cat check_own_plugin
#!/bin/bash

ip_cim[1]=192.168.200.1
ip_cim[2]=192.168.200.2
ip_cim[3]=192.168.200.3
ip_cim[4]=192.168.200.4
ip_cim[5]=192.168.200.5
ap_neve[1]=telephely1
ap_neve[2]=telephely2
ap_neve[3]=telephely3
ap_neve[4]=telephely4
ap_neve[5]=telephely5
ap_helye[1]="103 ajtó"
ap_helye[2]="109
ajtó"
ap_helye[3]="113
ajtó"
ap_helye[4]="146
ajtó"
ap_helye[5]="150
ajtó"

output="All APs are OK"
exit_status=0
affected_ips=""
i=0

for (( i=1; i<=${#ip_cim[*]}; i++ )) do
       RESULT=`/usr/lib/nagios/plugins/check_tcp -H ${ip_cim[$i]} -p 80 -t 10`
        if [ `echo $RESULT | grep -c "TCP OK"` != 1 ]; then
                output="WARNING ${ip_cim[$i]} $RESULT. Erintett IP(k):"
                affected_ips="$affected_ips ${ip_cim[$i]} (${ap_neve[$i]} - ${ap_helye[$i]}),"
                exit_status=1
        fi
done
echo "$output $affected_ips"
exit $exit_status

Hozzászólások száma: 0

Ubuntu panel fagyás

2010.10.10 19:37

Kicsi több, mint fél éve használtam nagy megelégedéssel az Ubuntu 9.10-es verzióját. A napokban az az öletem támadt, hogy frissíteni kellene 10.04-re (bár ne tettem volna).

A frissítés rendben lezajlott, letöltött egy csomó új csomagot, majd kicserélte őket. Nem volt semmi probléma.

A végén kért egy újraindítást - gondoltam, ha így szeretné hát legyen. Újraindulás után elég furcsa dolgokat tapasztaltam. Mivel wifit és VPNt használok, így a Network Manager alkalmaás mindig ott pihen a tálcámon. Azonban most nem volt ott...

Egyáltalán nem örültem neki. Egy kis keresgélés után megtaláltam a megoldást a problémára, a network-manager alkalmazást úja kell indítani:
 
/etc/init.d/network-manager restart

Habár automatikus indulásra volt állítva, mégsem indult el néha. Az ikon nem látszódott a tálcán, de az alkalmazás elindult, mert jelezte a buborékban, hogy bejelentkezés után kapcsolódott az APa.

A következő probléma az volt, hogy a gnome panel egész egyszerűen lefagyott.

Az óra a bekapcsolás idejét mutatta, a network manager a bejelentkezés közbeni animáció során akadt el (valószínüleg ez váltotta ki a efagyást) És a levelezés, sype, stb. ikonok sem jelentek meg.

Ismét google keresglés. A megoldást a követező parancs futtatása hozta:

pkill gnome-panel

A pkill parancs a kapott szövege illeszkedő folyamatokat állítja le. (A Gnome meg újraindítja jelen esetben a panelt.)

Úgy tűnik, ezzel a megoldással lehet együtt élni, bár remélem a ma megjelent 10.10-es verziónál már nem lesz ilyesmi probléma...

Hozzászólások száma: 0

Szoftveres RAID - lemezek cseréje

2010.08.31 13:15

RAID növelés és költöztetés új meghajtókra

Alaphelyzet: 3 raid tömb

debian:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 hda3[0] hdb3[1]
      6819520 blocks [2/2] [UU]

md1 : active raid1 hda2[0] hdb2[1]
      979840 blocks [2/2] [UU]

md0 : active (auto-read-only) raid1 hda1[0] hdb1[1]
      586240 blocks [2/2] [UU]


Az itt látható módon használjuk őket
debian:~# cat /etc/fstab
#              
proc            /proc           proc    defaults        0       0
/dev/md2        /               ext3    errors=remount-ro 0       1
/dev/md1        /var            ext3    defaults        0       2
/dev/md0        none            swap    sw              0       0


Két új meghajtó került a gépbe (sda,sdb). Még nincsenek felkészítve a munkára

debian:~# cat /proc/partitions
major minor  #blocks  name

   3     0    8388608 hda
   3     1     586341 hda1
   3     2     979965 hda2
   3     3    6819592 hda3
   3    64    8388608 hdb
   3    65     586341 hdb1
   3    66     979965 hdb2
   3    67    6819592 hdb3
   8     0   10485760 sda
   8    16   10485760 sdb
   9     0     586240 md0
   9     1     979840 md1
   9     2    6819520 md

Itt látható a használatban lévő hda lemez felosztása - teljesen megegyezik a hdbvel.

debian:~# fdisk -l /dev/hda

Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00028bc4

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          73      586341   fd  Linux raid autodetect
/dev/hda2              74         195      979965   fd  Linux raid autodetect
/dev/hda3             196        1044     6819592+  fd  Linux raid autodetect

Szeretnénk a / felcsatolást (md2) és a swap területet (md0) is megnövelni, továbbá a megszüntetni a /var alatt szolgáló md1 tömböt.
Létrehozzuk a partíciókat az sda és sdb lemezeken:
sda1 legyen négyszerese a hda1-nek, a maradék pedig mehet az md2 tömbbe

debian:~# fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x98e38789.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.


The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 292

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (293-1305, default 293):
Using default value 293
Last cylinder or +size or +sizeM or +sizeK (293-1305, default 1305):
Using default value 1305

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


A /dev/sda partíciók méretét a következő képpen át lehet másolni a /dev/sdb lemezre:

sfdisk -d /dev/sda > /tmp/sda
sfdisk /dev/sdb < /tmp/sda


Most, hogy már az új lemezeket is a kívánt méretűre szerkesztettük, jöhet a csere.

Az md0 lemezeivel kezdem:

Kiveszem a tömbből a hdb1 partíciót

debian:~# mdadm /dev/md0 -f /dev/hdb1 -r /dev/hdb1
mdadm: set /dev/hdb1 faulty in /dev/md0
mdadm: hot removed /dev/hdb1

A helyére teszem az sda1-et

debian:~# mdadm /dev/md0 -a /dev/sda1
mdadm: added /dev/sda1

Kiveszem a hda1-et

debian:~# mdadm /dev/md0 -f /dev/hda1 -r /dev/hda1
mdadm: set /dev/hda1 faulty in /dev/md0
mdadm: hot removed /dev/hda1

A helyére teszem az sdb1-et

debian:~# mdadm /dev/md0 -a /dev/sdb1
mdadm: added /dev/sdb1

Az eredmény:

debian:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 hdb3[1] hda3[0]
      6819520 blocks [2/2] [UU]

md1 : active raid1 hdb2[1] hda2[0]
      979840 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      586240 blocks [2/2] [UU]

unused devices:


Látható, hogy a lemezeket kicseréltem ugyan, de még változatlan a tömb mérete. Az mdadm képes megnövelni a kötet méretét:

debian:~# mdadm --grow /dev/md0 --size=max

Az md0 swap terület. Habár a fenti parancs hatására a raid tömb bérete nőtt, a linux továbbra is az eredeti méretét látja.

A következő parancsokkal rávehető, hogy nagyobbnak lássa:

debian:~# swapoff -a
debian:~# mkswap /dev/md0
debian:~# swapon -a

Ellenőrizni a free paranccsal lehet.

A /var felcsatolásának megszüntetéséhez a következőket végeztem el:

- mkdir/var2
- rsync -a /var/ /var2/
- /etc/fstabban a /var kezedű sort kitöröltem, hogy ne csatolja fel
- újraindítás után a /var2/ tartalmát átmásoltam a /var/ alá. Induláskor néhány szolgáltatás panaszkodott, de az adatok visszamásolását követően minden jól működött tovább.



A / eddig az md2 tömböt használta. Sajnos a lemezek nagyobbra cserélésével és a tömb méretének növelésével nem jár együtt, hogy a / alatt több hely legyen (ez nem LVM), így az md1 tömböt fogjuk használni a / háttértáraként. Az előző lépésben a /dev/md1-et felszabadítottuk, tudjuk másra használni.
A következőket kell tenni: Ki kell cserélni a tömb tagjait az új lemezek partícióira, létre kell hozni újra a fájlrendszert, majd az md2 adatait átmozgatni.

A két új lemezt hozzáadjuk, egyelőre mint tartalék:

debian:~# mdadm /dev/md1 -a /dev/sda2
mdadm: added /dev/sda2
debian:~# mdadm /dev/md1 -a /dev/sdb2
mdadm: added /dev/sdb2

A hda2-t hibásnak jelöljük, majd kivesszük:

debian:~# mdadm --manage /dev/md1 -f /dev/hda2
mdadm: set /dev/hda2 faulty in /dev/md1
debian:~# mdadm --manage /dev/md1 -r /dev/hda2
mdadm: hot removed /dev/hda2

!!!Fontos: megvárjuk, amíg az adatok szinkronizálása végigmegy az egyik tartalék lemezre
A hdb2-t hibásnak jelöljük, majd kivesszük:

debian:~# mdadm --manage /dev/md1 -f /dev/hdb2
mdadm: set /dev/hdb2 faulty in /dev/md1
debian:~# mdadm --manage /dev/md1 -r /dev/hdb2
mdadm: hot removed /dev/hdb2

A szinkronizáció után megnöveljük a méretet.

!!TIPP:
A  watch cat /proc/mdstat parancs kiadásával egyszerűbb ellenőrizni a szinkronizálás folyamatát


debian:~# mdadm --grow /dev/md1 --size=max

Létrehozzuk az új fájlrendszert:

debian:~#mkfs.ext3 /dev/md1

Átmásoljuk a fájlokat az előkészített kötetre:

debian:~# mkdir /mnt/md1
debian:~# mount /dev/md1 /mnt/md1/
debian:~# rsync -aurx / /mnt/md1/

Néhány dolgot változtatni kell:

debian:~# sed -i s/md2/md1/ /mnt/md1/etc/fstab
debian:~# sed -i s/md2/md1/ /mnt/md1/boot/grub/menu.lst


Az mdadm konfigfájljába mentsük el a beállításokat (kivéve az md2-t, hiszen azt nem fogjuk használni a jövőben.).

debian:~# mdadm --detail --scan | grep -v md2 > /etc/mdadm/mdadm.conf


!!FONTOS
Ha ilyet látunk:
mdadm: metadata format 00.90 unknown, ignored.
Ez azt jelenti, hogy bugos az mdadm, a következőket kell tenni:

debian:~# sed -i s/00.90/0.90/ /etc/mdadm/mdadm.conf


Ez a parancs a /etc/mdadm/mdadm.conf fájlban a  metadata=00.90  értéket metadata=0.90-re módosítja.

Még egy lépést meg kell tenni, mégpedig a grubot újratelepíteni. Ezt sokféleképpen meg lehet tenni, egy lehetséges megoldás:
Valamilyen live rendszerrel elindítani a gépet, amely felismeri a RAID köteteket. Én a System Rescue CD-t javaslom. A raid tömbök kezelésekor, újraindítás előtt is meg lehet tenni ezt, csak körültekintően kell eljárni!

Indulás után a grub parancsot kell kiadni.

Ekkor kapunk egy konzolt, aminek sorai grub> - al kezdődnek. Ki kell deríteni, hogy a grub milyen diszkeket ismer. Erre jó megoldás a következő prancs:

grub> find /boot/grub/stage1
 (hd0,1)
 (hd1,1)

Esetünkben a hd0,1 a /dev/sda2-t, a hd1,1 pedig a /dev/sdb2 partíciót jelenti. A következő prancsokkal telepíthetjük mindkét lemezre a grubot:

grub> root (hd0,1)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

grub> root (hd1,1)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+17 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.




!!!Amennyiben a Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  sorban hibát látunk, valami nem ment jól, nem fog működni a grub.

Ha a fentihez hasonló kimenetet látunk, akkor a quit paranccsal ki kell lépni a grubból és ellenőrizni a /boot/grub/menu.lst fájlt. Tapasztaltam olyat, hogy a fájlban a root (hdx,y) sort nem frissítette, így azt kézzel kell megtenni.

Újraindítást követően a gép a frissen telepített grubbal  és az új HDDkkel indul.

Hozzászólások száma: 0

iSCSI kiszolgáló beállítása Debian alatt:

2010.08.09 13:08

Tennivalók Lenny-n

Az alap rendszer telepítését és a RAID beállítását követően a következő leírást követve az ESXi számára is használható datastore hozható létre. iSCSI tárolóként fizikai lemezt, RAID kötetet de akár fájlt is meg lehet adni az ESXinek. Célszerű raid tömböt megadni, de nem azt, amelyikre a rendszer telepítve lett.
A telepítés lépései:

A megosztani kívánt partíció típusát át kell állítani BSD/OS típusúra. Erre fdisk vagy cfdisk használható. Amennyiben ez a lépés kimarad, az ESXi "unable to read partition information from this disk" hibával megáll a datastore hozzáadásánál!

fdisk -l /dev/hda
.
.
.
/dev/hda5             638        2482    14819962+  9f  BSD/OS

A telepítendő csomagok:
# apt-get install iscsitarget iscsitarget-modules-`iname -r`
A telepítés végén a iscsitarget írja, hogy nincs beállítva, hogy automatikusan elinduljon, ezért a következő módosítást kell elvégezni:
# echo "ISCSITARGET_ENABLE=true" > /etc/default/iscsitarget
Target és LUN létrehozásakor hibát írna, ezért tanácsos az elején hozzáadni az iscsi_trgt modult, majd a dependenciáit ellenőrizni:
# modprobe iscsi_trgt
# depmod -a

Létre kell hozni egy Target-et:
#ietadm --op new --tid=0 --params Name=RemoteDatastore
Majd egy LUNt:
#ietadm --op new --tid=0 --lun=1 --params Path=/dev/hda5,Type=fileio
A Target nevének meghatározását szabványosították, érdemes követni:
iqn.yyyy-mm.[.identifier]
yyyy-mm - év- hónap pl.: 2010-08
- pl.: RemoteDatastore
[.identifier] - a Target egyedi azonosító száma pl.: 0

Sajnos a fenti parancsokkal létrehozott LUN az iscsitarget újraindulását követően nem lesz elérhető, ezért a /etc/ietd.conf fájlban kell rögzíteni:

Target iqn.2010-08.RemoteDatastore.0
Lun 0 Path=/dev/hda5,Type=fileio
A következő sort érdemes kikommentelni, hogy ne zavarjon. Ez csak egy példa, ami nem kell:
 #Target iqn.2001-04.com.example:storage.disk2.sys1.xyz

Egyszerű partíció, vagy raid kötet esetén a Type=fileio a jó választás, drbd eszköznél pedig Type=blockio.

Gondoskodni kell a hozzáférésről is. A /etc/ietd.conf fájlban leírtaknak megfelelően jelszóval lehet védeni a Targetet. A /etc/initiators.allow fájlban pedig azt kell beállítani, hogy az adott Targetet melyik IP címről érhetik el.
A következő  a iqn.2010-08.RemoteDatastore:1 Targetet minden IPről elérhetővé teszi.
# cat /etc/initiators.allow
iqn.2010-08.RemoteDatastore.0 ALL

A beállítások elkészültek, már csak újra kell indítani a szolgáltatást:
# /etc/init.d/iscsitarget restart
És megnézni az eredményét:

# cat /proc/net/iet/volume
tid:1 name:iqn.2010-08.RemoteDatastore.0
        lun:0 state:0 iotype:fileio iomode:wt path:/dev/hda5



Tennivalók ESXi-n:
- A kliens programmal bejelentkezni
- Az ESXi nevére kattinttani
- Configuration fül
- Baloldalon Storage Adapters -iSCSI Software Adapter -Properties -Dynamic Discovery / add -> San ip címének megadása
- Storage - Add Stoage - Disk/LUN - San identifier alapján azonosítani - méretét, nevét, block size-t beállítani

Squeeze


Változott a helyzet, már nincs iscsitarget-modules-`uname -r` csomag, ezért a következő csomagokat kell telepíteni:
apt-get insatll iscsitarget iscsitarget-dkms dkms linux-headers-`uname -r`

# modprobe iscsi_trgt
# depmod -a

# ietadm --op new --tid=0 --params Name=201106.BACKUP.0
A tid értéket érdemes ellenőrizni:
#cat /proc/net/iet/volume
tid:1 name:201106.BACKUP.0
és ezt felhasználni:
#ietadm --op new --tid=1 --lun=1 --params Path=/dev/filesystem/iscsi,Type=fileio

Az eredeti konfigurációt tegyük el késöbbre:
# mv /etc/iet/ietd.conf /etc/iet/oriietd.conf
Majd a mostanit mentsük el a konfigfájlba:
# cat /etc/iet/ietd.conf
Target iqn.201106.BACKUP.0
Lun 0 Path=/dev/filesystem/iscsi,Type=fileio

Ha újraindítás után a
# cat /proc/net/iet/volume
tid:1 name:iqn.201106.BACKUP.0
lun:0 state:0 iotype:fileio iomode:wt blocks:19529728 blocksize:512 path:/dev/filesystem/iscsi
hasonlót hoz, akkor rendesen működni fog a kiszolgáló



Hozzászólások száma: 0

Exchange helyett SOGo

2010.08.02 11:23

Céges közegben talán a leggyakrabban használt levelező és munkacsoport szoftver a Microsoft Exchange és Microsoft Outlook összeállítás. Mindenki ismeri, jól átgondolt és kitalált alkalmazás.
Léteznek ingyenes alternatívái, amelyek többé kevésbé működnek, de nem olyan intergráltak, mint a fent említett páros.
Egy ilyen ingyenes csoportmunka (groupware) alkalmazás a SOGo.

A SOGo eredetileg webes felszínen kínálja szolgáltatásait, de a megfelelő kiegészítésekkel használható a Mozilla Thunderbird kliensen, továbbá kiegészítők nélkül működik az Evolution alkalmazással is. Igény szerint az Outlookkal is össze lehet kapcsolni.

A következő leírás Debian Linux 5.0 alatt mutatja a be a telepítését. A telepítés után természetesen átgondolt LDAP adatbázist kell  létrehozni és a megfelelő beállításokat el kell végezni a klienseken.

A SOGo telepítése Debian Lennyre:SOGo


echo "deb inverse.ca/debian lenny lenny" >> /etc/apt/sources.list
apt-get update
apt-get install sogo
 
Alap beállítások  sogo felhasználóval:
 
Telepítés során létrehozza a sogo felhasználót. ennek segítségével állítható be az alkalmazás. Root felhasználóról a következő paranccsal leget átlépni:
su - sogo
 
defaults write sogod SOGoTimeZone "Europe/Budapest"
defaults write sogod SOGoMailDomain "company.hu"
defaults write sogod SOGoLanguage English
defaults write sogod SOGoAppointmentSendEMailNotifications YES
defaults write sogod SOGoFoldersSendEMailNotifications YES
defaults write sogod SOGoACLsSendEMailNotifications YES
defaults write sogod WOApplicationRedirectURL "http://groupware.company.hu"
defaults write sogod SOGoLoginModule calendar
defaults write sogod SOGoLanguage Hungarian
defaults write sogod SOGoUserSources '({ type = ldap ; CNFieldName = givenName; IDFieldName = uid; UIDFieldName = givenName;  baseDN = "dc=company,dc=hu"; bindDN ="cn=replicator,dc=company,dc=hu"; bindPassword = replica; canAuthenticate = YES; displayName = "Shared Addresses"; hostname = "localhost"; id = public; isAddressBook = YES; port=389; })'
 
 
http://groupware.company.hu - Működjön a DNS név!

MYSQL beállítása:

mysql -u root -p
mysql>CREATE USER 'sogo'@'%'IDENTIFIED BY 'sogo';
mysql> create database sogo;
mysql>GRANT ALL PRIVILEGES ON sogo.* TO 'sogo'@'%';
 
my.cnf-ben bind address sort kikommentelni - ha távolról el kell érni a mysqlt
 
su - sogo
defaults write sogod SOGoProfileURL mysql://sogo:sogo@localhost:3306/sogo/sogo_user_profile
defaults write sogod OCSFolderInfoURL mysql://sogo:sogo@localhost:3306/sogo/sogo_folder_info
 

SMTP beállítása:

defaults write sogod SOGoMailingMechanism smtp
defaults write sogod SOGoSMTPServer 192.168.58.1

IMAP beállítása:

defaults write sogod SOGoDraftsFolderName Drafts
defaults write sogod SOGoSentFolderName Sent
defaults write sogod SOGoTrashFolderName Trash
defaults write sogod SOGoIMAPServer 192.168.58.1
 
A beálíítások elérhetőek a /home/sogo/GNUstep/Defaults/.GNUstepDefaults fájlban:
groupware:~# cat /home/sogo/GNUstep/Defaults/.GNUstepDefaults
{
    NSGlobalDomain = {
    };
    sogod = {
        OCSFolderInfoURL = "mysql://sogo:sogo@localhost:3306/sogo/sogo_folder_info";
        SOGoACLsSendEMailNotifications = YES;
        SOGoAppointmentSendEMailNotifications = YES;
        SOGoDraftsFolderName = Drafts;
        SOGoFoldersSendEMailNotifications = YES;
        SOGoIMAPServer = 192.168.58.1;
        SOGoLanguage = Hungarian;
        SOGoLoginModule = calendar;
        SOGoMailDomain = company.hu;
        SOGoMailingMechanism = smtp;
        SOGoProfileURL = "mysql://sogo:sogo@localhost:3306/sogo/sogo_user_profile";
        SOGoSMTPServer = 192.168.58.1;
        SOGoSentFolderName = Sent;
        SOGoTimeZone = Europe/Budapest;
        SOGoTrashFolderName = Trash;
        SOGoUserSources = (
            {
                CNFieldName = displayNAme;
                IDFieldName = uid;
                UIDFieldName = givenName;
                baseDN = "ou=sogo,dc=company,dc=hu";
                bindDN = "cn=replicator,dc=company,dc=hu";
                bindPassword = replica;
                canAuthenticate = YES;
                displayName = "Shared Addresses";
                hostname = localhost;
                id = public;
                isAddressBook = YES;
                port = 389;
                type = ldap;
            }
        );
        WOApplicationRedirectURL = "http://groupware.company.hu";
    };
 
 
Ezt tilos kézzel szerkeszteni!, a fent használt parancsokkal kell ezt megtenni!!!
Néhány fontos sor LDAPból való autentikáláskor:
CNFieldName = a felhasználó teljes neve pl cn, de lehet a displayName is
IDFieldName = az a mező, amivel a felhasználó DNje kezdődik. PL.:dn: uid=kissp,ou=sogo..... tehát uid
UIDFieldName = a felhasználó bejelentkezéshez használatos neve pl givenname
displayName = Címjegyzék használata esetén ez lesz a Címjegyzék neve ~

LDAP beállítások

Adminisztrátor felvitele az adatbázisba: 
 
jelszó: sogo
groupware:~# slappasswd -s sogo
{SSHA}M5gU+hhGfhRnH6tDsh+rR/ZLXPvVSQix
groupware:~# cat /root/sogo.ldiff
dn: uid=sogo,ou=sogo,dc=company,dc=hu
objectClass: top
objectClass: inetOrgPerson
objectClass: person
objectClass: organizationalPerson
uid: sogo
cn: SOGo Administrator
mail: sogo@company.hu
sn: Administrator
givenName: SOGo
userPassword: {SSHA}P/iReJWnWsjg3UwTwH4G7tj+bIcOnbco
 
groupware:~# /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.
groupware:~# slapadd  -l /root/sogo.ldiff
Hasonlóképpen fel kell venni a replicator felhasználót - ha szinkronizálva lesz a központi LDAP adatbázissal.
groupware:~# slapadd  -l /root/replicator.ldiff
 
groupware:~# slapindex
 
WARNING!
Runnig as root!
There's a fair chance slapd will fail to start.
Check file permissions!
 
groupware:~# chown -Rf openldap:openldap /var/lib/ldap
 
groupware:~# /etc/init.d/slapd start
Starting OpenLDAP: slapd.
 
A felhasználók felvételéhez használható a következő script:
 
groupware:~# cat /usr/bin/ldap-useradd.sh
#!/bin/bash
LDAP_BIND_DN='cn=replicator,dc=company,dc=hu'
LDAP_BIND_SECRET='replica'
LDAP_SUFIX='ou=sogo,dc=company,dc=hu'
 
echo -n "Felhasznalonev: "
read USERNAME
 
echo -n "Jelszo: "
read PASSWORD
 
USERPASSWD=`slappasswd -s $PASSWORD`
echo -e "dn: uid=$USERNAME,$LDAP_SUFIX\nobjectClass: top\nobjectClass: inetOrgPerson\nobjectClass: person\nobjectClass: organizationalPerson\nuid: $USERNAME \ncn: $USERNAME\nmail:$USERNAME@company.hu\nsn: $USERNAME\ngivenName: $USERNAME\nuserPassword: $USERPASSWD \ndisplayName: $USERNAME " | ldapadd -x -D $LDAP_BIND_DN -w $LDAP_BIND_SECRET
RETVAL=$?
if [ $RETVAL -eq 0 ] ;
    then
        echo 'Felhasznalo  sikeresen hozzaadva!'
 
    else
        echo '!!!Felhasznalo  NEM keszult el!!!'
    #exit 1
fi
 
PROBLÉMÁK TELEPÍTÉS KÖZBEN:
 
Abban az esetben, ha a sogod 100%-on dolgoztatja a processzort, amikor a webes felületen a felhasználó bejelentkezik, LDAP probléma valószínűsíthető. A /home/sogo/GNUstep/Defaults/.GNUstepDefaults fájlban megadott felhasználónak nincs írási jogosultsága a basednbe. Vagy nem a megfelelő adatokat kérdezi le az ldapból (CNFieldName, IDFieldName, UIDFieldName)  
 
Kliens oldali beállítások:
 
Használt szoftverek:
Mozilla Thunderbird 2.0.0.24
sogo-connector-0.101.xpi
lightning-0.10-inverse.win32.xpi
 
Beállítás
 
Naptár:
File -  calendar - new calendar - on the network - CalDAV  /location: http://groupware.company.hu/SOGo/dav/FELHASZNALONEVE/Calendar/personal/
Címjegyzék:
Address book - File - new Remote Address Book - name: felhasználó neve pl / URL: http://groupware.company.hu/SOGo/dav/kissp/Contacts/personal
A gyűjtött címjegyzék is ide kerüljön:
Address Book - Tools - Options - Composition - Addressing - Automatical add outgoing email-addresses to my: az előzőleg a name sorban megadott kiválasztása - OK

Hozzászólások száma: 2

2010.01.07 8:17





Hozzászólások száma: 0

Linux gateway2

2010.05.31 20:59

A Feladat:


Egy vendégek számára használható hálózat kialakítása, amely felől nem tudják elérni az irodai hálózatot, mégis viszonylag szabadon elérhetik az internet szolgáltatásait.

Képen ábrázolva:

Linux gateway - Iptables firewall-

Lehetséges megoldás:

Linux tűzfal közbeiktatása, amely két hálózati kártyával rendelkezik: egy a vendéghálózat felé, egy az irodai hálózat (internet)  felé.
Hálózati forgalmi szabályok szavakban:
A vendégek számára elérhető szolgáltatások:
  • web (http, https)
  • smtp, pop3, imap4
  • PPTP (windowsba épített VPN kliens) támogatása
A vendég  a hálózatot használva tudja használni az internet alapvető szolgáltatásait, minden más forgalom tiltva van. H az engedélyezett szolgáltatások nem elegendők, csatlakozhat  PPTP VPN kiszolgálóhoz.
A http forgalom arra a proxy szerverre lesz továbbítva, amelyet az irodai hálózat is hasaznál.
Az smtp forgalom az irodai hálózat számára is elérhető SMTP kijáratra lesz továbbítva.
A vendégek a kiszolgálóhoz és az irodai hálózat gépeihez nem tudnak csatlakozni, viszont a WLAN interfészen keresztül lehet az útválasztóhoz kapcsolódni  (pl: ssh).
A nem engedélyezett forgalom a LOGDROP láncba lesz továbbítva, ahol először loggolva lesz a forgalom, majd eldobva (DROP).

IPTABLES Tűzfal szabályok:

#!/bin/bash
 
LANIF="eth0"
WANIF="eth1"
WANIF_IP="192.168.0.1"
LANNETWORK="192.168.211.0/24"
PROXY="192.168.2.1"
SMTPGW="192.168.1.1"

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -F -t nat
iptables -N LOGDROP
iptables -A LOGDROP -j LOG
iptables -A LOGDROP -j DROP

iptables -t nat -A PREROUTING -i $LANIF -s ! $SMTPGW -p tcp --dport 25 -j DNAT --to $SMTPGW:26

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $LANIF -p ICMP -j ACCEPT
iptables -A INPUT -i $LANIF -p udp -m multiport --dports 53,67,68 -j ACCEPT
iptables -A INPUT -i $LANIF -d $SMTPGW -p tcp --dport 26 -j ACCEPT
iptables -A INPUT -i $LANIF -p tcp -m multiport --dports 80,110,143,443,465,993,995,1723 -j ACCEPT
iptables -A INPUT -i $LANIF -p gre -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -i $WANIF -j ACCEPT
iptables -A INPUT -j LOGDROP


iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $LANIF -d $LANNETWORK -j ACCEPT
iptables -A FORWARD -i $LANIF -d $SMTPGW -p tcp --dport 26 -j ACCEPT
iptables -A FORWARD -i $LANIF -d 192.168.0.0/16 -j DROP
iptables -A FORWARD -i $LANIF -p ICMP -j ACCEPT
iptables -A FORWARD -i $LANIF -p tcp -m multiport --dports 80,110,143,443,465,993,995,1723 -j ACCEPT
iptables -A FORWARD -i $LANIF -p gre -j ACCEPT
iptables -A FORWARD -j LOGDROP

iptables -t nat -A POSTROUTING  -o $WANIF -s $LANNETWORK -j MASQUERADE
iptables -t nat -A POSTROUTING -o $WANIF -s $LANNETWORK -d $SMTPGW -j SNAT --to $WANIF_IP

Hozzászólások száma: 0

Sávszélesség korlátozása Debian Linuxszal

2010.05.17 18:58

Alkalmanként szükség van a sávszélesség korlátozására - tipikusan internetszolgáltatók számára.
Erre nyújt lehetséges megoldást a Shaperd nevű csomag Debian rendszeren.
Telepítés:
apt-get install shaperd
A telepítést követően figyelmeztet, hogy nincs beállítva a program és a /usr/share/doc/shaperd/examples/ könyvtár tartalmát felhasználva létrehozhatsz konfig fájlt.

A következő példa egy scriptből való, ami a /etc/shaperd/shaperd.conf generálására szolgált:

class $ip_address {
    bandwidth =  $up_speed byte/s
    ipv4 classifier out_if=eth0 saddr=$ip_address
    queue limits = 100 kb 1000 packets
}
class $ip_address {
    bandwidth =  $down_speed byte/s
    ipv4 classifier inp_if=eth0 daddr=$ip_address
    queue limits = 100 kb 1000 packets
}

A leírtak magukért beszélnek, csak néhány részletet említenék meg:
  • out_if - hálózati interfész a csomagok OUTPUT oldalán
  • inp_if - hálózati interfész a csomagok INPUT oldalán
  • saddr - forrás IP cím
  • daddr - cél IP cím
Lehetőség van protokoll , sőt port szinten szabályozni a forgalmat. A fent említett könyvtárban a konfigurációs példák adnak segítséget ennek beállításához.
A sávszélesség korlátozásához szükség van arra, hogy IPTABLES tűzfal szabályokkal a megfelelő forgalmat a queue táblába irányítsuk.
A követező tűzfal szabályok a megadott IP cím forgalmát irányítják a queue táblába, valamint a megadott IP - MAC párosnak engedélyezik a forgalmat a FORWARD láncon:

iptables -t filter -A FORWARD -s $ip_address  -j QUEUE
iptables -t filter -A FORWARD -d $ip_address  -j QUEUE
iptables -I FORWARD -s $ip_address -m mac --mac-source $mac_address -j ACCEPT

A queue lánc használatához be kell tölteni az ip_queue modult, valamint a dependenciáit:
modprobe ip_queue
depmod -a
Nem marad más hátra, csak  elindítani a shapert daemont:

/etc/init.d/shaperd start


Várom a visszajelzéseket!



Hozzászólások száma: 0

Iptables tűzfal

2010.05.17 18:40

Atheros 5212 chippel szerelt WLAN kártyával az alábbi módon készítettem a Debian linuxból wireless access pointot:
wlanconfig ath0 destroy; 
wlanconfig ath create wlandev wifi0 wlanmode ap;
iwconfig ath0 rate 54M;
iwconfig ath0 essid "Sempi.dyndns.hu" ;

iptables -A POSTROUTING -t nat -o ppp0 -s 10.1.1.0/24 -j MASQUERADE;
iptables -A POSTROUTING -t mangle -o eth0 -j TTL --ttl-set 64;

iptables -t nat -A PREROUTING -p tcp --dport 65502 -j DNAT --to-destination 10.1.1.2:65502;
iptables -t nat -A PREROUTING -p tcp --dport 65503 -j DNAT --to-destination 10.1.1.3:65503;
iptables -t nat -A PREROUTING -p tcp --dport 65504 -j DNAT --to-destination 10.1.1.4:65504;

iptables -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT;
iptables -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT;
iptables -A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT;

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 113 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 139 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -i ath0 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 65501 -j ACCEPT
iptables -A INPUT -p tcp --dport 65502 -j ACCEPT
iptables -A INPUT -p tcp --dport 65503 -j ACCEPT
iptables -A INPUT -p tcp --dport 65504 -j ACCEPT

iptables -A INPUT -p UDP --dport 22 -j ACCEPT
iptables -A INPUT -p UDP --dport 53 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 -i ath0 -j ACCEPT
iptables -A INPUT -p UDP --dport 80 -j ACCEPT
iptables -A INPUT -p UDP --dport 123 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

iptables -P INPUT DROP

echo "1" > /proc/sys/net/ipv4/ip_forward;
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians;

Rég készült, vannak benne nemkellő és vannak hiányzó szabályok, de működött..

Hozzászólások száma: 0

OpenLDAP replikáció

2010.04.26 12:58

Az Open LDAP adatbázisának másik gépre történő replikálásának több módja van. A legegyszerűbb megoldás az, ha alá / fölé rendeltség van az ldap szerverek között. Ebben az esetben az egyik szerveren csak tárolódik az adat, míg a másikon történnek változások. Ez a felállás a Master - Slave replikáció.
A következőkben röviden a Multi Master összeállítású replikációt mutatom be. Ennek lényege, hogy az ldap fa bizonyos ágán történhet módosítás több szerveren is, ugyanakkor a változások mindkét szerveren megjelennek.
A lenti konfigurációs fájl részletek a /etc/ldap/slapd.conf fájlból való. Az itt bemutatott összeállítás a következő képen néz ki:

192.168.0.1: ez a szerver kommunikál a telephelyekkel, a telephelyek evvel szinkronizálják az adatbázisukat.
192.168.1.1: az egyik telephelyen lévő szerver, ami a helyi gépekkel kommunikál és az ldap adatbázisát a fentivel szinkronizálja.
192.168.2.1: a másik telephelyen elhelyezett szerver, teljesen hasonló a fentihez.

Részlet a 192.168.0.1 konfigurációjából:
limits dn.exact="cn=replicator,dc=company,dc=hu" size=unlimited time=unlimited
serverID 001
#--- telephely1
syncrepl rid=000
  provider=ldap://192.168.1.1
  type=refreshAndPersist
  interval=00:00:05:00
  retry="5 5 300 +"
  searchbase="ou=telephely1,dc=company,dc=hu"
  attrs="*,+"
  bindmethod=simple
  binddn="cn=replicator,dc=company,dc=hu"
  credentials=replica
#--- telephely2
syncrepl rid=001
  provider=ldap://192.168.2.1
  type=refreshAndPersist
  interval=00:00:05:00
  retry="5 5 300 +"
  searchbase="ou=telephely2,dc=company,dc=hu"
  attrs="*,+"
  bindmethod=simple
  binddn="cn=replicator,dc=company,dc=hu"
  credentials=replica

mirrormode TRUE
overlay syncprov
syncprov-checkpoint 100 10


Részlet a 192.168.1.1 konfigurációjából:

limits dn.exact="cn=replicator,dc=company,dc=hu" size=unlimited time=unlimited
ServerID 002
syncrepl rid=000
  provider=ldap://192.168.0.1
  type=refreshAndPersist
  retry="5 5 300 +"
  searchbase="ou=telephely1,dc=company,dc=hu"
  attrs="*,+"
  bindmethod=simple
  binddn="cn=replicator,dc=company,dc=hu"
  credentials=replica

mirrormode TRUE
overlay syncprov
syncprov-checkpoint 100 10

Részlet a 192.168.2.1 konfigurációjából:

limits dn.exact="cn=replicator,dc=company,dc=hu" size=unlimited time=unlimited
ServerID 003
syncrepl rid=000
  provider=ldap://192.168.0.1
  type=refreshAndPersist
  retry="5 5 300 +"
  searchbase="ou=telephely2,dc=company,dc=hu"
  attrs="*,+"
  bindmethod=simple
  binddn="cn=replicator,dc=company,dc=hu"
  credentials=replica

mirrormode TRUE
overlay syncprov
syncprov-checkpoint 100 10

A konfigurációs fájl sorairól röviden:
limits dn.exact="cn=replicator,dc=company,dc=hu" size=unlimited time=unlimited
    Ezzel a sorral jogot adunk a replicator felhasználónak, hogy bármikor (time), bármennyi (size) adatot mozgasson az adott adatbázisban.
ServerID 001
    Ez a szerver azonosítója, minden ldap szervert különböző azonosítóval kell ellátni
syncrepl rid=000
    Ha egy szerverről többelé replikálunk, akkor ehhez a változóhoz különböző értéket kell megadni.
provider=ldap:
    Annak a szervernek az ip címe vagy domain neve, amivel szinkronizálni szeretnénk
type=refreshAndPersist
    A szinkronizáció típusát adja meg. A refreshAndPersist azt jelenti, hogy az a szerver, amelyik kapcsolatot teremt a másikkal leküld minden változást, majd az, amivel kapcsolatot teremtett az előző visszaküldi azokat az adatokat, amik csak az ő oldalán változtak.
retry="5 5 300 +"
   A szinkronizálás gyakoriságág határozza meg.
searchbase=
    Ennek az opciónak a változtatásával oldható meg ,hogy egy telephelyen csak a számára értékes információk tárolódjanak, más telephelyek adatai ne jelenjenek meg. A szinkronizálni kívánt fa legalsó ágát (kiinduló pontját) kell megadni.
attrs=
    Azt adja meg, hogy melyik jellemzőket akarjuk szinkronizálni. Pl. megadható, hogy csak a jelszavakat küldje át a másik szervernek. Az attrs="*,+" hatására mindent átküld.
bindmethod=simple
binddn="cn=replicator,dc=company,dc=hu"
credentials=replica
    A fentiek összetartoznak, ezért együtt kezelem. A bindmethod azt adja meg, hogy milyen módon azonosítjuk magunkat a távoli kiszolgálón. A binddn a "felhasználónevet", a credentials a jelszót tartalmazza.

Bővebb információ a témáról elérhető itt.

Hozzászólások száma: 0

PPTP+RADIUS+LDAP VPN 1.

2010.07.31 18:31

PPTP+RADIUS+LDAP összeállítással készített VPN 1. rész


PPTP

A PPTP csomag képes a Windowsban megtalálható beépített VPN szolgáltatás kezelésére. Szerver és kliens oldalra is konfigurálható.
Két fő konfigurációs fájlja van:
1./etc/pptpd.conf
Tartalma:
option /etc/ppp/pptpd-options
logwtmp
localip 192.168.0.24
remoteip 192.168.0.100-120
2. /etc/ppp/pptpd-options
Tartalma:
lock
name pptpd
domain company.hu
proxyarp
asyncmap 0
-chap
-mschap
require-mschap-v2
require-mppe-128
lcp-echo-failure 30
lcp-echo-interval 5
ipcp-accept-local
ipcp-accept-remote
nodefaultroute
nobsdcomp
auth
A fenti konfiguráció képes a /etc/ppp/chap-secrets fájlban megadott felhasználónév – jelszó párost felhasználva autentikációt megvalósítani. Hátránya, hogy az említett fájlban a jelszavak nincsenek titkosítva.

A fenti konfigurációt a pptpd-options fájlban a következő két sorral kiegészítve nem a chap-secrets fájlban keresi a felhasználónév- jelszó párost,hanem a localhostra telepített radiusclient-hez fordul.
plugin /usr/lib/pppd/2.4.4/radius.so
plugin /usr/lib/pppd/2.4.4/radattr.so

RADIUS

A Radius autentikációt valósít meg több forrásból. Olyan esetben hasznos, ha az autentikációhoz használt adatok nem egy helyen (text fájl, adatbázis, ldap) vannak tárolva, hanem ezek keveréke. Továbbá előnye, hogy több olyan alkalmazással is összekapcsolható, amely autentikációt követel (pl SSH, vagy a fent említett PPTP).

A Radius szerver-kliens hierarchiájú csomag. Debianban az alap klienscsomag a radiusclient1, szerver oldalon pedig a freeradius csomag szükséges. Szerver oldalra az autentikáció forrását képező adatoktól függően további csomagok telepítése is szükséges (pl: freeradius-ldap, freeradius-mysql).

A kliens és a szerver kommunikációja során a kliensnek egy jelszót kell küldenie a szerver felé, csak ennek ellenőrzése után szolgáltat adatot a szerver.
Szerver oldalon a következő képen kell beállítani a jelszót a /etc/freeradius/clients.conf fájlban:
client localhost {
ipaddr = 127.0.0.1
secret = testing123
require_message_authenticator = no
}
Lehetőség van tartományonként, sőt IP címenként eltérő jelszót alkalmazni:
client 192.168.0.0/16 {
secret = testing123-2
shortname = private-network-2
}
A Kliens oldal beállítása a /etc/radiusclient/radiusclient.conf fájlban történik:
Pl.:
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
authserver localhost:1812
acctserver localhost:1813
servers /etc/radiusclient/servers
dictionary /etc/radiusclient/dictionary
login_radius /usr/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
Az említett jelszót a következő képen kell megadni a /etc/radiusclient/servers fájlban:
localhost testing123

A pptp és ldap összekapcsolásához a /etc/radiusclient/dictionary fájlban el kell helyezni a következő két sort:
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft
Ezzel hozzáadva a fenti fájlok adatait a radiusclient szótárához. Ennek a jelszó kódolása terén van fontos szerepe.

Ezzel a radiusclient konfigurálása el is készült.

A Radius szerver konfigurálása több időt vesz igénybe. Jelen esetben be kellett állítani az LDAP-pal való kommunikáció részleteit a /etc/freeradius/radiusd.conf fájlban:
ldap {
server = "127.0.0.1"
basedn = "dc=company,dc=hu"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
password_attribute = sambaNTPassword
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
tls {
start_tls = no
}
dictionary_mapping = ${confdir}/ldap.attrmap
edir_account_policy_check = no
}
Említést érdemel a password_attribute = sambaNTPassword sor, ugyanis a jelszó megfelelő kódolásához a samba nevű fájl- és nyomtató megosztást végző alkalmazás szükséges. Ennek működéséhez a samba konfigot is módosítani kell.

A fenti módon beállított ldap autentikációt engedélyezni kell. Ehhez a /etc/freeradius/sites-enabled/default és /etc/freeradius/sites-enabled/inner-tunnel fájlokban az ldap sorok elől ki kell venni a # -t.

A freeradius –X parancs segítségével indított radius szerver kimenetét folyamatosan lehet látni. Ha induláskor hibát észlel, itt tájékoztat. Ha a parancs futtatása után a következőket írja az utolsó sorokba, akkor elindult és várja a kapcsolatot a kliensről:
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on proxy address * port 1814
Ready to process requests.
Tesztelés közben tanácsos ezt a futtatási módot alkalmazni, mert sokkal bőbeszédűbb, mint a log.

Hozzászólások száma: 0

PPTP+RADIUS+LDAP VPN 2.

2010.07.31 18:31


LDAP

Az ldap beállítása nem túl összetett feladat, hiszen csak alapvető funkciókra van szükség ebben az esetben.

A működéshez a /etc/ldap/ldap.conf fájlba a következőket kell elhelyezni:

HOST 127.0.0.1
BASE dc=company,dc=hu
Ennél több adatot kell megadni a /etc/ldap/slapd.conf konfigurációs fájlban, ami az LDAP fő konfigurációit tartalmazza.

A már említett samba konfiguráció itt is megmutatja magát, egy schema fájlt kell a konfigurációba belinkelni. Ezt a schema fájlt a samba-doc csomaggal lehet telepíteni. Ez a schema fájl teszi lehetővé, hogy a PPTP és a Radius számára elfogadható módon legyenek titkosítva a felhasználók jelszavai.
A konfigurációs fájlban további néhány módosításra volt szükség, így nyerte el a következő formáját:
moduleload syncprov
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500
tool-threads 1
backend bdb
database bdb
suffix "dc=company,dc=hu"
checkpoint 512 30
directory "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
index objectClass,entryCSN,entryUUID eq
lastmod on
access to *
by dn="cn=admin,dc=company,dc=hu" write
by group.exact="cn=ldapadmins,ou=Groups,dc=company,dc=hu" write
by dn="cn=replicator,dc=company,dc=hu" write
by dn="uid=root,dc=company,dc=hu" write
by self write
by * read
by anonymous auth
overlay syncprov
syncprov-checkpoint 100 10
Tesztelés során a loglevel -t tanácsos 1-re állítani, így a syslogban bőbeszédű formában mutatja magát az ldap.

Az ldap tesztelésére a következő parancs jó lehetőség:
ldapsearch –x
A parancs hatására a teljes fa a konzolra kerül, ez lehetőség lehet az ldap fa mentésére is.
Ha a parancs a fa tartalmát mutatja, akkor az ldap működik és localhoston kommunikál. Ehhez nincs szükség autentikációra. Az ldap távoli elérésére az ldaps szolgáltatás szolgál.
Az ldap és ldaps beállításait, hogy mely címekről fogadják a kérést a /etc/default/slapd fájl tárolja.
A SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:///" sor azt jelenti, hogy localhoston a 389-es porton az ldap szolgál ki, távolról pedig az ldaps, ami a 636-os TCP portot használja.

SAMBA

A samba hagyományosan fájl és nyomtató megosztására szolgál, de jelen esetben a radius ldappal való kommunikációjában van szerepe. Ehhez a következő konfiguráció nyújt lehetőséget:
# Global parameters
[global]
client ntlmv2 auth = yes
password server = localhost
security = domain
realm = company.hu
workgroup = company.hu

dos charset = CP852
unix charset = ISO8859-2
workgroup = company.hu
netbios name = PDCx
server string = PDCx
smb ports = 139
map to guest = Bad User
passdb backend = ldapsam:ldap://127.0.0.1
enable privileges = Yes
username map = /etc/samba/smbusersmap
log file = /var/log/samba/log.%m
max log size = 1000
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
load printers = No
add user script = /usr/sbin/smbldap-useradd -m .%u.
add group script = /usr/sbin/smbldap-groupadd -p .%g.
add user to group script = /usr/sbin/smbldap-groupmod -m .%u. .%g.
delete user from group script = /usr/sbin/smbldap-groupmod -x .%u. .%g.
set primary group script = /usr/sbin/smbldap-usermod -g .%g. .%u.
add machine script = /usr/sbin/smbldap-useradd -w .%u.
logon script = %G.bat
logon drive = S:
domain logons = Yes
os level = 240
preferred master = Yes
domain master = Yes
dns proxy = No
wins support = Yes
ldap admin dn = cn=admin,dc=company,dc=hu
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Users
ldap machine suffix = ou=Computers
ldap passwd sync = Yes
ldap suffix = dc=company,dc=hu
ldap ssl = no
ldap user suffix = ou=Users
panic action = /usr/share/samba/panic-action %d
printing = cups
print command =
lpq command = %p
lprm command =

A fenti konfigot a /etc/samba/smb.conf tartalmazza.

Mint látható a konfiguráció az ldap adatbázis eléréséről is tartalmaz információkat.

Hozzászólások száma: 0

PPTP+RADIUS+LDAP VPN 3.

2010.07.31 18:31

PPTP+RADIUS+LDAP összeállítással készített VPN 3. rész


LDAP Adatbázis

Az ldap adatbázisa karakteres felületről is kezelhető, de a módosítás és törlés, valamint a fa létrehozása grafikus felületről sokkal áttekinthetőbb. Erre a célre használható a PHPLDAPADMIN nevű webes alkalmazás is.
Használata előtt be kell jelentkezni. Bejelentkezéshez a felhasználónév összetettebb, mint más alkalmazásoknál. Itt a cn=admin,dc=company,dc=hu a felhasználónév.

VPN felhasználó hozzáadása a webes felületről nem könnyebb, mivel a sambaLMPassword és sambaNTPassword értékek leképzéséhez szükség van egy mkntpwd nevű programra, ami a /usr/bin könyvtárban található. A felhasználó hozzáadásának megkönnyítése érdekében készült egy script, ami ldap-useradd.sh nevet kapta. Ezt konzolból kell kiadni. A script egyszerű, csak felhasználónevet és jelszót fog kérdezni. A felhasználó hozzáadásának sikerességéről tájékoztat.
Az LDAP sajátossága, hogy nem önállóan gondoskodik a felhasználót azonosító számról, a UserIdről, hanem az adatbázisba való feltöltéskor kell gondoskodni ennek ellenőrzéséről. A script ki lett egészítve egy funkcióval, melynek segítségével ellenőrzi az adatbázisban szereplő legnagyobb UID-t, majd az egyel növelt értéked adja az új felhasználónak.

Felhasználó hozzáadása:
intranet:~# ldap-useradd.sh
Felhasználónév: proba_felhasznalo
Jelszó: proba
adding new entry "uid=proba_felhasznalo,ou=VPN users,dc=company,dc=hu"

Success...
intranet:~#

A script maga:
#!/bin/bash
GROUPID='1001'
MKNTPWD='/usr/bin/mkntpwd'
GENSHA1='/usr/local/bin/gensha1.pl'
LDAP_BIND_DN='cn=replicator,dc=company,dc=hu'
LDAP_BIND_SECRET='replica'
LDAP_SUFIX='dc=company,dc=hu'
LDAP_USERS='ou=VPN users'
RETVAL=0
BASH='/bin/bash'
#---------------------------------Kovetkezo UID kiszamolasa
max_uid=$(ldapsearch -x | awk '/uidNumber/ { gsub ( /uidNumber:/,"",$1); print $2 ;}' | sort -r | head -n 1)
USERID=$( echo $max_uid+1 | bc)
#--------------------------------- Check required programs
[ ! -x $MKNTPWD ] && exit 1
usercount=1
while [ $usercount -ne 0 ]
do
        echo -n "Felhasznalonev:"
        read USERNAME
        usercount=`ldapsearch -x | awk -F \, '/dn: uid=/ {gsub(/dn: uid=/,"");print $1}' | grep -c $USERNAME`
        if [ $usercount -ne 0  ]; then
                echo  "Foglalt felhasznalonev"
        fi
done
echo -n "Jelszo: "
read PASSWORD
#--------------------------------- jelszo hashelese
LMPASSWD=`$MKNTPWD -L $PASSWORD`
NTPASSWD=`$MKNTPWD -N $PASSWORD`
LOCALSID=`net getlocalsid | awk -F ': ' '{ print $2 }'`
USERPASSWD=`slappasswd -s $PASSWORD`
#--------------------------------- Felhasznalo felvetele az adatbazisba
echo -e "dn: uid=$USERNAME,$LDAP_USERS,$LDAP_SUFIX\nobjectClass: top\nobjectClass: account\nobjectClass: posixAccount\nobjectClass: sambaSamAccount\nuid: $USERNAME\nuserPassword: $USERPASSWD\nloginShell: $BASH\nsambaSID: $LOCALSID\nsambaLMPassword: $LMPASSWD\nsambaNTPassword: $NTPASSWD\ncn: $USERNAME\nuidNumber: $USERID\ngidNumber: $GROUPID\nhomeDirectory: /home/ldap_users/$USERNAME" | \
ldapadd -x -D $LDAP_BIND_DN -w $LDAP_BIND_SECRET
RETVAL=$?

if [ $RETVAL -eq 0 ] ;
then
        echo 'Felhasznalo sikeresen hozzaadva!'
else
    echo 'Felhasznalo hozzaadasa sikertelen!!'
    exit 1
fi

Hozzászólások száma: 0

User mode Linux telepítése

2009.12.13 14:19

Az első lépésben létrehoztam az 500 Mb méretű fájlt, ami a képfájl lesz. A /dev/zero állományból töltöttem fel az 50 darab, 10Mb blokkméretű darabot. Ezzel elértem, hogy lett egy 500 Mb méretű, null értéket tartalmazó fájlom. Ezt a következő paranccsal értem el:
# dd if=/dev/zero of=uml bs=10M count=50
A következő lépésként ext3 fájlrendszert készítettem a következő módon:
# mkfs.ext3 uml

Az ext3 fájlrendszer egy gyakran használt, megbízható naplózó fájlrendszer.
A mount parancs segítségével felcsatoltam az mnt könyvtárba. A loop egy olyan eszköz, ami egy olyan fájlrendszer, amely mögött nincs fizikai meghajtó, általában egy fizikai tartalomról képzett fájl. A debootstrap csomag feltelepítése után használható arra, hogy a – arch után megadott processzor architektúrához tartozó, a rendszer működéséhez szükséges fájlokat a megadott könyvtárba letöltse. Forrásnak azt az elérési utat használja, amely a host gép forrása is. Ezt a forrást a /etc/apt/sources.lst fájlban lehet beállítani. Ahogy az alábbi parancsban látható és az etch nevezetű, jelenleg stable állapotban lévő rendszert töltettem le az mnt könyvtárba.
# mount -o loop uml /mnt/
# debootstrap --arch i386 etch /mnt/

A parancs futásának végeztével az 500 Mb méretű fájlból 275 MB körüli részt foglal el az alaprendszer.
A következő lépésként beállítottam az UML hálózati csatolóját. A chroot . parancs hatására az aktuális könyvtár válik a gyökérkönyvtárrá.
# cd /mnt/
# chroot .
/# nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway: 192.168.1.1

A következőkben felcsatoltam a proc fájlrendszert, amiben a rendszer az éppen futó alkalmazásokat és az aktuális rendszerinformációkat tárolja.
# mount -t proc proc /proc
# cd /dev/
/dev# MAKEDEV ubd
/# nano /etc/fstab
/dev/ubd / ext3 defaults 0 0
proc /proc proc defaults 0 0

Kiegészítés:
Az újabb  verziós Linuxoknál a fenti parancs nem működik jól, ezért a következőket kell tenni:
/dev# ls udb*
Ha nincs udb0, akkor a következő parancsokat kell futtatni:
mknod --mode=660 ubd0 b 98 0
chown root:disk ubd0
Továbbá a /etc/fstabba is ud0-t kell írni valamint indításkor is udb0-t kell megadni.)

Ezzel a lépéssel létrehoztam az UML elsődleges meghajtóját és a /etc/fstab- ban beállítottam a rendszer indulásakor az automatikus felcsatlakozást.
A későbbi keveredések elkerülése érdekében a /etc/hostname fájlban megváltoztattam a virtuális gép nevét.
A /etc/inittab fájlban a konzolok számát csökkentettem egyre, a szükségtelen sorokat # beillesztésével megjegyzéssé tettem, így a fájl indulásakor nem fogja figyelembe venni. Ha az UML elnyerte végső formáját, a maradék sort is megjegyzéssé teszem, így nem fog a hostgépen konzol nyílni.

1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
1.Kódrészlet

A legfőbb különbség az UML és más virtualizációs megoldások között az, hogy ez a megoldás nem tartalmaz hardver virtualizációt, az UML hozzáfér a hardver elemekkel. Ez különbözteti meg a hagyományos alkalmazásoktól. Ez a tulajdonság teszi szükségessé, hogy a hardver elemek kezeléséhez szükséges modulokat is az UML rendelkezésére kell bocsátani, ezért a host gép /lib/modules/$(uname -r) könyvtárát át kell másolni a képfájl ugyan ezen könyvtárába.
A másolás befejeztével az UML alaprendszer munkára kész állapotba kerül. Ebben az állapotában is készítettem róla másolatot. A másolat hálózati beállításait módosítani kell a /etc/network/interfaces fájlban.
Az UML és a host gép a tun/tap megoldással kommunikál. Ennek lényege, hogy a host gépen létre kell hozni egy- egy virtuális interfészt a /etc/network/interfaces fájlban minden egyes virtuális kiszolgálóhoz. A következő sorok beillesztésével:

auto tap0
iface tap0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
pre-up tunctl -t tap0
post-down tunctl -d tap0
auto tap1
iface tap1 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
pre-up tunctl -t tap1
post-down tunctl -d tap1
2.Kódrészlet

Telepíteni kell az uml-utilities, user-mode-linux csomagokat.

Hozzászólások száma: 0

Linux Gateway

2009.12.16 10:05

Gateway gép:

Bind9 Zóna hozzáadása:

a /etc/bind/named.conf fájlba a következő zónát kell beállítani:
zone "zona*.tilb.sze.hu" {
type master;
file "/etc/bind/db.zona*";
};
a * helyett a gép hostnevének utolsó karakterét (fekete9 esetén 9) kell írni
a db.local fájlról másolatot kell készíteni és a következőkétten kell átírni:
$TTL 604800
@ IN SOA fekete*.tilb.sze.hu. root.fekete*.tilb.sze.hu. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
fekete*.TILB.SZE.HU. IN NS <192.168.100.218>.
www IN A 10.1.9.10
mail IN A 10.1.9.11
www2 cname www
www1 cname www
ezután:
/etc/init.d/bind9 restart

DHCP beállítása:


/etc/network/interfaces
iface eth1 inet static
address 10.1.9.1
netmask 255.255.255.0
broadcast 10.1.9.255
network 10.1.9.0
ifup eth1
/etc/default/dhcp3-server
INTERFACES="eth1"
/etc/dhcp3/dhcpd.conf
subnet 10.1.9.1 netmask 255.255.255.0 {
range 10.1.9.100 10.1.9.200;
option router 10.1.9.1;
option broadcast-address 10.1.9.255;
next-server 10.1.9.1;
filename "pxelinux.0";
}
host www1 {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 10.1.9.10;
}
/etc/init.d/dhcp3-server restart

Tftp server beállítása:


A /etc/apt/sources.list/ fájlban található források közül egyik linket a böngészőbe másolva, majd a debian/dists/etch/main/installer-i386//images/netboot/netboot.tar.gz fájlig kell navigálni, majd a /tmp- be kell menteni.
 A tartalmát a /tftpboot könyvtárba kell másolni. Az itt szereplő @pxelinux.o fájlt adtuk meg a dhcp server konfigjában.
/etc/default/atftpd fájlban a
USE_INETD= true sort át kell írni USE_INETD=false - ra.
/etc/init.d/atftpd restart

Forwardot engedélyezni kell:


/etc/sysctl.conf
net.ipv4.ip_forwarding=1
sysctl -p- vel ellenőrizhetjük a beállításokat
sysctl -a
/proc/sys/net/ipv4/ip_forward fájl értékét 1- re kell állítani
iptables -A POSTROUTING -t nat -s 10.1.9.0/24 -o eth0 -j MASQUERADE

2. gép beállítása:


Egyszerűen feltelepítjük a rendszert.  - PXE boot, hálózati telepítés
Eztkövetően a következőket kell feltenni: apache2, proftpd mc gpm ssh squirrelmail host

Squirrelmail-configure


2(server setting), A(Update IMAP setting), 4(IMAP server), 10.1.1.11
B(Update SMTP setting), 4(SMTP server), 10.1.1.11
H, s q
mc
/etc/apache2/sites-available/ könyvtárban lévő default filet átmásoljuk ugyanide (SHIFT
F3) www1 névre

Apache 2


Mcedit /etc/apache2/sites-available/

Defaultba :


NameVirtualHost *:80

www1-ben

#NameVirtualHost *

ServerName www1.zona*.tilb.sze.hu
DocumentRoot /var/www/www1/
Directory /var/www/www1/
Redirct Mach….elé komment
Errorlog sor vég ez lesz: www1-error.log
CustomLog sor végére www1-access.log
Megcsinálod a www2-re is
Sites-enabled
@000-default-ról másolat (Shift
f3) @001-www1 néven
Megcsinálni www2 re is

@001-www1 (CTRL
X
S) sor végére www1
@002-www2 (CTRL
X
S) sor végére www2
Adduser www1
Adduser www2
Chsh –s /bin/false www1
Chsh –s /bin/false www2
Chown www1:www-data /var/www/www1
Chown www2:www-data /var/www/www2
Chmod 750 /var/www/www?
Ellenőrzés: Ls –l /var/www

Cd /var/www/www1
Echo „www1” > index.html
www2-re is,de átlépni a másik könyvtárba
apache2 restart
Install links
Host www1
Host www2
Links http://www1.zona1.tilb.sze.hu

Postfix config:

OK
internet site = OK
where should mail for root go = root
mail name = gepnév&szám.tilb.sze.hu (plö: fekete3.tilb.sze.hu)
other destinations... = OK
force szinkron = NEM
config SSL certificate:
country name = HU
State = GyMS
Locality = Gyor
amit akarsz
amit akarsz v.2
host name = OK
email address = OK
#megnézni vége

Proftpd conf:


Valahova beírni:
DefaultRoot /var/www/www1 www1
DefaultRoot /var/www/www2 www2
/etc/shells fájl végére beírni /bin/false
Restart proftpd
Próba: ftp: www1@localhost

Előfordul, hogy a proftpd lassú, a felhasználók lassan tudnak könyvtárat váltani és a le- és feltöltések is lassan mennek.
Ezt elkerülendő a következő sorokat kell beilleszteni a /etc/proftpd/proftpd.conf fájlba:

UseReverseDNS off

IdentLookups off


Hálózati Operációs Rendszerek Programozása

Debian Sarge telepítés

linux26
hálózat konfigurálása = eth1
gépnév =
hálózati domain = tilb.sze.hu
válasszon tükröt = Magyarország
debian tükör =
HTTP-proxy = üresen
kézzel szerkesztjük a particiós táblát
1. elődleges (sda1)
felhasználás = ext3
particíó formattálása
csatlakozási pont = / gyökérfájlrendszer
partción végzett műveletek befejezése
változások lemezre kiírása

lemezeket partícionálása = igen

a /dev/hda főrendszerbetöltő-rekordot választjuk
apt configurálása = ftp
magyarország – ftp.bme.hu
ha nincs magyar billentyűzetünk, akkor : loadkeys hu (ijjedgy meg:)
a telepítés előtt:
dselect update és apt-get upgrade kell!!!
egér telepítése:
apt-get install gpm
konfigurálás:
“nem”, “nem”!
/dev/psaux (ha nem, akkor majd át kell állítani a /etc/gpm.conf -ban a device=... sort -> device=/dev/input/mice -ra)!
ok
autops2 -> ok


Postfix config:

OK
internet site = OK
where should mail for root go = root
mail name = gepnév&szám.tilb.sze.hu (plö: fekete3.tilb.sze.hu)
other destinations... = OK
force szinkron = NEM

config SSL certificate:
country name = HU
State = GyMS
Locality = Gyor
amit akarsz
amit akarsz v.2
host name = OK
email address = OK

MCEDIT használata


belépés nézőkében F3
belépés szerkesztésre F4
keresés F7
mentés F2
kilépés Esc
Esc, vagy F10

apache konfigurálása kézzel:
mcedit /etc/apache/httpd.conf

ezen belül:
serveradmin webmaster@localhost helyett ServerAdmin webmaster@gépnév&szám.tilb.sze.hu
ServerName localhost helyett ServerName gépnév&szám.tilb.sze.hu
AllowOverride None helyett AllowOveride AuthConfig

mcedit /etc/sqirrelmail/apache.conf
Alias /sqirrelmail /usr/share/squirrelmail helyett Alias /mail /usr/share/squirrelmail


postaládák létrehozása:
maildirmake.courier ~/Maildir
export MAIL=~/Maildir
ellenőrzés: echo $MAIL (ha ez /root/Maildir akkor jó)
belépünk más felhasználóként:
su “felhasználó” (amit létrehoztunk)
maildirmake.courier ~/Maildir
export MAIL=~/Maildir
ellenőrzés: echo $MAIL (ha ez /root/Maildir akkor jó)
majd visszalépünk root-ra!

postfix configfájl:
mcedit /etc/postfix/main.cf

myhostname = gépnév&szám
myhostname után: home_mailbox = Maildir/
ha van mailbox_command = procmail -a "$EXTENSION" ilyen sorunk, elé # -et rakunk

/etc/init.d/apache restart
/etc/init.d/postfix restart

állítsa be hogy a /mail alatt lévő squirrelmail automatikusan 443-as portra legyen irányítva.
RewriteEngine On
RewriteRule ^/mail https://szervernev/mail


DHCP


apt-get install dhcp3-server ipcalc
config menu
min osztjuk a netet? = eth0
OK

példa: 10 gépnek osztunk IP-t. az ipcalc segítségével számoljuk ki a maskot, meg társait!
ipcalc 192.168.0.0/28
Address: 192.168.0.0 11000000.10101000.00000000.0000 0000
Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111
=>
Network: 192.168.0.0/28 11000000.10101000.00000000.0000 0000
HostMin: 192.168.0.1 11000000.10101000.00000000.0000 0001
HostMax: 192.168.0.14 11000000.10101000.00000000.0000 1110
Broadcast: 192.168.0.15 11000000.10101000.00000000.0000 1111
Hosts/Net: 14 Class C, Private Internet

config fájl:
mcedit /etc/dhcp3/dhcpd.conf

subnet 192.168.200.0 netmask 255.255.255.240 {
range 192.168.200.2 192.168.200.14;
option domain-name-servers 192.168.0.1, 193.224.128.1;
option domain-name "tok.sth.sze.hu sth.sze.hu sze.hu";
option routers 192.168.200.1;
option broadcast-address 192.168.200.15;
default-lease-time 600;
max-lease-time 7200;
}

mcedit /etc/network/options
ip_forward=yes

mcedit /etc/network/interfaces
auto eth0 eth1
iface eth1 inet dhcp

iface eth0 inet static
address 192.168.200.1
netmask 255.255.255.240
broadcast 192.168.200.15
network 192.168.200.0

/etc/init.d/dhcp3-server restart
/etc/init.d/networking restart

.htaccess .htpasswd
/var/www-be egy könyvtárba
touch index.html
touch .htaccess
authname "protected area, passwd pls!"
authtype basic
authuserfile /etc/apache/.htpasswd
require valid-user
touch /etc/apache/.htpasswd
cat /etc/shadow | grep root > /etc/apache/.htpasswd

virtuális host:
mcedit /etc/apache/httpd.conf
NameVirtualHost *:80

ServerAdmin root@fekete*.tilb.sze.hu
DocumentRoot /var/www/ajto
ServerName ajto.tilb.sze.hu

Állítson be felhasználó azonosítást egy alkönyvtárra Apache-csal!

mcedit /etc/apache/httpd.conf
Szerkeszd át a AllowOverride None -t AllowOverride AuthConfig
touch /var/www/.htaccess
echo „AuthType Basic
AuthName \"ezjelenik meg majd\"
AuthUserFile /home/gecko/public_html/.htpassword
Require user gecko”
htpassword -c /ahol/ajelszofilevan/ gecko
/etc/init.d/apache restart)))
***

sshd autentikáció

/etc/ssh/sshd.conf
legvégén UsePAM = NO

ssh-keygen -b 1024 -t dsa
ssh-copy-id -i .ssh/id_dsa.pub ize@ize.tilb.sze.hu


proftpd
apt-get install proftpd
config:
standalone

settings
mcedit /etc/proftpd.conf

User ftp
Group nogroup
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Cosmetic changes, all files belongs to ftp user
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot


DenyAll



squid

apt-get install squid
visible_hostname pc9.tilb.sze.hu
http_port 8080
acl labor src 192.168.0.0/255.255.255.0
http_access allow labor
/etc/init.d/squid restart
export http_proxy=http://localhost:8080
lynx http://www.google.co.hu

iptables szabályok!!!
iptables -P INPUT DROP
iptables -F INPUT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT

courier pop és imap telepítése
apt-get install courier-pop-ssl courier-imap-ssl

levélküldés a rootnak:

Hozzászólások száma: 0

Partimage használata

2010.02.15 14:25

A partimage és partimage és partimage-server csomagok segítségével bármely partíció menthető a helyi lemezre (természetesen másik partícióra) vagy egy távoli szerverre. Most a szerverre való mentés és visszaállítás folyamatát ismertetem röviden.

Szerver telepítése


A szerver távolról való eléréséhez be kell jelentkezni. Bármely felhasználó alkalmas, el van véve a partimage-server users fájljába és bejelentkezhet az adott szerverre.
A telepítés első lépése a felhasználó hozzáadása a következő parancssal:
adduser ${felhasználó neve} –shell /bin/false
A szerver biztonsága érdekében a felhasználó shellje /bin/false, így nem jelentkezhet be a szerverre sem konzolról sem távolról pl ssh-n keresztül.
A következő lépés a felhasználó nevének /etc/partimaged/partimagedusers fájlba való felvitele.
A szerveren jellemzően a /home könyvtár alatt van bőségesen tárhely, így célszerű a mentett image fájlokat is ide felvinni. Ennek módja a /etc/default/partimaged fájl szerkesztése és a TARGET=/var/lib/partimaged/ helyett a felhasználó home könyvtárának megadása:
TARGET=/home/image
Ezzel a partimage-server beállítása el is készült. Utolsó lépés a módosítások érvényesítése, a szolgáltatás újraindítása:
debian:~# /etc/init.d/partimaged restart

Kliens gép partíciójának mentése


A legfontosabb szabály a partíció mentésével kapcsolatban, hogy a használatban lévő partíció mentése kerülendő. Az adott rendszert nem használat közben kell menteni. Ennek megoldására több lehetőség kínálkozik:
  • A gépre telepített más operációs rendszerről kell
  • Live rendszerről (pl System Rescue CD)
A partimage kényes arra, hogy a kliens és a szerver verziója megegyezzen. Ezt mindig figyelembe kell venni!
A Partimage NTFS fájlrendszerű partíciók mentésére ahsználható, bár figyelmeztet, hogy ez még fejlesztés alatt áll. A dokumentáció megnyugtat, hogy amennyiben sikerül lementeni, akkor sikerülni fog visszafejteni is. Amennyiben nem sikerül menteni, defragmentálást (töredezettség mentesítést) kell végezni
Partíció mentésének folyamata:
  • Menteni kívánt partíció kiválasztás
  • Képfájl nevének megadása
  • Partimage szerver IP címének megadása
  • Autentikáció(a telepítésnél megadott felhasználónévvel és jelszóval.)
  • Tömörítési szint beállítása, maximális fájlméret megadása (Csak akkor kell 2 GB-os méretű darabra vágni a célfájlt, ha pl. Samba megosztáson keresztül kívánjuk azt visszafejteni. Partimage szerver használata esetén nem.)

Kliens gép adatainak visszaállítása


  • Partíció visszaállításának folyamata:
  • Partíció kiválasztása (előzőleg a megfelelő méretűre létre kell hozni)
  • Képfájl nevének megadása
  • Partimage szerver IP címének megadása
  • Autentikáció(a telepítésnél megadott felhasználónévvel és jelszóval.)
Hasznos ötletek:

Amennyiben véletlenül nem lett kikapcsolva az imagefájl darabolása a következő paranccsal helyrehozható a hiba:
cat winxp.000 winxp.001 > winxp
Ezzel a paranccsal újra egyesíthető a darabolt fájl.

A Partimage használható parancssorból is. A következő parancsban megadunk minden változót a partíció visszaállításához, a kiadását követően már csak jóvá kell hagyni a módosítást és már megy is a visszaállítás:

partimage -s[szerver IP] -p4025 -U[felhasználónév] -P[jelszó] restore /dev/sda1 [image fájl neve]

Ha új merevlemezre állítjuk vissza az adatokat, vagy újrapartícionált lemezről van szó, akkor az MBRt (Master Boot Record) is vissza kell állítani. Ez a merevlemez első 512 bájtja, ami az operációs rendszer elindításával kapcsolatos információkat tartalmaz. Az MBRt is lementi a Partimage, amikor mentést végünk egy partícióról, így ugyanabból az image fájlból vissza lehet állítani.

Tehát az MBR visszaállítása:

partimage -s[szerver IP] -p4025 -U[felhasználónév] -P[jelszó] restmbr [image fájl neve]



Hozzászólások száma: 0

CD írása konzolból

2010.01.12 16:34

Egy hasznos parancsot mutatok be -nem túl részletesen-, amivel parancssorból lehet cdt írni.
Hasznos eszköz, ha optikai lemezre kell menteni. Nem a legmegbízhatóbb megoldás ez tény, de ha a pénztárca szab határt, akkor a semminél ez is több.

A cdrecorder csomagról lesz szó néhány mondatban.
A használat előtt meg kell adni neki, hogy melyik eszközt kívánjuk használni.

Nem kell találgatni, ugyanis a következő paranccsal ki lehet íratni az elérhető eszközöket:
debian:~#  cdrecord dev=ATA: -scanbus
WARNING: the ATA: method is considered deprecated on modern kernels!
Use --devices to display the native names.
scsibus0:
        0,0,0     0) 'HL-DT-ST' 'DVD-RAM GH22NP20' '1.00' Removable CD-ROM
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
debian:~#

Az aláhúzással jelölt sor az ami nekünk hasznos információ.

A példában a /media/DATA/save könyvtár tartalmát írjuk ki, ehhez a következő parancs kell:

debian:~# cdrecord -v -dev=ATA:0,0,0 speed=48 /media/DATA/save/*

Ez a parancs egyszerűen használható automatizált mentésnél scriptből futtatva.


Hozzászólások száma: 0

Dropbox KDE-vel

2010.01.04 20:19

Pendrive helyett Dropbox.

Ezzel az ingyenes alkalmazással a számítógépeim között tudok (ingyenesen minimum 2GB) adatot cipelni. Ehhez nem kell mást tenni, csak letölteni a dropbox.com weboldalról a kliens programot, feltelepíteni és regisztrálni.

A telepítés utolsó lépéseként ki kell választani, hogy hova szeretnénk tenni a Dropbox könyvtárunkat.

A probléma akkor kezdődik, amikor olyan ablakkezelőn szeretnénk asználni ezt az alkalmazást, ahova még nem készült el a kompatibilis klien sprogram. Én KDE ablakkezelőt használok és a következő képpen telepítettem a programot:

  1. Letöltöttem a Linuxos kliens programot innen.
  2. Kitömörítettem a csomagolt fájlt, majd a benne lévő .dropbox-dist könyvtárat a felhasználóm home könyvtárába másoltam.
  3. A .dropbox-dist/dropboxd fájlról symlinket készítettem a ~/.kde/Autostart/ könyvtárba, ezzel gondoskodva arról, hogy legközelebb is elinduljon a program.
  4. Hogy azonnal használatba vehessem a programot futtattam a dropboxd fájlt.
A regisztráció megkezdéséhez kattints a következő képre: Dropbox regisztráció

A leírás a http://antrix.net/journal/techtalk/dropbox_kde.html oldalról származik

Hozzászólások száma: 0

Mailboxban tárolt emailek konvertálása Maildirbe

2009.12.09 8:53

Alkalmanként előfordul az emberrel, hogy -postfix telepítése közben- elfelejti a home_mailbox = Maildir/ dort beletenni a /etc/postfix/main.cf konfigfájlba és késöbb esik le, hogy a levelek nem az elvárt helyen tárolódnak.
Nincs semmi veszve. A következő paranccsal át lehet konvertálni a mailboxban tárolt email üzeneteket a kívánt maildirbe:

mb2md -s /var/mail/root -d /root/Maildir

A sikeres konvertálás után valami hasonló látható a konzolban:

Converting /var/mail/root to maildir: /root/Maildir
Source Mbox is /var/mail/root
Target Maildir is /root/Maildir
1 messages.


Hozzászólások száma: 0

Grub visszaállítása

2010.01.04 10:45

Előfordul, hogy az ember Linuxot és Windowst is használ egy számítógépen. Ilyenkor az esetek döntő többségében a Windows újratelepítésére kerül sor gyakrabban - ennek megvannak az okai...

A gyakorlott felhasználó a windows újratelepítése előtt elmenti az MBR-t Master Boot Record, a merevlemez első 512KBját, hogy újratelepítés után egyszerűen csak vissza kelljen másolnia és minden mehet tovább.

A fenti feladatra a következő parancs használható:

dd if=/dev/sda of=/boot/mbr bs=512k count=1

Nos, ha a fentit elfelejti az ember, akkor bizony újra kell telepíteni a grubot a windows után.

Ehhez én a System Rescue CDmet használtam, ami egy nagyon hasznos eszköz az ember életében.

A CDről való bootolás után a következő parancsokat adtam ki:

mkdir /mnt/linux_disk
mount /dev/sda5 /mnt/linux_disk
grub-install --root-directory=/mnt/linux_disk /dev/sda

Ezt követően megnyugtató üzenetet kaptam:

Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

És ment is minden ahogy régen...

Hozzászólások száma: 0

Swap terület készítése telepítés után

2010.01.02 20:17

A swap terület kifejezéssel Linux rendszereknél gyakran találkozni. Nevezik például cserehelynek, virtuális memóriának és pagefájlnak is. Utóbbi kifejezés a windows felhasználók számára lehet ismerős, hiszen a virtuális memória tartalma valójában - alap állapot szerint - a C meghajtó gyökerében a pagefile.sys fájlban tárolódik.

Mindenki számára ismerős lehet a számítógép RAM nevű alkatrésze. Kivétel nélkül minden számítógépben megtalálható, ennek tárterülete és sebessége nagyban befolyásolja a számítógép sebességét. A RAM a Random Access Memory kifejezésből ered. Magyarra fordítva véletlen elérésű memória szavakra lehet fordítani.
Ha van ilyen alkatrész akkor mért is kell virtuális memória? - merül fel a kérdés.

Az operációs rendszerek rendszerint akkor  használják a virtális memóriát, amikor a fizikai memória fogytán van. Sajnos ennek használata csak félmegoldást jelent, hiszen az egész gép működése lelassul. A lassulás oka nem más, mint a RAM és a virtuális memória írás és olvasási sebessége között nagyságrendi különbség van - természetesen a RAM mellett álló szám sokkal kedvezőbb.

Ha naívan úgy gondoltuk, hogy 2010-et írva nekünk nincs szükségünk swap területre, nem mondhatjuk, hogy feltétlenül tévedünk. Manapság, mikor a számítógépekben több gigabájt memória található mért is lenne létjogosultsága a virtuális memóriának?
Elsősorban arra az esetre kell felkészülni a swap létrehozásával, amikor ez a nagy mennyiségű RAM sem elegendő egy alkalmazás futtatásához. Ha telepítéskor nem hoztuk létre a virtuális memória számártet, akkor szerencsétlen csak a fizikai memóriával tud dolgozni. Ha ez elfogy akkor bizony komoly probléma merül fel.

A következő parancsok kiadásával lehet beállítani swap területet egy telepített linux rendszeren.
A következő parancsok Ubuntu és Debian esetén érvényesek, más disztribúcióknál eltérő lehet.

Első lépésként létre kell hozni egy fájlt. Ennek a fájlnak a mérete meghatároza a swap méretét.

# dd if=/dev/zero of=/swap count=500 bs=1024k
500+0 beolvasott rekord
500+0 kiírt rekord
524288000 bájt (524 MB) másolva, 24,4042 mp, 21,5 MB/mp

A következő lépésben az mkswap parancs segítségével a átalakítottam a fájl fájlrendszerét:
# mkswap /swap

Az utolsó lépés az új swap terület használatba vétele:
swapon /swap


Ezel el is késült az új virtuális memória, a free parancs kiadásával ellenőrizhető:
# free
             total       used       free     shared    buffers     cached
Mem:       1025312     982404      42908          0       6068     344472
-/+ buffers/cache:     631864     393448
Swap:       511992       5036     506956


A legalsó, Swap: sor változott, eddig 0 szerepelt minden oszlopban.

Végül gondoskodni kell arról, hogy újraindulás után automatikusan használja a swap területet a rendszer.

Ehhez az /etc/fstab fájlba a következő sort kell beírni:

/swap   swap    swap    0       0


Hozzászólások száma: 0

MySQL Triggerek

2009.12.18 13:21

Az embernek sokmindenre magától kell rájönnie. Van amit meg lehet tanulni iskolában és van amit nem. A harmadi kategória, amit tanítanak iskolában, de nem ott, ahova én jártam... :)

Az emberre ráragad az adatbáziskezelésből  is néhány dolog az "évek során".  Ez az a "Hallottam már róla" érzés.
Nos énis így voltam az SQL Triggerekkel, Procedure-kal és tranzakciókkal.  Mígnem egyszer eljött a nap, mikor olyan problémába ütköztem, aminél MySQL Trigger volt a megoldás kulcsa.

A probléma szavakkal így néz ki: Egy Joomla tartalomkezelőhöz készítettem olyan regisztrációs űrlapot, amin a felhasználónév, jelszó és email cím mellett több adatot ki kell tölteni. Mivel nem találtam a Joomlához ilyen kiegészítést (lehet, hogy van), ezért más úton oldottam meg.
A megoldás szavakkal: Készítettem egy űrlapot, megnéztem, hogy az adatbázis melyik táblájába menti a felvitt adatokat, majd beillesztettem a triggert az adatok adattáblába való mentése elé (BEFORE INSERT).

Nem szeretnék sokat írni az alábbi triggerről, csak néhány gondolatot:
  • A delimiter egy hasznos dolog. Ez magyarra fordítva elválasztót jelent. Nos a MySQLben az elválasztó alapértelmezetten a ; pontosvessző. Ezt a delimiter paranccsal lehet módosítani. Hogy mért van erre szükség? Mivel a triggeren belül  - ahogy látható - több művelet zajlik. Ezzel aparanccsal állítható a karakter, ami a trigger végét is jelzi.
  • A triggereknél állítható, hogy az mikor fusson. Itt látható, hogy a jos_regi_ckforms_1 táblát figyeli és minden beillesztés előtt lefut.
  • A declare sorban a trigger futása során használni kívánt változókat kell meghatározni. Jelen esetben ezek számok.
  • A SET NEW.pass = md5( NEW.pass ); egy érdekes dolog. Konyhanyelven így szólna a sor: A beszúrni kívánt pass váltózó értéke legyen az md5-tel képzett hash értéke. Tehát ezzel a módszerrel lehet változtatni a beszúrni kívánt adat értékét
  • A select id into aro_id from még érdekes lehet. Nem szükséges változóként menteni a lekérdezett adatot, egyből mehet a céltáblába.
És a triger maga:
delimiter |
drop trigger user_insert |
CREATE trigger user_insert BEFORE INSERT ON jos_regi_ckforms_1
FOR EACH ROW
BEGIN
declare user_id, aro_id integer;
SET NEW.pass = md5( NEW.pass );
SET NEW.pass1 = md5( NEW.pass1 ) ;
INSERT INTO jos_regi_users (name,username,email,password,usertype,gid,registerDate) VALUES
 ( NEW.name, NEW.username, NEW.email, NEW.pass, 'Registered', 18, now() );
select id into user_id from jos_regi_users where  name = NEW.name AND
username = NEW.username;
INSERT INTO jos_regi_core_acl_aro
(section_value,value,order_value,name,hidden) VALUES
('users',user_id,0,NEW.name,0);
select id into aro_id from jos_regi_core_acl_aro where  value = user_id;
insert into jos_regi_core_acl_groups_aro_map (group_id,aro_id) VALUES
(18,aro_id);
END;
|
delimiter ;



Hozzászólások száma: 0

Gzip hálózaton keresztül

2009.11.26 12:32

A következő parancs segítségével úgy másolhatunk egy egész könyvtárat a hálózaton keresztül, hogy az adatok csak a hálózaton való áthaladás során vannak tömörített állapotban, amint megérkeznek a cél gépre, rögtön kitömörítésre kerülnek.
Ez akkor igazán hasznos, ha a forrás és a cél gép is megfelelően nagy processzor erőforrással rendelkezik, de a hálózati sávszélesség korlátozott.
Az előnye nagy mennyiségű adat másolásakor jelentkezik.

ssh 192.168.16.2 "tar c -C /var/cache/apt -f - . | gzip -c " | gunzip -c |tar -x -f -

Hozzászólások száma: 0

User mode Linux futtatása

2009.12.13 14:20

Az UML futtatásához szükséges az uml-utilities csomag telepítése.
UML indítása

# linux ubd0=/media/uml eth0=tuntap,tap0,, mem=128M

Az ubd0 után meg kell adni, hogy éppen melyik képfájlt szeretném használni, az eth0 után pedig azt, hogy a virtuális gép eth0 hálózati csatolójának melyik, a hoston létrehozott tap eszköz lesz a párja. A rendelkezésére álló memória méretét a mem opció után lehet beállítani. A parancs futtatását követően a rendszer indulásához hasonló folyamat megy végbe. Eredményeként megjelenik a konzol, amibe jelszó nélkül lehet bejelentkezni root felhasználóként. Az első teendő a root felhasználó jelszavának megváltoztatása és egy átlagos jogosultsággal rendelkező felhasználó létrehozása. Következő lépés a működés vizsgálatára a hálózat ellenőrzése. A host gép bármely tap csatlakozójának sikeres pingelése nyugtázza, hogy a hálózati kapcsolat a virtuális és host gép között megfelelően működik.
Következő lépésként a host gépen utat kell nyittatni az UML- nek a külső hálózat felé, gondoskodni kell a válasz üzenetek megérkezéséről, ezt a második parancs eredményezi.

# iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE

# echo "1" > /proc/sys/net/ipv4/ip_forward

Az előző tűzfalszabályokat szintén a /etc/rc.local fájlba kell bemásolni, hogy induláskor lefussanak.
A távoli elérés érdekében a legelső csomag az ssh, amit telepítettem. Ennek sikeressége és kipróbálása után a /etc/inittab fájlban komment (#) jelet tettem a maradék konzol sora elé.
Ezzel a lépéssel az alaprendszer működőképessé vált, csak a hálózati beállítások módosítása szükséges a sokszorosításához.
Az UML-ek indulását automatizáltam a host gép indulásával, így egy esetleges leállás után is hamar helyreáll a rendszer. Ehhez a screen csomag telepítésre volt szükség. A screen parancs hatására a felhasználó konzolján egy virtuális konzol nyílik. Ez hasznos eszköz olyan feladatok futtatásánál, amelyeket távolról szeretnénk futtatni, de folyamatosan a képernyőre írnak, vagy nem tehetők háttér alkalmazássá.
Az automatikus indításhoz létrehoztam két egyszerű scriptet:

#!/bin/sh

linux ubd0=/media/uml_apache eth0=tuntap,tap0,, mem=128M ;
3.Kódrészlet

#!/bin/sh

linux ubd0=/media/uml_sql eth0=tuntap,tap1,, mem=128M;
4.Kódrészlet

A létrehozott szkriptekre futtatási jogot adtam a chmod +x startuml_{apache,sql} paranccsal.
A /etc/rc.local nevű script minden rendszerinduláskor lefut, így ide helyeztem az indító parancsokat:

screen -S apache -md startuml_apache;

screen -S sql -md startuml_sql;
5.Kódrészlet

A screen parancs –S kapcsolója nevet rendel a virtuális konzolhoz, a –md kapcsoló után pedig a futtatni kívánt alkalmazás nevét lehet írni. Az előző beállítások azt eredményezték, hogy a host gép indulásakor automatikusan indul el a két virtuális kiszolgáló, amelyek a fenti parancs kiadását követően 20 -25 másodperccel készen állnak a munkára.

Hozzászólások száma: 1