CentOS 4:Installation

Aus Fortinet Wiki
Zur Navigation springen Zur Suche springen


Vorwort

Das Ziel dieser Installations-Anleitung ist ein möglichst schlankes Linux CentOS 4 Update 5 (4.5) zu installieren und auf Sicherheit zu achten.


Test- und Installationsmaschinen waren:

Sun Microsystem M2 X2100
2800 MHz, 2 GB RAM, s-ATA 250GB HD

Datenschutz

        *********************************************************************
        *                                                                   *
        *  THIS FILE MAY CONTAIN CONFIDENTIAL, PRIVILEGED OR OTHER LEGALLY  *
        *      PROTECTED INFORMATION. YOU ARE PROHIBITED FROM COPYING,      *
        *    DISTRIBUTING OR OTHERWISE USING IT WITHOUT PERMISSION FROM     *
        *                  ALSO SCHWEIZ AG SWITZERLAND.                     *
        *                                                                   *
        *********************************************************************

"Die in diesen Artikeln enthaltenen Informationen sind vertraulich und dürfen ohne
schriftliche Zustimmung von der ALSO Schweiz AG gegenüber Dritt-Unternehmen nicht 
                         bekannt gemacht werden"

Installation der Install-CD

Lege die CD oder DVD ins Laufwerk ein und starte die Maschine. Achte darauf das im Bios das CD oder DVD Laufwerk als erstes Boot Device aufgefuehrt. Sobald der Prompt erscheint gebe ein

       boot: linux

NOTE
Die Nachfolgenden Information sind ein Anhaltspunkt und koennen jenachdem von Release zu Release Abweichungen aufweisen. Die Nachfolgenden Infos sollen als Anhaltspunkt dienen.

Nach erfolgreichem Aufstarten erscheint ein Dialog mit dem man das Medium testen kann. Wir waehlen hier:

       Skip

Wir waehlen die Sprache fuer die Installation:

       English

Wir waehlen das Keyboard Layout:

       sg-latin1

Wir waehlen die Monitor Aufloesung:

       Monitor 640x480

Wir waehlen die Art der Installation:

       Custom

Wir wahlen die Art der Partitionierung:

       Autopartition

Eine Warnung erscheint das alle Daten verloren gehen:

       OK

Welche Festplatte soll benutzt werden fuer die Installation und welche bestehenden Partitionen sollen entfernt werden etc:

       Remove all partitions on this system
       
       [*] sda

Wenn es sich um eine IDE Disk handelt so erscheint "hda" anstelle von "sda" dh. sda= SCSI und hda= IDE! Nach der Bestaetigung wird das vorgegebene "Layout" der Disk angezeigt. Achte darauf das folgende Hinweise eingehalten werden:

       Die Partition /boot kann geloescht werden
       Die Partition swap sollte mind 2 X die RAM Groesse aufweisen
       Erstelle eine neue Partitin /var mit 1024 MB

Sofern noetig wechsle die Angaben anhand der "Cursor" Tasten dh. waehle zuerst die entsprechende Partition aus mit dem "Cursor" und gehe danach mit der "Tabulatoren" Taste auf Edit usw. Nach erfolgreicher Modifikation ergiebt sich folgendes Bild:

       Device              Start      End        Size         Type        Mount Point
       
       /dev/sda
       sda1                1          326        2557M        ext3        /
       sda2                327        457        1027M        ext3        /var
       sda3                458        522         509M        swap        

NOTE
Die Start und End Points koennen von System zu System varieren!


       ACHTUNG
       Im Falle einer Konfiguration eines Mirrors (RAID 1) muess die Partitionen indem Sinne angelegt 
       werden das diese als Typ auf "Software Raid" stehen dh. es werden keine "Mountpoints" vergeben 
       sondern es wird nur Platz geschaffen um spaeter die Partitionen einem "Mountpoint" zuzuweisen. 
       Die vorgehende vorgehensweise muss auf beiden Festplatten identisch durchgefuehrt werden. Nach 
       der Erstellung aller Partitionen als "Software Raid" koennen diese dann ueber die Menueposition 
       "RAID" zusammengefuegt werden zB.
       
       /           RAID 1        /dev/sda1        /dev/sdb1        wird zu /dev/md1
       /var        RAID 1        /dev/sda2        /dev/sdb2        wird zu /dev/md2
       swap        RAID 1        /dev/sda3        /dev/sdb3        wird zu /dev/md3

Wenn nach einer Installation eines hier beschriebenen "Raid 1" sprich eines Mirrors der Server nach der Installation des OS nicht mehr bootet so fuehre folgendes aus:

       --> Setup von GRUB: (Setzt vorraus das Grub bereits installiert wurde)
       1. Boote als Erstes den Server neu mit der CD 1
       2. Sobald der Boot Dialog erscheint gebe ein:
       
       linux rescue
       
       3. Als naechstes muss die Sprache angegeben werden:
       
       English
       
       4. Nun das Keyboard Layout:
       
       sg-latin1
       
       5. Nun hat man die Moeglichkeit die Linux Partition als "read-only" oder "read-write" zu mounten 
          dh. wir waehlen "read-write":
       
       Continue
       
       6. Damit man nun die Partition mounten kann gebe ein:
       
       chroot /dev/sysimage
       
       8. Nun starte GRUB und fuehre folgende Modifikation durch:
       
       # grub
       
               grub> root (hd0,0)
       
                Filesystem type is ext2fs, partition type 0xfd
               
               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)"...  16 sectors are
                embedded.
                succeeded
                Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p
               (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
               Done.
       
       9. Danach logge dich aus mit "quit" und "exit". Sobald man ausgeloggt ist wird ein Neustart durchgeführt.

Weitere wichtige Informationen finden man auf:

       http://balrog.nmglug.org/pipermail/nmglug/2005-September/001229.html

Waehle den "Boot-Loader":

       Use GRUB Boot Loader

Im folgenden Dialog haette man die Moeglichkeit dem "Kernel" beim "Boot-Prozess" spezielle Optionen mitzugeben:

       *        CentOS Core        /dev/sda1

Die "Boot-Partition" steht nun fest jedoch noch nicht wo der "Boot-Loader" selber installiert werden soll. Wir waehlen im naechsten Dialog dies aus und zwar:

       /dev/sda        Master Boot Record (MBR)

Nach erfolgreicher Bestaetigung erscheint der Dialog um die "Netzwerkkarte" zu konfigurieren. Wir konfigurieren wie folgt:

       [ ] Configure using DHCP
       [*] Activate on boot
       
       IP Address                     192.168.101.34
       Netmask                        255.255.2550

Bestaetige die Modifikation mit "Ok". Als naechstes muss der "Gateway" sowie die "DNS Server" konfiguriert werden. In unserem Fall sieht das wie folgt aus:

       Gateway:              192.168.101.120
       Primary DNS:          192.168.100.125
       Secondary DNS:        192.168.100.194
       Tertiary DNS:

Wiederum bestaetige die Eingaben mit "OK". Als naechstes vergeben wir dem Server einen "Hostnamen":

       (*) manually                syrus

Als naechstes koennte eine "FireWall" eingeschaltet werden jedoch dies ist in unserem Fall unnoetig und deshalb deaktvieren wir die "FireWall":

       ( ) Enable firewall  (*) No firewall

Bestaetige die Auswahl mit "OK". Es erscheint nach erfolgter Bestaetigung nochmals einen Hinweis betreffend der "FireWall" etc. Waehle:

       Proceed

Im naechsten Dialog ist per Standard die Sprache "English" ausgewaehlt und es koennten noch mehr Sprachen ausgewaehlt werden jedoch ist dies fuer ein Server unnoetig. Also kontrolliere das folgender Eintrag angewaehlt ist und bestaetige diesen mit OK:

       (*) English (USA)

Nun fehlt noch die "Zeitzone". Waehle die entsprechende an. In unserem Fall waere dies:

       [ ] System clock uses UTC
       Europe/Zurich

Jetzt setzen wir ein User "root" Passwort und bestaetigen dieses:

       Password: ppo79456
       Password (confirm): ppo79456

Alle System Angaben sind nun gemacht es fehlen nur noch die Angabe der zu installierenden Packages. Scrolle ganz nach unten und aktiviere die Position:

       "Minimum...."

Alle Angaben sind gemacht! Nun erscheint nochmals einen Hinweis das die Installation protokolliert wird im folgenden File:

       /root/install.log

Nun wird die Installation ausgefuehrt! Sofern weitere Packages installiert werden sollen muss auf die CentOS 4.U5 CD zurueckgegriffen werden resp. diese muss per "mount" Kommando zugaenglich gemacht werden. Danach koennen anhand des RPM Befehls weitere Packages installiert werden.

       # mkdir /cdrom
       # mount  -o ro /dev/cdrom /cdrom
       # rpm -ivh [Package Name]

NOTE
Ein Package kann auch anhand "yum" installiert werden sofern der Server bereits ueber Internet Anschluss verfuegt dh. der Befehl lautet dazu:

       # yum install [Package Name]


       Fuer "KOMPILIERUNGS FUNKTION":
       
       autoconf-2.59-5.noarch.rpm
       automake-1.9.2-3.noarch.rpm
       gcc-3.4.6-8.i386.rpm
       m4-1.4.1-16.i386.rpm
       binutils-2.15.92.0.2-22.i386.rpm
       cpp-3.4.6-8.x86_64.rpm
       glibc-devel-2.3.4-2.36.i386.rpm
       glibc-headers-2.3.4-2.36.i386.rpm
       glibc-kernheaders-2.4-9.1.100.EL.i386.rpm

Nachfolgend eine Liste von Packages die installiert werden muessen sofern das genannte Programm/Module spaeter installiert werden soll:

       Fuer "Squid/Clamav/Dansguardian" im Zusammenhang mit Rueckwaertskompatibilitaet:
       
       zlib-1.2.1.2-1.2.i386.rpm
       zlib-devel-1.2.1.2-1.2.i386.rpm
       compat-libstdc++-33-3.2.3-47.3.i386.rpm
       Fuer "PHP" im Zusammenhang mit "Apache":
       
       bison-1.875c-2.i386.rpm
       flex-2.5.4a-33.i386.rpm
       Fuer "NTP" Tools:
       
       libcap-1.10-20.i386.rpm
       ntp-4.2.0.a.20040617-6.el4.i386.rpm
       Fuer "NSLOOKUP" Tools:
       
       bind-utils-9.2.4-24.EL4.i386.rpm
       bind-libs-9.2.4-24.EL4.i386.rpm
       Fuer "ARCserve 11.5r":
       
       httpd-2.0.52-32.ent.centos4.i386.rpm
       apr-0.9.4-24.5.c4.2.i386.rpm
       apr-util-0.9.4-21.i386.rpm
       expat-1.95.7-4.i386.rpm
       which-2.16-4.i386.rpm
       
       libstdc++-3.4.6-8.i386.rpm
       libstdc++-devel-3.4.6-8.i386.rpm
       compat-libstdc++-296-2.96-132.7.2.i386.rpm

Nachdem ersten Login sollte ein "Update" des OS durchgefuehrt werden. Das Netzwerk ist zwar eingerichtet jedoch weiss der Server noch nicht "wer" er ist sowie in welcher "domaine" er sich befindet dh. modifiziere folgende Files:

       # vi /etc/hosts
       
       --------------- /etc/hosts ---------------
       
       # Do not remove the following line, or various programs
       # that require network funcitonality will fail.
       127.0.0.1        localhost.localdomain        localhost
       192.168.101.34        syrus.mydomain.ch       syrus
       
       --------------- /etc/hosts ---------------
       # vi /etc/resolv.conf
       
       --------------- /etc/resolv.conf --------------- 
       
       domain mydomain.ch
       nameserver 192.168.100.125
       nameserver 192.168.100.194
       
       --------------- /etc/resolv.conf ---------------

Nun kann ein Update durchgefuehrt werden. Dies wird anhand des Tools "yum" bewerkstelligt:

       # yum update

OS Modifikationen/Manipulationen

Um RPM's zu verwalten beruecksichtige folgende Befehle:

       Ein RPM Package installieren:
       
       # rpm -ivh [ Package ]
       Ein RPM Package deinstallieren:
       
       # rpm -e [ Package ]
       Ein RPM Package upgrade durchzufuehren:
       
       # rpm -Uvh [ Package ]
       
       NOTE Bei diesem Vorgang wird vorgaengig das alte Package deinstalliert und danach das neue Package installiert!
       Um festzustellen ob ein RPM Package installiert ist:
       
       # rpm -q [ Package ]
       Um Detailinformationen eines RPM Packages anzuzeigen:
       
       # rpm -qi [ Package ]
       Um Detailinformationen anzuzeigen bevor ein RPM Package installiert wird:
       
       # rpm -qpi [ Package ]
       Listet Files auf eines installierten RPM Packages:
       
       # rpm -ql [ Package ]
       Listet Files auf eines nicht installierten RPM Packages:
       
       # rpm -qpl [ Package ]
       Listet auf zu welchem RPM Package das File gehoehrt:
       
       # rpm -qf [ File ]
       Fuehrt eine Ueberpruefung der RPM Signature durch:
       
       # rpm --checksig [ Package ]
       Fuehrt eine Ueberpruefung der md5sum des RPM Packages durch:
       
       # rpm --checksig --nogpg [ Package ]

NOTE
bei der RPM Bearbeitung muss nur jeweils der Name des RPM Packages angegeben werden dh. es ist nicht noetig die Version etc. ebenfalls anzugeben. Im nachfolgenden Beispiel wird dies aufgezeigt:

       # rpm -qpi [ Package ]

Mehr ueber Package Management findet man auf:

       http://www.rpm.org/max-rpm/

Nachfolgend einige Modifikationen betreffend des OS's:

       # echo MYDOMAIN 4.5 > /etc/redhat-release
       # /etc/init.d/atd stop 
       # /etc/init.d/anacron stop
       # /etc/init.d/acpid stop
       # /etc/init.d/apmd stop
       # /etc/init.d/yum stop
       # /etc/init.d/ypbind stop
       # /etc/init.d/nfs stop
       # /etc/init.d/nfslock stop

Nun koennen die unnoetigen rpm Packages deinstalliert werden:

       # rpm -e --nodeps acl
       # rpm -e --nodeps acpid
       # rpm -e --nodeps apmd
       # rpm -e --nodeps ash
       # rpm -e --nodeps aspell
       # rpm -e --nodeps aspell-en
       # rpm -e --nodeps attr
       # rpm -e --nodeps autofs
       # rpm -e --nodeps anacron
       # rpm -e --nodeps bc
       # rpm -e --nodeps comps
       # rpm -e --nodeps dhclient
       # rpm -e --nodeps dos2unix
       # rpm -e --nodeps dosfstools
       # rpm -e --nodeps mkbootdisk
       # rpm -e --nodeps ed
       # rpm -e --nodeps eject
       # rpm -e --nodeps fbset
       # rpm -e --nodeps finger
       # rpm -e --nodeps gettext
       # rpm -e --nodeps --noscripts groff
       # rpm -e --nodeps hdparm
       # rpm -e --nodeps iptables
       # rpm -e --nodeps system-config-securitylevel-tui
       # rpm -e --nodeps irda-utils
       # rpm -e --nodeps isdn4k-utils
       # rpm -e --nodeps lha
       # rpm -e --nodeps libwvstreams
       # rpm -e --nodeps wvdial
       # rpm -e --nodeps lockdev
       # rpm -e --nodeps minicom
       # rpm -e --nodeps logwatch
       # rpm -e --nodeps lrzsz
       # rpm -e --nodeps lsof
       # rpm -e --nodeps man-1.5o1
       # rpm -e --nodeps man-pages
       # rpm -e --nodeps mtr 
       # rpm -e --nodeps nano
       # rpm -e --nodeps nc
       # rpm -e --nodeps netconfig 
       # rpm -e --nodeps netdump
       # rpm -e --nodeps nfs-utils
       # rpm -e --nodeps nss_ldap
       # rpm -e --nodeps ntsysv
       # rpm -e --nodeps pam_smb
       # rpm -e --nodeps parted
       # rpm -e --nodeps pax
       # rpm -e --nodeps pcmcia-cs
       # rpm -e --nodeps ppp 
       # rpm -e --nodeps rp-pppoe
       # rpm -e --nodeps prelink
       # rpm -e --nodeps procmail
       # rpm -e --nodeps psacct
       # rpm -e --nodeps quota
       # rpm -e --nodeps rdate
       # rpm -e --nodeps rdist
       # rpm -e --nodeps rsh
       # rpm -e --nodeps rsync
       # rpm -e --nodeps schedutils
       # rpm -e --nodeps setarch
       # rpm -e --nodeps slocate
       # rpm -e --nodeps specspo
       # rpm -e --nodeps star
       # rpm -e --nodeps statserial
       # rpm -e --nodeps sendmail
       # rpm -e --nodeps setuptool
       # rpm -e --nodeps stunnel
       # rpm -e --nodeps symlinks
       # rpm -e --nodeps system-config-mouse
       # rpm -e --nodeps system-config-network-tui
       # rpm -e --nodeps talk
       # rpm -e --nodeps tcsh
       # rpm -e --nodeps telnet
       # rpm -e --nodeps --noscripts time
       # rpm -e --nodeps tmpwatch 
       # rpm -e --nodeps traceroute 
       # rpm -e --nodeps unix2dos
       # rpm -e --nodeps utempter
       # rpm -e --nodeps vconfig
       # rpm -e --nodeps wireless-tools
       # rpm -e --nodeps ypbind
       # rpm -e --nodeps yp-tools
       # rpm -e --nodeps ftp
       # rpm -e --nodeps pciutils
       # rpm -e --nodeps dhcpv6_client
       # rpm -e --nodeps cups-libs

NOTE
Beim entfernen der Packages sind einige Files uebriggeblieben sowie Verzeichnisse die nicht mehr benoetigt werden. Beachte bitte, dass wenn im vorherigen Schritt nicht alle Packages entfernt worden sind event. diese Verzeichnisse und Files noch gebraucht werden!

Durch die einzelne Deinstallation verschiedenen rpm Packages sind einige verwaiste Files und Verzeichnisse auf dem System uebriggeblieben:

       # rm -rf /etc/sysconfig/pcmcia.rpmsave
       # rm -rf /usr/share/info/dir.rpmsave
       # rm -rf /usr/local/share/man
       # rm -rf /usr/share/man
       # rm -rf /usr/X11R6
       # rm -rf /usr/games
       # rm -rf /usr/lib/games
       # rm -rf /var/spool/anacron
       # rm -rf /usr/share/doc/*
       # rm -rf /usr/share/info/*
       # rm -f /etc/exports
       # rm -f /etc/printcap
       # rm -f /etc/hosts.allow
       # rm -f /etc/hosts.deny
       # rm -rf /etc/ppp
       # rm -rf /etc/opt
       # rm -rf /etc/X11
       # rm -rf /var/opt
       # rm -rf /var/nis
       # rm -rf /var/spool/lpd
       # rm -rf /var/cache/man
       # rm -rf /var/lib/games
       # rm -rf /usr/etc
       # rm -rf /usr/local
       # rm -f /usr/bin/X11
       # rm -f /usr/bin/kbdrate
       # rm -f /usr/lib/X11
       # rm -rf /usr/share/empty
       # rm -rf /usr/share/pixmaps
       # rm -rf /home
    
       # rm -f /etc/rc0.d/K72autofs
       # mv /etc/rc0.d/K40smartd /etc/rc0.d/NOK40smartd
       # rm -f /etc/rc1.d/K72autofs
       # mv /etc/rc1.d/K40smartd /etc/rc1.d/NOK40smartd
       # rm -f /etc/rc2.d/*
       # rm -f /etc/rc3.d/S28autofs
       # mv /etc/rc3.d/S40smartd /etc/rc3.d/NOS40smartd
       # rm -f /etc/rc4.d/*
       # rm -f /etc/rc5.d/*
       # rm -f /etc/rc6.d/K72autofs
       # mv /etc/rc6.d/K40smartd /etc/rc6.d/NOK40smartd

NOTE
Bei der "initial" Installation des OS wurden einige Files im Verzeichnis "/root" angelegt die aufzeigen zB welche rpm Packages installiert wurden oder wie die "initial" Konfiguration aussieht. Diese Files werden nicht mehr benoetigt und koennen entfernt werden:


       # rm -f /root/anaconda-ks.cfg
       # rm -f /root/install.log
       # rm -f /root/install.log.syslog
       # rm -f /root/.Xresources
       # rm -f /root/.cshrc
       # rm -f /root/.tcshrc

Nicht mehr benoetigte Log Verzeichnisse/Files koennen ebenfalls geloescht werden:

       # rm -f prelink.log
       # rm -f anaconda.*
       # rm -f acpid
       # rm -rf cups
       # rm -rf /var/spool/cups

NOTE
Es ist zu empfehlen nach dem entfernen der Package nochmals ein Update durch "yum" auszufuehren da dadurch event. fehlende "dependencies" wiederum erstellt werden.

       # yum update

Folgendes Verzeichnis kann erst entfernt werden wenn ein Neustart durchgefuehrt wurde:

       # init 6

Nach dem Neustart entferne das Verzeichnis:

       # rm -rf /var/lib/nfs

Ein Kontrolle kann folgendermassen durchgefuehrt werden:

       # rpm -q [ Package ]
       

Damit ergiebt sich folgendes Bild betreffend installierten Packages:

       # rpm -q --all
       
       -------------- output of rpm -q all ---------------
       
       hwdata-0.146.28.EL-1
       libgcc-3.4.6-8
       rootfiles-8-1
       filesystem-2.3.0-1
       termcap-5.4-3
       glibc-common-2.3.4-2.36
       audit-libs-1.0.15-3.EL4
       bzip2-libs-1.0.2-13.EL4.3
       e2fsprogs-1.35-12.5.el4
       ethtool-1.8-4
       gdbm-1.8.0-24
       libattr-2.4.16-3.1.el4
       libcap-1.10-20
       checkpolicy-1.17.5-1
       db4-4.2.52-7.1
       libtermcap-2.0.8-39
       mktemp-1.5-20
       audit-1.0.15-3.EL4
       iproute-2.6.9-3.EL4.7
       keyutils-1.0-2
       less-382-4.rhel4
       perl-Filter-1.30-6
       psmisc-21.4-4.1
       setserial-2.17-17        
       newt-0.51.6-9.rhel4
       tcl-8.4.7-2
       vim-minimal-6.3.046-0.40E.7
       cpio-2.5-13.RHEL4
       gawk-3.1.3-10.1
       coreutils-5.2.1-31.6
       grub-0.95-3.8
       module-init-tools-3.1-0.pre5.3.4
       procps-3.2.3-8.6
       lvm2-2.02.21-5.el4
       pyxf86config-0.3.19-1
       rpm-libs-4.3.3-22_nonptl
       shadow-utils-4.0.3-61.RHEL4
       dbus-glib-0.22-12.EL.9
       rpm-4.3.3-22_nonptl
       cracklib-dicts-2.8.9-1.3
       authconfig-4.6.10-rhel4.3
       selinux-policy-targeted-1.17.30-2.145
       SysVinit-2.85-34.4
       hal-0.4.2-6.EL4
       kudzu-1.1.95.22-1
       which-2.16-4
       initscripts-7.93.29.EL-1.centos4
       kernel-smp-2.6.9-55.EL
       libuser-0.52.5-1.el4.1
       kbd-1.12-2.el4.4
       cryptsetup-0.1-4
       dump-0.4b39-3.EL4.2
       bluez-libs-2.10-2
       hesiod-3.0.2-30
       libgpg-error-1.0-1
       libjpeg-6b-33
       mailx-8.1.1-37.EL4
       bzip2-1.0.2-13.EL4.3
       mt-st-0.8-1
       libibcommon-1.0.1-7
       libsdp-1.1.0-7
       opensm-libs-2.0.0-7
       numactl-0.6.4-1.39
       logrotate-3.7.1-6.RHEL4
       redhat-menus-3.7.1-2
       libmthca-1.0.3.1-7
       dapl-1.2.1-7
       tcp_wrappers-7.6-37.2
       zip-2.3-27
       binutils-2.15.92.0.2-22
       libxslt-1.1.11-1
       m4-1.4.1-16
       OpenIPMI-1.4.14-1.4E.17
       pinfo-0.6.8-7
       lftp-3.0.6-3
       diskdumputils-1.3.25-1
       libxml2-python-2.6.16-10
       python-elementtree-1.2.6-5.el4.centos
       rhnlib-2.1.1-3.el4
       nscd-2.3.4-2.36
       python-sqlite-1.1.7-1.2.1
       syslinux-2.11-1
       umb-scheme-3.2-36.EL4
       swig-1.3.21-6
       xmlsec1-1.2.6-3
       at-3.1.8-80_EL4
       pam_ccreds-3-3.rhel4.2
       sudo-1.6.7p5-30.1.3
       NetworkManager-0.3.1-4.el4
       gnupg-1.2.6-9
       openssh-clients-3.9p1-8.RHEL4.20
       openssh-server-3.9p1-8.RHEL4.20
       iptstate-1.3-4
       yum-2.4.3-3.el4.centos
       apr-0.9.4-24.5.c4.2
       libstdc++-devel-3.4.6-8
       compat-libstdc++-296-2.96-132.7.2
       BABmgr-11.5.0-1
       BABcmagt-11.5.0-1
       ca-ingres-WV-3.0.2-105
       ca-ingres-net-WV-3.0.2-105
       ca-ingres-c2audit-WV-3.0.2-105
       ca-ingres-esql-WV-3.0.2-105
       ca-ingres-odbc-WV-3.0.2-105
       ca-ingres-qr_run-WV-3.0.2-105
       ca-ingres-star-WV-3.0.2-105
       ca-ingres-vision-WV-3.0.2-105
       gpg-pubkey-443e1821-421f218f
       glibc-kernheaders-2.4-9.1.100.EL
       glibc-devel-2.3.4-2.36
       autoconf-2.59-5
       zlib-devel-1.2.1.2-1.2
       flex-2.5.4a-33
       cyrus-sasl-2.1.19-14
       perl-5.8.5-36.el4_5.2
       bind-libs-9.2.4-27.0.1.el4
       device-mapper-1.02.17-3.0.1.el4
       cups-libs-1.1.22-0.rc1.9.20.2.el4_5.2
       bind-utils-9.2.4-27.0.1.el4
       cyrus-sasl-md5-2.1.19-14
       krb5-workstation-1.3.4-49
       bluez-utils-2.10-2.2
       tzdata-2007h-1.el4
       kernel-smp-2.6.9-55.0.12.EL
       kernel-2.6.9-55.0.12.EL
       xorg-x11-libs-6.8.2-1.EL.31
       httpd-2.0.52-32.3.ent.centos4
       dmraid-1.0.0.rc14-5_RHEL4_U5
       indexhtml-4-2.centos4
       redhat-logos-1.1.26-1.centos4.4
       setup-2.5.37-1.3
       basesystem-8.0-4
       glibc-2.3.4-2.36
       beecrypt-3.1.0-6
       chkconfig-1.3.13.5.EL4-1
       elfutils-libelf-0.97.1-4
       expat-1.95.7-4
       glib2-2.4.7-1
       keyutils-libs-1.0-2
       libacl-2.2.23-5.3.el4
       libselinux-1.19.1-7.3
       libsepol-1.1.1-2
       libstdc++-3.4.6-8
       gmp-4.1.4-3
       mingetty-1.07-3
       bash-3.0-19.3
       centos-release-4-4.3
       iputils-20020927-19.EL4.5
       ncurses-5.4-13
       net-tools-1.60-37.EL4.9
       popt-1.9.1-22_nonptl
       rpmdb-CentOS-4.5-0.20070506
       slang-1.4.9-8
       sysfsutils-1.2.0-1
       usbutils-0.11-7.RHEL4.1
       zlib-1.2.1.2-1.2
       info-4.7-5.el4.2
       diffutils-2.8.1-12
       findutils-4.1.20-7.el4.3
       grep-2.5.1-32.3
       gzip-1.3.3-16.rhel4
       libxml2-2.6.16-10
       openssl-0.9.7a-43.16
       readline-4.3-13
       python-2.3.4-14.4
       rhpl-0.148.5-1
       sed-4.1.2-6.el4
       dbus-0.22-12.EL.9
       MAKEDEV-3.15.2-3
       sysklogd-1.4.1-26_EL
       cracklib-2.8.9-1.3
       pam-0.77-66.21
       policycoreutils-1.18.1-4.12
       setools-2.3-4
       util-linux-2.12a-16.EL4.25
       hotplug-2004_04_01-7.8
       udev-039-10.15.EL4
       mkinitrd-4.2.1.10-1.1
       kernel-2.6.9-55.EL
       openldap-2.2.13-7.4E
       passwd-0.68-10.1
       usermode-1.74-2
       mailcap-2.1.17-1
       rmt-0.4b39-3.EL4.2
       bluez-hcidump-1.11-1
       elfutils-0.97.1-4
       glib-1.2.10-15
       libgcrypt-1.2.0-3
       libusb-0.1.8-3
       bluez-bluefw-1.0-6
       crontabs-1.10-7
       lksctp-tools-1.0.2-6.4E.1
       openib-1.1-7
       libibumad-1.0.1-7
       OpenIPMI-libs-1.4.14-1.4E.17
       pam_passwdqc-0.7.5-2
       patch-2.5.4-20
       desktop-file-utils-0.9-3.el4
       htmlview-3.0.0-8
       libibverbs-1.0.4-7
       librdmacm-0.9.1-7
       unzip-5.51-9.EL4.5
       words-3.0-3.2
       crash-4.0-3.9
       fontconfig-2.2.3-7.centos4
       gpm-1.20.1-71.RHEL4
       jwhois-3.2.2-6.EL4.1
       libgssapi-0.8-1
       libtiff-3.6.1-12
       make-3.80-6.EL4
       mgetty-1.1.31-2
       mtools-3.9.9-9
       nss_db-2.2-29
       pdksh-5.2.14-30.3
       pyOpenSSL-0.6-1.p23
       python-urlgrabber-2.9.8-2
       jpackage-utils-1.7.3-1jpp.1.el4
       rpm-python-4.3.3-22_nonptl
       sqlite-3.3.6-2
       sysreport-1.3.15-8
       guile-1.6.4-14
       ibutils-1.0-4
       wpa_supplicant-0.4.9-1.1.el4
       xmlsec1-openssl-1.2.6-3
       pam_krb5-2.1.8-1
       ipsec-tools-0.3.3-6.rhel4.1
       kernel-utils-2.4-13.1.99
       openssh-3.9p1-8.RHEL4.20
       portmap-4.0-63
       mdadm-1.12.0-2
       libpcap-0.8.3-10.RHEL4
       tcpdump-3.8.2-10.RHEL4
       xinetd-2.3.13-4.4E.1
       redhat-lsb-3.0-8.EL
       apr-util-0.9.4-21
       compat-libstdc++-33-3.2.3-47.3
       cpp-3.4.6-8
       glibc-headers-2.3.4-2.36
       gcc-3.4.6-8
       automake-1.9.2-3
       bison-1.875c-2
       krb5-libs-1.3.4-49
       file-4.10-3.0.2.el4
       pcre-4.5-4.el4_5.4
       freetype-2.1.9-6.el4
       libpng-1.2.7-3.el4_5.1
       cups-1.1.22-0.rc1.9.20.2.el4_5.2
       up2date-4.5.5-6.el4.centos
       cyrus-sasl-plain-2.1.19-14
       net-snmp-libs-5.1.2-11.EL4.10.0.1
       httpd-suexec-2.0.52-32.3.ent.centos4
       tar-1.14-12.5.1.RHEL4
       vixie-cron-4.1-47.EL4
       nfs-utils-lib-1.0.6-8.z1
       xorg-x11-Mesa-libGL-6.8.2-1.EL.31
       
       -------------- output of rpm -q all ---------------

Konfiguration des Netzwerks

Um ein Netzwerkinterface sowie den Hostnamen des Servers zu manipulieren muessen folgende Files modifiziert werden:

       # vi /etc/hosts
       # vi /etc/sysconfig/network-scripts/ifcfg-eth0
       # vi /etc/resolv.conf
       # vi /etc/sysconfig/network

NOTE
Wenn die IP geaendert wird muss das nachfolgende File ebenfalls betreffend Position "ListenAddress" geandert werden sowie der sshd Deamon muss neu gestartet werden.

       # vi /etc/ssh/sshd_config
       # /etc/init.d/sshd stop
       # /etc/init.d/sshd start

Nachfolgend eine Detailierte Erklaerung fuer die zu manipulierenden Files:

       # vi /etc/sysconfig/network-scripts/ifcfg-eth0
       
       --------------- /etc/sysconfig/network-scripts/ifcfg-eth0 --------------- 
       
       DEVICE=eth0
       BOOTPROTO=static
       BROADCAST=192.168.101.255
       HWADDR=00:0C:29:F3:16:68
       IPADDR=192.168.101.34
       NETMASK=255.255.255.0
       NETWORK=192.168.101.0
       ONBOOT=yes
       TYPE=Ethernet
       USERCTL=no
       
       --------------- /etc/sysconfig/network-scripts/ifcfg-eth0 --------------- 
       
       # chown root:root /etc/sysconfig/network-scripts/ifcfg-eth0
       # chmod 644 /etc/sysconfig/network-scripts/ifcfg-eth0
       Die Eintraege bedeuten folgendes:
       
       DEVICE=            Gibt den Device Namen an dh. eth0
       BOOTPROTO=         Gibt die Art der Konfiguration der Ip an dh. static, dhcp, bootp none
       BROADCAST=         Die Broadcast Adresse der konfigurierten IP Adresse
       IPADDR=            Die zu konfigurierende IP Adresse
       NETMASK=           Die Netmask Adresse der konfigurierten IP Adresse
       NETWORK=           Die Netzwerk Adresse der konfigurierten IP Adresse
       ONBOOT=            Gib an ob nach einem Neustart das Interface zur Verfuegung steht dh. 
                          yes fuer ja und no fuer nein
       USERCTL=           Gibt an ob nur User "root" das Interface konfigurieren darf dh. no 
                          fuer "nur" User "root" kann das Interface konfigurieren oder yes fuer 
                          "alle" duerfen das Interface konfigurieren.
       HWADDR=            Die zum Interface gehoerende MAC Adresse
       TYPE=              Gibt den Typ des Interfaces an dh. zB Ethernet
       NOTE Um ein virtuelles Interface zu konfigurieren benuetze als Interface Namen eth0:1.

Nun koennen wir das Interface stoppen und wieder starten dh.:

       # ifconfig eth0 down
       # ifconfig eth0 up

Es kann mit folgenden Befehl kontrolliert werden ob die Konfiguration erfolgreich war:

       # ifconfig eth0

Weiter werden wir nun die DNS Server konfigurieren. Fuer diese Aufgabe ist das File "/etc/resolv.conf" zustaendig das per Standard "nicht" besteht dh. wir muessen dieses zuerst erstellen mit folgenden Eintraegen:

       # vi /etc/resolv.conf
       
       --------------- /etc/resolv.conf --------------- 
       
       domain mydomain.ch
       search dns1.mydomain.ch dns2.mydomain.ch mydomain.ch
       nameserver 192.168.100.125
       nameserver 192.168.100.194
       nameserver 127.0.0.1
       
       --------------- /etc/resolv.conf --------------- 
       
       # chown root:root /etc/resolv.conf
       # chmod 644 /etc/resolv.conf

DNS Server werden im File "/etc/resolv.conf" indem Sinne bgearbeitet wie diese aufgelistet sind dh. in unserem Beispiel dns1.mydomain.ch danach dns2.mydomain.ch usw. Im File "/etc/host.conf" wird konfiguriert wie die "Namensaufloesung" funktionieren soll dh. Files vor DNs usw. In unserem Fall und als Standard kann folgendes konfiguriert werden:

       # vi /etc/host.conf
       
       --------------- /etc/host.conf --------------- 
       
       # Lookup names via /etc/hosts first then fall back to DNS resolver.
       order hosts,bind
       
       # We have machines with multiple addresses.
       multi off
       
       --------------- /etc/host.conf --------------- 
       
       # chown root:root /etc/host.conf
       # chmod 644 /etc/host.conf 

Wenn auf einem Server virtuelle Interfaces konfiguriert sind oder wenn mehrere Interfaces selber konfiguriert sind muss im File "/etc/host.conf" dies mit "multi on" angegeben werden damit das OS weiss, dass ein "multihoming" konfiguriert ist. Als naechstes wird ein Gateway konfiguriert dh. fuer diese Funktion ist das File "/etc/sysconfig/network" zustaendig:

       # vi /etc/sysconfig/network
       
       --------------- /etc/sysconfig/network ---------------
       
       NETWORKING=yes
       HOSTNAME=syrus
       GATEWAY=192.168.101.120
       GATEWAYDEV=eth0
       
       --------------- /etc/sysconfig/network ---------------
       
       # chown root:root /etc/sysconfig/network
       # chmod 644 /etc/sysconfig/network
       Die Eintrage von "/etc/sysconfig/network" haben folgende Bedeutung:
       
       NETWORKING=           Gibt an ob ein Netzwerk konfiguriert is dh. "yes" fuer mit Netzwerk und no fuer "ohne" Netzwerk
       HOSTNAME=             Gibt den Hostnamen des Servers an
       GATEWAY=              Gibt die IP des Gateway an
       GATEWAYDEV=           Gibt das Interface an ueber welches das Gateway erreicht werden soll

Nun kommen wir zum "host" Eintrag. Fuer diesen Eintrag ist "/etc/hosts" zustaendig:

       # vi /etc/hosts
       
       --------------- /etc/hosts ---------------
       
       # Do not remove the following line, or various programs
       # that require network funcitonality will fail.
       127.0.0.1        localhost.localdomain        localhost
       192.168.101.34        syrus.mydomain.ch        syrus
       192.168.101.35        wsmob08.mydomain.ch        wsmob08
       
       --------------- /etc/hosts ---------------
       
       # chown root:root /etc/hosts
       # chmod 644 /etc/hosts

Es ist zu empfehlen den Client in das File "/etc/hosts" einzutragen, denn bei Verbindungen mit SSH oder FTP versucht der Server den Client mit dem Namen aufzuloesen und wenn dieser im DNS nicht eingetragen ist kann der Verbindungs- aufbau einige Zeit dauern. Wenn ein Linux system als Gateway, VPN, Proxy oder PPP eingesetzt wird so sollte IPv4 forwarding eingeschaltet werden. Dies wird mit folgenden Eintrag bewerkstelligt:

       # vi /etc/sysctl.conf
       
       --------------- /etc/sysctl.conf ---------------
       
       # Kernel sysctl configuration file for Red Hat Linux
       #
       # For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
       # sysctl.conf(5) for more details.
       
       # Controls IP packet forwarding
       net.ipv4.ip_forward = 0
       
       # Controls source route verification
       net.ipv4.conf.default.rp_filter = 1
       
       # Do not accept source routing
       net.ipv4.conf.default.accept_source_route = 0
       
       # Controls the System Request debugging functionality of the kernel
       kernel.sysrq = 0
       
       # Controls whether core dumps will append the PID to the core filename.
       # Useful for debugging multi-threaded applications.
       kernel.core_uses_pid = 1
       
       # Decrease the time default value for tcp_fin_timeout connection
       net.ipv4.tcp_fin_timeout = 30
       net.ipv4.tcp_keepalive_time = 1800
       
       # Turn off the tcp_window_scaling support
       net.ipv4.tcp_window_scaling = 0
       
       # Turn off the tcp_sack support
       net.ipv4.tcp_sack = 0
       
       # Turn off the tcp_timestamps support
       net.ipv4.tcp_timestamps = 0
       
       
       # Disable ignoring ping request
       net.ipv4.icmp_echo_ignore_all = 0
       
       # Disable ignoring broadcasts request
       net.ipv4.icmp_echo_ignore_broadcasts = 0
       
       # Disable IP source routing
       net.ipv4.conf.all.accept_source_route = 0
       net.ipv4.conf.lo.accept_source_route = 0
       net.ipv4.conf.eth0.accept_source_route = 0
       net.ipv4.conf.default.accept_source_route = 0
       
       # TCP SYN Cookie Protection
       sysctl -w net.ipv4.tcp_syncookies=1
       
       # Disable ICMP Redirect Acceptance
       net.ipv4.conf.all.accept_redirects = 0
       net.ipv4.conf.lo.accept_redirects = 0
       net.ipv4.conf.eth0.accept_redirects = 0
       net.ipv4.conf.eth1.accept_redirects = 0
       net.ipv4.conf.default.accept_redirects = 0
       
       # Enable Bad error message Protection
       net.ipv4.icmp_ignore_bogus_error_responses = 1
       
       # Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
       net.ipv4.conf.all.log_martians = 1
       net.ipv4.conf.lo.log_martians = 1
       net.ipv4.conf.eth0.log_martians = 1
       net.ipv4.conf.eth1.log_martians = 1
       net.ipv4.conf.default.log_martians = 1
       
       # Allowed local port range
       net.ipv4.ip_local_port_range = 16384 65536
       #net.ipv4.ip_local_port_range = 1024 32768
       
       # Increase the maximum memory used to reassemble IP fragments
       net.ipv4.ipfrag_high_thresh = 512000
       net.ipv4.ipfrag_low_thresh = 446464
       
       --------------- /etc/sysctl.conf ---------------
       
       # chown root:root /etc/sysctl.conf
       # chmod 644 /etc/sysctl.conf

Nach den Netzwerk Modifikationen sollte das Netzwerk neue gestartet werden dh. benuetze folgenden Befehl dazu:

       # /etc/rc.d/init.d/network stop
       # /etc/rc.d/init.d/network start
       
       # /etc/rc.d/init.d/network status

Je nach Konfiguration oder Situation kann das Netzwerk nicht gestoppt werden dh. es kann auch ein Neustart ausgefuehrt werden:

       # /etc/rc.d/init.d/network restart

Um die Netzwerkkonfiguration zu ueberpruefen kann folgendes ausgefuehrt werden:

       # ping localhost
       
       # ping [hostname]
       
       # netstat -vat
       
       # hostname

Shell einrichten und Modifizieren

Die Shell dh. "bash" wurde durch die Installation bereits eingerichtet. Die Shell Konfiguration nimmt als Referenz die zur Verfuegung stehenden Files in "/etc/skell" dh. wird ein neuer "user" eingerichtet werden diese Files als Referenz zur Einrichtung der Shell herangezogen. Wir werden in den naechsten Schritten die Files in "/etc/skell" so modifizieren das diese unseren Gegebenheiten entsprechen:

       # vi /etc/skel/.bashrc
       
       --------------- /etc/skel/.bashrc ---------------
       
       # .bashrc
       
       # User specific aliases and functions
       
       alias rm='rm -i'
       alias cp='cp -i'
       alias mv='mv -i'
       
       # Source global definitions
       if [ -f /etc/bashrc ]; then
               . /etc/bashrc
       fi
       
       --------------- /etc/skel/.bashrc ---------------
       # vi /etc/skel/.bash_profile
       
       --------------- /etc/skel/.bash_profile ---------------
       
       # .bash_profile
       
       # Get the aliases and functions
       if [ -f ~/.bashrc ]; then
               . ~/.bashrc
       fi
               
       # user specific environment and startup programs
       
       HISTSIZE=1000
       TMOUT=7200
       
       PATH=$PATH:$HOME/bin
       BASH_ENV=$HOME/.bashrc
       USERNAME="root"
       
       export USERNAME BASH_ENV PATH
       
       --------------- /etc/skel/.bash_profile ---------------

Der Eintrag "HISTSIZE" bedeutet nichts anderes als das jedes Kommando als "history" gespeichert wird im File "bash_history" und das dieses "500" Eintraege enthalten kann. Wird die Angabe "0" angegeben so wird beim Logout dieses File jedesmal zurueckgesetzt.

Der Eintrag "TMOUT" bedeutet das ein Timout aktiv wird nach dem angegebenen Wert und die Session fuer den User automatisch beendet wird. In unserem Fall ist der angegeben Wert "7200" was einer Stunde entspricht.

Moechte man diese beiden Konfigurationen "Global" setzen so kann das File "/etc/profile" modifiziert werden und somit gilt das fuer jeden User auf dem System:

       # vi /etc/profile
       
       --------------- /etc/profile---------------
       
       HISTSIZE=1000
       TMOUT=7200
       
       --------------- /etc/profile---------------
       # vi /etc/skel/.bash_logout
       
       --------------- /etc/skel/.bash_logout ---------------
       
       # ~/.bash_logout
       
       clear
       
       --------------- /etc/skel/.bash_logout ---------------

Nun werden wir noch die Rechte des Home Verzeichnis des Users "root" anpassen sowie dessen Files:

       # chown root:root /root
       # chmod 700 /root
       # chown root:root /root/.*
       # chmod 600 /root/.bashrc /root/.bash_profile /root/.bash_logout

Einen neuen User sysop erfassen

Nun wir werden einen neuen User erfassen mit dem Namen "sysop". Das Home- verzeichnis dieses Users legen wir im Verzeichnis "/export/sysop" an. Um dies zu bewerkstelligen muss das Verzeichnis "/export" bestehen denn beim anlegen des Users anhand des Kommandos "useradd" wird kontrolliert ob das Verzeichnis "/export" besteht. Ist dies der Fall wird das darinliegende Homeverzeichnis von "sysop" angelegt und die Standard "shell" Files von "/etc/skel/.bash*" hineinkopiert. Also als erstes legen wir das Verzeichnis "/export" an, erstellen die Gruppe zum User "sysop" und danach koennen wir den User erstellen:

       # mkdir /export
       # chown root:root /export
       # chmod 755 /export
       
       # groupadd -g 200 sysop

Kontrolliere die Erstellung der Gruppe "sysop" und fuege bereits den "noch" nicht bestehende User "sysop" hinzu:

       # cat /etc/group | grep sysop
       
       --------------- /etc/group ---------------
       
       sysop:x:200:sysop
       
       --------------- /etc/group ---------------
       # useradd -u 200 -g 200 -d /export/sysop -s /bin/bash -c SysOperator sysop

Auch hier kontrolliere die Erstellung des Users "sysop":

       # cat /etc/passwd | grep sysop
       
       --------------- /etc/passwd ---------------
       
       sysop:x:200:200:SysOperator:/export/sysop:/bin/bash
       
       --------------- /etc/passwd ---------------

Kontrolliere die Rechte des neu erstellten Homeverzeichnis von User "sysop" und passe gegebenfalls diese an sowie kontrolliere die "shell" Files:

       # chown sysop:sysop /export/sysop
       # chmod 700 /export/sysop
       
       # chown root:sysop /export/sysop/.bash*
       # chmod 640 /export/sysop/.bash*
       # vi /export/sysop/.bash_profile
       
       --------------- /export/sysop/.bash_profile ---------------
       
       # .bash_profile
       
       # Get the aliases and functions
       if [ -f ~/.bashrc ]; then
               . ~/.bashrc
       fi
               
       # user specific environment and startup programs
       
       HISTSIZE=1000
       TMOUT=7200
       
       PATH=$PATH:$HOME/bin
       BASH_ENV=$HOME/.bashrc
       USERNAME="sysop"
       
       export USERNAME BASH_ENV PATH
       
       --------------- /export/sysop/.bash_profile ---------------

Alles getan vergesse jedoch nicht ein Passwort zu vergeben:

       # passwd sysop
       Changing password for user sysop.
       new UNIX password:
       Retype new UNIX password:
       passwd: all authentication tokens updated successfully.

Modifikaton /etc/passwd, /etc/shadow, /etc/group

Als erstes werden wir die ueberfluessigen User entfernen:

       # userdel adm
       # userdel lp                                *
       # userdel shutdown
       # userdel halt
       # userdel news
       # userdel uucp
       # userdel operator
       # userdel games
       # userdel gopher
       # userdel sshd                                *
       # userdel rpc
       
       # userdel ftp
       
       # userdel dbus
       # userdel haldaemon
       # userdel netdump

Nachdem entfernen der User gibt sich folgende Situation:

       # cat /etc/passwd
       
       --------------- /etc/passwd ---------------
       
       root:x:0:0:root:/root:/bin/bash
       bin:x:1:1:bin:/bin:/sbin/nologin
       daemon:x:2:2:daemon:/sbin:/sbin/nologin
       lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
       sync:x:5:0:sync:/sbin:/bin/sync
       mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
       ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
       nobody:x:99:99:Nobody:/:/sbin/nologin
       vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
       nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
       ntp:x:38:38::/etc/ntp:/sbin/nologin
       rpm:x:37:37::/var/lib/rpm:/sbin/nologin
       sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
       rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
       pcap:x:77:77::/var/arpwatch:/sbin/nologin
       mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
       smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
       sysop:x:200:200:SysOperator:/export/sysop:/bin/bash
       
       --------------- /etc/passwd ---------------


Weiter entfernen wir die ueberfluessigen Gruppen:

       # groupdel adm
       # groupdel lp                *
       # groupdel news
       # groupdel uucp
       # groupdel games
       # groupdel dip
       # groupdel man

Nachdem entfernen der Gruppen ergiebt sich folgende Situation:

       # cat /etc/group
       
       --------------- /etc/group ---------------
       
       root:x:0:root
       bin:x:1:root,bin,daemon
       daemon:x:2:root,bin,daemon
       sys:x:3:root,bin
       tty:x:5:
       disk:x:6:root
       lp:x:7:daemon,lp
       mem:x:8:
       kmem:x:9:ingres
       wheel:x:10:root
       mail:x:12:mail
       games:x:20:
       ftp:x:50:
       lock:x:54:
       nobody:x:99:
       users:x:100:
       floppy:x:19:
       vcsa:x:69:
       utmp:x:22:
       nscd:x:28:
       sshd:x:74:
       rpc:x:32:
       pcap:x:77:
       mailnull:x:47:
       smmsp:x:51:
       sysop:x:200:sysop
       
       --------------- /etc/group ---------------

Das Passwort unter Linux hat eine minimum Laenge von 5 Zeichen. Dies sollte erhoeht werden auf minimum 8. Um das zu bewerkstelligen gehe folgendermassen vor:

       # vi /etc/pam.d/passwd
       
       --------------- /etc/pam.d/passwd ---------------
       
       #%PAM-1.0
       auth       required     pam_stack.so service=system-auth
       account    required     pam_stack.so service=system-auth
       #password   required    pam_stack.so service=system-auth
       password required       pam_cracklib.so retry=3 minlen=8
       password sufficient     pam_unix.so nullok use_authtok md5 shadow
       password required       pam_deny.so
       
       --------------- /etc/pam.d/passwd ---------------
       # vi /etc/pam.d/system-auth
       
       --------------- /etc/pam.d/system-auth ---------------
       
       #%PAM-1.0
       # This file is auto-generated.
       # User changes will be destroyed the next time authconfig is run.
       auth        required      /lib/security/$ISA/pam_env.so
       auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
       auth        required      /lib/security/$ISA/pam_deny.so
       
       account     required      /lib/security/$ISA/pam_unix.so
       #account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
       account     required      /lib/security/$ISA/pam_permit.so
       
       password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
       #password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
       password    required      /lib/security/$ISA/pam_deny.so
       
       session     required      /lib/security/$ISA/pam_limits.so
       session     required      /lib/security/$ISA/pam_unix.so
       
       --------------- /etc/pam.d/system-auth ---------------

NOTE
Die Zeile "pam_succeed_if.so" sollte auskommentiert werden wenn nicht mit "NIS oder LDAP" gearbeitet wird ansonsten kommt es zu einer Fehlermeldung beim einloggen von SSH:

        pam_succeed_if: requirement "uid < 100" not met by user "sysop"

Allgemeine Modifikationen am Betriebssystem

Wenn ein Linux in Single User mode gestartet oder wechselt wird per Standard kein Passwort abgefragt. Dies ist zu verhindern. Deshalb fuehre folgende Modifikation durch:

       # vi /etc/inittab
       
       --------------- /etc/pam.d/system-auth ---------------
       
       id:3:initdefault:
       ~~:S:wait:/sbin/sulogin
       
       --------------- /etc/pam.d/system-auth ---------------

Diese Modifikation erzwingt das Passwort von User "root"! Um dies zu testen pruefe den Single User mode:

       # init 1

Die verschiedenen Deklarierten Service dh. TCP/IP Port xy werden im folgenden File aufgefuehrt dh. durch dieses File werden Server und Client Programme/Services mit Namen aufgeloest:

       # cat /etc/services

Das File "/etc/securetty" erlaubt die Spezifizierung welche Console dh. "TTY" und "VC" (Virtual console) der User "root" benutzen darf reps. einloggen darf. Dieses File "/etc/securetty" wird durch das Login Programm "/bin/login" ausgelesen.

       # vi /etc/securetty
       
       --------------- /etc/securetty ---------------
       
       console
       ttyS0
       ttyS1
       vc/1
       #vc/2
       #vc/3        
       #vc/4
       #vc/5
       #vc/6
       #vc/7
       #vc/8
       #vc/9
       #vc/10
       #vc/11
       tty1
       #tty2
       #tty3
       #tty4
       #tty5
       #tty6
       #tty7
       #tty8
       #tty9
       #tty10
       #tty11
       
       --------------- /etc/securetty ---------------

dieses mit einem sogenannten "immutable" bit versehen werden. Wenn dies geschieht ist das File nicht veränderbar und das bit muss zuerst wieder aufgehoben werden damit das File verändert werden kann. Das dazugehoerige Kommando muss folgendermassen ausgefuehrt werden:

       # chattr +i [file]
       # chattr -i [file]

Auf der Console kann ein Linux Server mit "Ctrl-Alt-Delete" heruntergefahren werden. Dies muss unter allen Umstaenden verhindert werden. Um diese Modifikation durchzufuehren kommentiere folgende Zeile aus:

       # vi /etc/inittab
       
       --------------- /etc/inittab ---------------
       
       # Trap CTRL-ALT-DELETE
       #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
       
       --------------- /etc/inittab ---------------

Aktivierung des Serial Ports fuer Logins

Es ist sinnvoll Linux so zu konfigurieren das dieses ueber den Serial Port Administriert werden kann sowie ueber den Serial Port den Boot-Vorgang mit- verfolgt werden kann. Dies insofern das nach dieser Modifikation kein Keyboard noch Monitor benoetigt wird um den Server zu administrieren. Als erstes muss ueberprueft werden ob Linux den Serial Ports des Servers erkannt hat:

       # dmesg | grep tty
       
       --------------- output of dmesg ---------------
       
       ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
       ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
       
       --------------- output of dmesg ---------------
       # setserial -g /dev/ttyS[01]
       
       --------------- output of dmesg ---------------
       
       /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
       /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
       
       --------------- output of dmesg ---------------

In diesem Beispiel wurden zwei Serial Ports erkannt dh. COM1 und COM2! Als naechstes muss "agetty" so konfiguriert werden das dieses Programm auf die Serial Ports hoert. In diesem Beispiel benutzen wir "agetty" und nicht "mgetty":

       # cp /etc/inittab /etc/inittab.org
       # vi /etc/inittab
       
       --------------- output of dmesg ---------------
       
       # Run gettys in standard runlevels
       1:2345:respawn:/sbin/mingetty tty1
       2:2345:respawn:/sbin/mingetty tty2
       3:2345:respawn:/sbin/mingetty tty3
       4:2345:respawn:/sbin/mingetty tty4
       5:2345:respawn:/sbin/mingetty tty5
       6:2345:respawn:/sbin/mingetty tty6
       
       # Run agetty on COM1/ttyS0 and COM2/ttyS1
       s0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
       s1:2345:respawn:/sbin/agetty -L -f /etc/issueserial 9600 ttyS1 vt100
       #s1:2345:respawn:/sbin/agetty -L -i 38400 ttyS1 vt100
       
       --------------- output of dmesg ---------------

Nun lege ein neues File an indem einige "escape" sequenzen" konfiguriert sind (siehe agetty manpage). Unsere Modifikationen geben Informationen aus wie Serial Port Nummer und Geschwindigkeit:

       # vi /etc/issueserial
       
       --------------- /etc/issueserial ---------------
       
       Hostname
       Connected on \l at \b bps
       \U
       
       --------------- /etc/issueserial ---------------
       
       # chown root:root /etc/issueserial
       # chmod 644 /etc/issueserial


Um die Modifikationen zu aktivieren fuehre folgendes aus:

       # init q

Danach kontrolliere ob die Modifikationen erfolgreich waren:

       # ps -ef | grep agetty
       ttyS0    00:00:00 /sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
       ttyS1    00:00:00 /sbin/agetty -L -f /etc/issueserial 9600 ttyS1 vt100

Teste nun den Zugriff des Serial Ports mit folgenden Einstellungen:

       9600, N, 8, 1
       VT100
       flow control off

Damit mit User "root" ueber den Serial Port eingeloggt werden kann sind die Eintreage im File "/etc/securetty" zustaendig dh. folgende Eintraege muessen bestehen:

       # vi /etc/securetty
       
       --------------- /etc/securetty ---------------
       
       ttyS0
       ttyS1
       
       --------------- /etc/securetty ---------------

Nun es ist zwar jetzt moeglich ueber den Serial Port eine Verbindung anhand eines Users oder User "root" zu erstellen jedoch beim "Bootvorgang" werden die Informationen nicht auf den Serial Port ausgegeben. Wir muessen eine Modifikation durchfuehren damit die Consolen Ausgabe auf den Serial Port ausgegebe werden:

       # vi /etc/grub.conf
       
       --------------- /etc/securetty ---------------
       
       # grub.conf generated by anaconda
       #
       # Note that you do not have to rerun grub after making changes to this file
       # NOTICE:  You do not have a /boot partition.  This means that
       #          all kernel and initrd paths are relative to /, eg.
       #          root (hd0,0)
       #          kernel /boot/vmlinuz-version ro root=/dev/hda1
       #          initrd /boot/initrd-version.img
       #boot=/dev/hda
       default=0
       timeout=10
       splashimage=(hd0,0)/boot/grub/splash.xpm.gz
       title RED HAT Core (2.6.5-1.358)
               root (hd0,0)
               kernel /boot/vmlinuz-2.6.5-1.358 ro root=LABEL=/ console=ttyS0,9600
               initrd /boot/initrd-2.6.5-1.358.img
       
       --------------- /etc/securetty ---------------

NOTE
Der relevante Eintrag ist "console=ttyS1,38400". Fehlmanipulationen an diesem File fuehren dazu das Linux nicht mehr gestartet werden kann!

Fuehre nun einen Neustart durch waerend man eine Verbindung mit dem Serial Port besteht. Weitere Informationen betreffend Serial Port Konfiguration findet man auf:

       http://www.znark.com/tech/serialconsole.html
       http://www.vanemery.com/Linux/Serial/serial-console.html

Aktivierung und Konfiguration von OpenSSH

Um noch eine hoehere Sicherheit zu gewaehrleisten muessen wir verhindern das der User "Root" sich direkt einloggen kann und das nur normale User per SSH 2 Protokoll einloggen koennen. Um direkte "Root" Logins zu verhindern oeffne das File "/etc/ssh/sshd2_config" und setze die Zeile "PermitRootLogin" auf "no":

       # vi /etc/ssh/sshd_config
       
       ---------- /etc/ssh/sshd_config ----------
       
       Port 22
       Protocol 2
       ListenAddress 192.168.1.34
       
       SyslogFacility AUTHPRIV
       
       PermitRootLogin no
       StrictModes yes
       
       RhostsAuthentication no
       
       IgnoreRhosts yes
       
       RhostsRSAAuthentication no
       
       PasswordAuthentication yes
       PermitEmptyPasswords no
       
       KerberosAuthentication no
       
       GSSAPIAuthentication yes
       GSSAPICleanupCredentials yes
       
       UsePAM yes
       
       #X11Forwarding yes
       
       Subsystem       sftp    /usr/libexec/openssh/sftp-server
       
       ---------- /etc/ssh/sshd_config ----------

Im naechsten Schritt schalten wir gewisse Authentifizierungen aus sowie erlauben nur SSH Protokoll 2:

       # vi /etc/ssh/ssh_config
       
       ---------- /etc/ssh/ssh_config ----------
       
          RhostsAuthentication no
          RhostsRSAAuthentication no
          PasswordAuthentication yes
       
          Port 22
          Protocol 2
       
           Host *
       
       #  ForwardX11 yes
       
       ---------- /etc/ssh/ssh_config ----------

OpenSSH wird ueber ein Script in "/etc/init.d/sshd" gestartet dh.:

       # /etc/init.d/sshd stop
       # /etc/init.d/sshd start
       
       # /etc/init.d/sshd restart

Konfiguration von cron & crontab

Cron durchsucht das Verzeichns "/var/spool/cron" nach crontab files die Namen tragen nach den erfassten user in "/etc/passwd" dh. zB "root".

Ebenfalls wird das Verzeichns "/etc/cron.d/" durchsucht was wiederum Files enthaelt die anderst aufgebaut sind (crontab). Diese Files werden indem Sinne abgearbeitet, dass Cron jede Minute ueberprueft ob irgendwelche crontabs abgearbeitet werden muessen (/etc/cron.d oder crontabs). Die Besonderheit ist, dass wenn ein Eintrag abgearbeitet werden muss, wird der "output" an den Besitzer (User) des crontab Eintrages gemailt oder an den User der in der Variable MAILTO definiert ist per mail zugestellt.

Bei der Ueberpruefung schaut Cron in das File /"etc/crontab" und erkennt Aenderungen an diesem File. Sind solche Aenderungen vorhanden, laedt Cron das File anhand der Funktion "modtime" neu dh. Aenderungen in "/etc/crontab" beduerfen keines Neustarts von Cron. Die oben beschriebene Funktionen werden durch zwei rpm Packages gewaehrleistet dh:

       vixie-cron-3.0.1-87.i386.rpm
       crontabs-1.10-6.i386.rpm

Durch diese zwei rpm Packages werden folgende Konfig Files angelegt:

       /etc/cron.d/
       /etc/cron.daily/
       /etc/cron.hourly
       /etc/cron.weekly
       /etc/crontab
       /var/spool/cron
       /etc/init.d/crond

NOTE
Beim entfernen dieser Packages werden alle Verzeichnisse entfernt mit Ausnahme von "/etc/cron.daily/". In diesem Verzeichnis befindet sich das "rpm" und "logrotate" script.

Um einen "cron-job" zu erstellen geben wir in folgenden Files zuerst an wer solche "cron-job's" ausfuehren darf:

       # vi /etc/cron.allow
       
       ---------- /etc/cron.allow ----------
       
       root
       
       ---------- /etc/cron.allow ----------
       
       # vi /etc/cron.deny
       
       ---------- /etc/cron.deny ----------
       
       bin
       daemon
       sync
       mail
       nobody
       rpm
       vcsa
       pcap
       mailnull
       smmsp
       sysop
       
       ---------- /etc/cron.deny ----------
       
       # chown root:root /etc/cron.deny /etc/cron.allow
       # chmod 640 /etc/cron.deny /etc/cron.allow

Als naechstes erstellen wir den "cron-job" effektiv dh. dabei ist zu beruecksichtigen, dass das Format betreffend Ausfuehrung resp. Minuten, Stunden etc. ein bestimmtes Format aufweisen muss:

       * * * * *        [Path to script or command]
       *                 Minuten (0-59)
         *               Stunden (0-23)
           *             TagDesMonats (1-31)
             *           Monat des Jahres (1-12)
               *         TagDerWoche (0-6 with 0=Sunday)

Um nun den "cron-job" zu erstellen sind zwei verschiedenen Wege moeglich. Der eine Weg ist ueber das Kommando "crontab -e" und der andere ist das File direkt zu manipulieren oder zu erstellen:

       # crontab -e
       
       ---------- crontab ----------
       
       30 * * * *        /usr/bin/pkill -HUP init
       
       ---------- crontab ----------

Dieses Kommando oeffnet den Editor fuer Cron dh. beim Abspeichern wird die Syntax ueberprueft und sofern nicht richtig das Abspeichern verhindert. Nach erfolgreichen Abspeichern wird ein File mit dem Namen des Users der diesen Eintrag erstellt hat in "/var/spool/cron" abgelegt. In unserem Fall haben wir den Eintrag als User "root" erstellt und deshalb wird das File "/var/spool/cron/root". Es ist unnoetig den Cron Deamon neu zu starten denn dies wird durch die Funktion "modtime" uebernommen.

Nach der Modifikation und nach dem Abspeichern sieht das File das durch "crontab" erstellt wurde folgendermassen aus:

       # cat /var/spool/cron/root
       
       ---------- /var/spool/cron/root ----------
       
       # DO NOT EDIT THIS FILE - edit the master and reinstall.
       # (tmp/crontab.1319 installed on Mon Dec 20. 14:39:59 2004)
       # (Cron version -- $ld: crontab.c,v 2.19 1994/01/17 03:20:37
       30 * * * *        /usr/bin/pkill -HUP init
       
       ---------- /var/spool/cron/root ----------

Die zweite Moeglichkeit ist das File "/var/spool/cron/root" selber zu erstellen und die Modifikation direkt im File durchzufuehren. Dabei muessen zwei Dinge beachtet werden dh. erstens sollte entweder die manuelle Bearbeitung gewaehlt werden oder die mit "crontab -e" jedoch mische "nie" die beiden Varianten. Bei den manuellen Variante muss der Deamon "crond" neu gestartet werden. Nun bleibt noch das File "/etc/crontab" dh. dieses File beinhaltet die Ausfuehrung der verschiedenen Verzeichnisse dh. "cron.hourly", "cron.daily" etc.

       # vi /etc/crontab
       
       --------------- /etc/crontab ---------------
       
       SHELL=/bin/bash
       PATH=/sbin:/bin:/usr/sbin:/usr/bin
       MAILTO=root
       HOME=/
       
       # run-parts
       01 * * * * root run-parts /etc/cron.hourly
       02 4 * * * root run-parts /etc/cron.daily
       22 4 * * 0 root run-parts /etc/cron.weekly
       42 4 1 * * root run-parts /etc/cron.monthly
       
       --------------- /etc/crontab ---------------

Wenn das File "/etc/crontab" modifiziert wird muss der Deamon nicht neu gestartet werden da dieses File wiederum durch die Funktion "modtime" abgearbeitet wird.

Konfiguration von logrotate

Logrotate ist eine Funktion um logs von verschiedenen Programmen zu archivieren und zu kompremieren. Fuer diese Funktion ist das folgende rpm Packages zustaendig:

       logrotate-3.7-4.1.i386.rpm

Bei der Installation des rpm Packages werden folgende Konfig Files erstellt:

       /etc/cron.daily/logrotate
       
       /etc/logrotate.conf


Um nun ein Logrotate einzurichten benuetzen wir ein bereits installiertes und vorbereitetes script sprich:

       # vi /etc/logrotate.conf
       
       --------------- /etc/logrotate.conf ---------------
       
       # see "man logrotate" for details
       # rotate log files weekly
       weekly
       
       # keep 5 weeks worth of backlogs
       rotate 5
       
       # create new empty log files after rotating old ones
       create
       
       # uncomment this if you want your log files compressed
       compress
       
       # RPM packages drop log rotation information into this directory
       include /etc/logrotate.d
       
       # no packages own wtmp -- we'll rotate them here
       
       /oar/log/wtmp {
           monthly
           create 0664 root utmp
           rotate 1
       }
               
       # system-specific logs may be also be configured here.
       
       /var/log/messages {
           rotate 5
           weekly
           sharedscripts
           postrotate
           nomail
                               /sbin/killall -HUP syslogd
           endscript
       }
       
       --------------- /etc/logrotate.conf ---------------

Dieses Script wird aufgerufen durch das Script im Verzeichnis "/etc/cron.daily/" dh. "logrotate". Wenn ein Script monatlich ausgefuehrt werden soll so erstelle dieses im Verzeichnis "/etc/cron.monthly". Das die Verzeichnisse durch den Cron Deamon abgearbeitet werden ist "/etc/crontab" zustaendig dh. die Eintraege betreffend der zu ausfuehrenden Verzeichnissen sind in diesem File "/etc/crontab" enthalten.

Ueberpruefen von mdstat oder RAID Status

Um den Status eines RAID's zu ueberpruefen kann manuell in das File "/proc/mdstat" hineingeschaut werden zB:

       # cat /proc/mdstat
       
       --------------- output mdstat --------------- 
       
       Personalities : [raid1] 
       md2 : active raid1 sdb1[1] sda1[0]
             5244928 blocks [2/2] [UU]
             
       md3 : active raid1 sdb2[1] sda2[0]
             2096384 blocks [2/2] [UU]
             
       md1 : active raid1 sdb5[1] sda5[0]
             235801856 blocks [2/2] [UU]
             
       md0 : active raid1 sdb3[1] sda3[0]
             1052160 blocks [2/2] [UU]
             
       unused devices: <none>
       
       --------------- output mdstat --------------- 

Um jedoch diese Ueberpruefung zu automatisieren erstellen wir ein kleines Script das wir alle 2 Stunden ausfuehren sowie wenn es zu einem crash kommt dieser per E-Mail gemeldet wird. Damit wir nicht sendmail installieren muessen installieren wir einen kleinen Mail-client:

       # mkdir /root/smtp
       # cd /root/smtp
       # mv smtpclient-1.0.0.tar.gz /root/smtp
       # gzip -dc smtpclient-1.0.0.tar.gz | tar xvf -
       # cd /root/smtp/smtpclient-1.0.0
       
       # ./configure \
       --prefix=/opt/smtpclient-1.0.0 \
       --exec-prefix=/opt/smtpclient-1.0.0 \
       --oldincludedir=/opt/smtpclient-1.0.0/usr/include
       # make
       # make install

Um mehr ueber die Funktionen dieses Mail-Client zu erfahren fuehre folgendes aus:

       /opt/smtpclient-1.0.0/bin/smtpclient --help

Nun erstellen wir das Script in einem seperaten Verzeichnis:

       # mkdir /opt/scripts
       # vi /opt/scripts/mdstat.sh
       
       --------------- /opt/scripts/mdstat.sh ---------------
       
       #!/bin/sh -x
       
       # search for bad disks in /proc/mdstat
       for PAT in _U U_ __; do if grep $PAT /proc/mdstat; then i=1; fi ; done
       
       # send mail if we found bad disk(s)
       if [ "$i" == "1" ]; then
       
       # metastat.sh found at least one crashed disk
       echo metastat.sh found at least one crashed disk! | /opt/smtpclient-1.0.0/bin/smtpclient -s 
       'One crashed disk found on host hostname' -f root@domain.ch -S mail.domain.ch webmaster@domain.ch
       support@domain.ch
       fi
       
       --------------- /opt/scripts/mdstat.sh ---------------
       
       # chown -R root:root /opt/scripts
       # chmod -R 700 /opt/scripts

Nun fehlt nur noch der "cron-job" damit das Script alle zwei Stunden zur vollen Stunde ausgefuehrt wird

       # crontab -e
       
       --------------- crontab -e ---------------
       
       0 0,2,4,6,8,10,12,14,16,18,20,22 * * * /opt/scripts/mdstat.sh
       
       --------------- crontab -e ---------------

Einrichten einer Time-Synchronisation NTP

Um mit NTP anhand eines externen Servers die Zeit zu synchronisieren braucht es folgende Konfiguration:

       # rpm -ivh         libcap-1.10-20.x86_64.rpm
       ntp-4.2.0.a.20040617-6.el4.x86_64.rpm
       # vi /etc/ntp.conf
       
       --------------- /etc/ntp.conf ---------------
       
       # Prohibit general access to this service.
       restrict default ignore
       
       # Permit all access over the loopback interface.  This could
       # be tightened as well, but to do so would effect some of
       # the administrative functions.
       restrict 127.0.0.1 
       
       
       # -- CLIENT NETWORK -------
       # Permit systems on this network to synchronize with this
       # time service.  Do not permit those systems to modify the
       # configuration of this service.  Also, do not use those
       # systems as peers for synchronization.
       # restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
       
       
       # --- OUR TIMESERVERS ----- 
       # or remove the default restrict line 
       # Permit time synchronization with our time source, but do not
       # permit the source to query or modify the service on this system.
       
       # restrict mytrustedtimeserverip mask 255.255.255.255 nomodify notrap noquery
       # server mytrustedtimeserverip
       server ntp.metas.ch
       
       
       
       # --- NTP MULTICASTCLIENT ---
       #multicastclient                        # listen on default 224.0.1.1
       # restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
       # restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
               
       
       
       # --- GENERAL CONFIGURATION ---
       #
       # Undisciplined Local Clock. This is a fake driver intended for backup
       # and when no outside source of synchronized time is available. The
       # default stratum is usually 3, but in this case we elect to use stratum
       # 0. Since the server line does not have the prefer keyword, this driver
       # is never used for synchronization, unless no other other
       # synchronization source is available. In case the local host is
       # controlled by some external source, such as an external oscillator or
       # another protocol, the prefer keyword would cause the local host to
       # disregard all other synchronization sources, unless the kernel
       # modifications are in use and declare an unsynchronized condition.
       #
       server  127.127.1.0     # local clock
       fudge   127.127.1.0 stratum 10
       
       #
       # Drift file.  Put this in a directory which the daemon can write to.
       # No symbolic links allowed, either, since the daemon updates the file
       # by creating a temporary in the same directory and then rename()'ing
       # it to the file.
       #
       driftfile /var/lib/ntp/drift
       broadcastdelay  0.008
       
       #
       # Authentication delay.  If you use, or plan to use someday, the
       # authentication facility you should make the programs in the auth_stuff
       # directory and figure out what this number should be on your machine.
       #
       # authenticate yes
       
       #
       # Keys file.  If you want to diddle your server at run time, make a
       # keys file (mode 600 for sure) and define the key number to be
       # used for making requests.
       #
       # PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
       # systems might be able to reset your clock at will. Note also that
       # ntpd is started with a -A flag, disabling authentication, that
       # will have to be removed as well.
       #
       keys            /etc/ntp/keys
       
       --------------- /etc/ntp.conf ---------------
       
       # /etc/init.d/ntp start

Erstellen eines Raid 0

Um ein Raid 0 (auch stripping genannt) zu erstellen muessen wir zuerst die Disk's identifizieren die involiviert sind. In unserem Fall waeren dies die folgenden:

       /dev/sdd
       /dev/sde

Als erstes muessen die Disk's richtig partitioniert werden:

       # fdisk /dev/sde
       
       --------------- output of fdisk --------------- 
       
       The number of cylinders for this disk is set to 48642.
       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)
       
       Command (m for help): t
       Selected partition 1
       
       
       Hex code (type L to list codes): fd
       Changed system type of partition 1 to fd (Linux raid autodetect)
       
       
       Command (m for help): p
       
       Disk /dev/sde: 400.0 GB, 400099294720 bytes
       255 heads, 63 sectors/track, 48642 cylinders
       Units = cylinders of 16065 * 512 = 8225280 bytes
       
          Device Boot      Start         End      Blocks   Id  System
       /dev/sde1               1       48642   390716833+  fd  Linux raid autodetect
               
       
       Command (m for help): w
       The partition table has been altered!
               
       Calling ioctl() to re-read partition table.
       Syncing disks.
       
       --------------- output of fdisk --------------- 

Vergiss dies nicht fuer alle Disks durchzufuehren die in das Raid 0 eingebunden werden sollen. Die Konfiguration selber des Raid 0 befinden sich im File "/etc/raidtab". In diesem File fuehren wir nun die entsprechenden Modifikationen durch. Ist dieses File noch nicht vorhanden erstellen wir es neu:

       # vi /etc/raidtab
       
       --------------- /etc/raidtab --------------- 
       
       raiddev /dev/md4
       raid-level                  0
       nr-raid-disks               2
       persistent-superblock       0
       nr-spare-disks              0
       chunk-size                  32
       device                      /dev/sdd1
       raid-disk                   0
       device                      /dev/sde1
       raid-disk                   1
       
       --------------- /etc/raidtab --------------- 

In diesem Beispiel wird das Raid 0 den Namen /dev/md4 tragen oder sich als dieses Device darstellen. Als naechstes erstellen wir das Raid 0 mit folgenden Befehl:

       # mkraid /dev/md4
       handling MD device /dev/md4
       analyzing super-block

Ob dies durchgefuehrt wurde kann mit folgenden Befehl kontrolliert werden:

       # cat /proc/mdstat
       Personalities : [raid0] [raid1] 
       md4 : active raid0 sde1[1] sdd1[0]
             781433664 blocks 32k chunks

Das Raid 0 wurde angelegt nun kann das Filesystem darauf installiert resp. generiert werden:

       # mke2fs -j -b 4096 -R stride=8 /dev/md4
       mke2fs 1.35 (28-Feb-2004)
       Filesystem label=
       OS type: Linux
       Block size=4096 (log=2)
       Fragment size=4096 (log=2)
       97681408 inodes, 195358416 blocks
       9767920 blocks (5.00%) reserved for the super user
       First data block=0
       5962 block groups
       32768 blocks per group, 32768 fragments per group
       16384 inodes per group
       Superblock backups stored on blocks: 
               32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
               4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
               102400000
       
       Writing inode tables: done                            
       Creating journal (8192 blocks): done
       Writing superblocks and filesystem accounting information: done
       
       This filesystem will be automatically checked every 35 mounts or
       180 days, whichever comes first.  Use tune2fs -c or -i to override.

Das Filesystem steht nun muss noch ein Mount Point erstellt werden und damit dieser automatisch gemountet wird bei einem Systemstart erstellen wir einenEintrag in "/etc/fstab":

       # vi /etc/fstab
       
       --------------- /etc/fstab --------------- 
       
       /dev/md4                /mnt/mountpoint           ext3    defaults        1 2
       
       --------------- /etc/fstab --------------- 

Erstelle nun den Mount Point und mounte diesen:

       # mkdir /mnt/mountpoint
       
       # mount /mnt/mountpoint

Fuehre nochmals eine Kontrolle durch ob das Raid 0 steht und arbeitet:

       # cat /proc/mdstat
       Personalities : [raid0] [raid1] 
       md4 : active raid0 sde1[1] sdd1[0]
             781433664 blocks 32k chunks

Disk-Replacement fuer Raid1

Wenn ein Raid aufgesetzt wurde (Mirror) und eine Disk oder Partition crashed muss die betreffende Disk event. ersetzt werden. Um dies zu bewerkstelligen gehe folgendermasse vor: Zuerst ueberpruefe den Status der Disk'/Mirror's:

       # cat /proc/mdstat
       
       ---------------- output ---------------- 
       
       Personalities : [raid0] [raid1] 
       md1 : active raid1 sdc2[1] sda2[0]
             2096384 blocks [2/2] [UU]
             
       md3 : active raid1 sdc3[1] sda3[0]
             1052160 blocks [2/2] [UU]
             
       md2 : active raid1 sdc5[2](F) sda5[0]
             147894272 blocks [2/1] [U_]
       
       md0 : active raid1 sdc1[1] sda1[0]
             5245120 blocks [2/2] [UU]
       
       ---------------- output ---------------- 

Analysiere zuerst die Situation und verschaffe dir einen Ueberblick dh. in unserem Beispiel ist der Mirror von "md2" nicht mehr in Ordnung dh. Disk/Partition "sdc5" ist mit "(F) markiert sprich dies bedeutet "faulty". Nun alle anderen Mirror's laufen aktiv auf "sdcx" sprich man kann die Disk "sdc" nicht einfach entfernen!

Als erstes produzieren wir einen Failover auf allen Partitionen auf die Disk "sda". Um das zu bewerkstelligen muessen alle "sdcx" Partitionen als "fault" gekennzeichnet werden:

       # mdadm --manage --fail /dev/md1 /dev/sdc2
       # mdadm --manage --fail /dev/md3 /dev/sdc3
       # mdadm --manage --fail /dev/md0 /dev/sdc1

Nun koennen wir die Partitionen aus dem Mirror nehmen:

       # mdadm --manage -r /dev/md1 /dev/sdc2
       # mdadm --manage -r /dev/md3 /dev/sdc3
       # mdadm --manage -r /dev/md3 /dev/sdc5
       # mdadm --manage -r /dev/md0 /dev/sdc1

Nun haben wir eine neue Situation

       # cat /proc/mdstat
       
       ---------------- output ---------------- 
       
       Personalities : [raid0] [raid1] 
       md1 : active raid1 sda2[0]
             2096384 blocks [2/1] [U_]
             
       md3 : active raid1 sda3[0]
             1052160 blocks [2/1] [U_]
             
       md2 : active raid1 sda5[0]
             147894272 blocks [2/1] [U_]
         
       md0 : active raid1 sda1[0]
             5245120 blocks [2/1] [U_]
       
       ---------------- output ---------------- 

Nun muss der Server runtergefahren werden:

       # shutdown -h now

Sobald der Server ausgeschaltet ist und vom Strom genommen wurde ersetze die entsprechende Disk. Die neue Disk muss minimum so gross sein wie die zu ersetzende Disk (auf keinen Fall kleiner). Sobald das Die Disk ersetzt wurde starte den Server neu. Sobald er vollstaending gestartet wurde muss nun als Erstes das Layout der aktiven Disk dh. "sda" auf die neue Disk "sdc" kopiert werden.

       # sfdisk -d /dev/sda | sfdisk /dev/sdc

Ueberpruefe ob dem so ist:

       # fdisk -l

Nun koennen die einzelnen Partitionen wiederum zum Mirror hinzugefuegt werden:

       # mdadm --manage -a /dev/md1 /dev/sdc2
       # mdadm --manage -a /dev/md3 /dev/sdc3
       # mdadm --manage -a /dev/md3 /dev/sdc5
       # mdadm --manage -a /dev/md0 /dev/sdc1

Es koennen zwar alle Befehle nacheinander abgesetzt werden jedoch "mdadm" kann nur jeweils eine Partition neu Synchronisieren. Der Vorgang kann mit folgendem Befehl ueberwacht werden:

       # cat /proc/mdstat

Nach erfolgreicher Synchronisation ist es ratsam den Server neu zu starten:

       # reboot

Es ist ratsam die Partitionstabelle der Disk's zu speichern. Dies wird folgendermassen bewerkstelligt:

       # mkdir /raidinfo
       # sfdisk -d /dev/sda > /raidinfo/partitions.sda
       # sfdisk -d /dev/sdb > /raidinfo/partitions.sdb

Um die Partitionstabelle im Notfall wieder herzustellen fuehre folgenden Befehl aus

       # sfdisk /dev/sda < /raidinfo/partitions.sda

Wenn die Situation eintrifft das der Server nicht mehr bootet weil die Boot Disk nicht mehr zur Verfuegung steht muss ueber die noch intakte Disk gebootet werden. Diese Disk muss jedoch ueber einen MBR (Master Boot Record) verfuegen. Ein Software Raid legt per standard diesen MBR nur auf der Master Disk an jedoch nicht auf der Slave Disk. Gehen wir davon aus das der Master /dev/sda ist und der Slave /dev/sdb muss der MBR bei einem Ausfall von /dev/sda zuerst auf /dev/sdb geschrieben werden. Nur so kann von dem Slave gestartet werden. Um dies zu gewaehrleisten gehe folgendermassen vor:

       # grub
       
       Um nun festzustellen wo ueberall ein Grub Setup installiert ist gebe ein:
       
       # find /boot/grub/stage1
       (hd0,0)
       (hd1,0)
       
       NOTE Die Ausgabe (hd0,0) und (hd1,0) bedeutet Sda=hd0 sdb=hd1
       
       Da die Ausgabe ueber das "find" Kommando angiebt das hd0 bereits ein Grub aufweist im MBR koennen wir 
       folgende Befehl ausfuehren um diese Infos auf hd1 sprich /dev/sdb zu uebertragen:
       
       Grub>device (hd0) /dev/sdb
       Grub>root (hd0,0)
       Filesystem type is ext2fs, partition type 0xfd
       
       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)"...  16 sectors are embedded.
       succeeded
        Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
       Done.
       
       NOTE "/dev/sdb" stellt den Slave dar des Mirrors. Welches der Mirror ist kann ueber "cat /proc/mdstat" 
       herausgefunden werden.
       
       Grub wird nun die noetigen Aenderungen vornehmen. Sobald diese Aenderungen durchgefuehrt sind besteht auf 
       dem Slave ebenfalls ein aktiver MBR und somit kann der Slave im Fall eines Total Ausfalls des Masters 
       gebootet werden was  ohne diese Aenderungen nicht moeglich waere.
       
       Mehr infos ueber diese Angaben findet man unter:
       
       http://lists.us.dell.com/pipermail/linux-poweredge/2003-July/008898.html