26.12.2014 Aufrufe

Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...

Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...

Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

:<br />

H. Wolfger<br />

Höhere Technische<br />

Bundes­Lehr­ und Versuchsanstalt<br />

<strong>BULME</strong> <strong>Graz</strong> – Gösting<br />

L i n u x<br />

<strong>Serverkonfiguration</strong><br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 1/63


Inhaltsverzeichnis<br />

1) NFS Networking File System.............................................................................................................3<br />

2) FTP Server vsftpd................................................................................................................................7<br />

3) Domain Name Service (DNS)............................................................................................................13<br />

4) Webserver apache..............................................................................................................................18<br />

5) Software Updates...............................................................................................................................24<br />

6) Firewall mit iptables...........................................................................................................................26<br />

7) Mailserver sendmail...........................................................................................................................30<br />

8) Proxy squid........................................................................................................................................33<br />

9) Nameserver, Webserver, Mailserver und Proxy................................................................................37<br />

10) Dual Boot mit Windows und <strong>Linux</strong>.................................................................................................38<br />

11) Kernelkompilierung.........................................................................................................................40<br />

12) Der Bootvorgang..............................................................................................................................43<br />

13) Automatisierung von Aufgaben mit cron.........................................................................................46<br />

14) Übungen zur Bash mit sort, cut und uniq (ohne Programmierteil)..................................................49<br />

15) Weitere Übungen zur Bash (mit Programmierteil)..........................................................................51<br />

16) Download und Installation eines Programms..................................................................................58<br />

17) Grafische Benutzeroberfläche..........................................................................................................60<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 2/63


1) NFS Networking File System<br />

Mit NFS ist es möglich, andere Dateisysteme, Partitionen oder Verzeichnisse anderer Hosts in<br />

das lokale System einzubinden. Anders formuliert können mehrere Rechner ein zentrales<br />

Verzeichnis auf dem NFS Server gemeinsam benutzen. Aus Gründen der Einfachheit wird für<br />

diese Übung die Firewall deaktiviert.<br />

Bildquelle: http://www.linux­user.de/ausgabe/2005/11/044­heimnetz/nfs.png<br />

Konfiguriert wird dies am Desktop mit<br />

Start/Administration/Servereinstellungen/NFS/Hinzufügen<br />

(system­config­nfs muss installiert sein)<br />

Will man nicht nur Leserechte, sondern auch Schreibrechte, muss bei Eigenschaften und<br />

Benutzerzugriff “Remote­root Benutzer wie lokalen Rootbenutzer behandeln” angekreuzt<br />

werden.<br />

Die Zugriffsrechte werden in der Datei /etc/exports gespeichert und können auch direkt mit<br />

einem Editor verändert werden.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 3/63


Beispiel: pc15 will sein DVD Laufwerk für das Netz 192.168.0.0/16 zum Lesen freigeben, sowie<br />

das Verzeichnis /home für das Netz 172.16.25.0/24 zum Lesen und Schreiben.<br />

In der Datei /etc/exports des pc15 steht folgendes:<br />

# Datei /etc/exports des pc15<br />

/cdrom<br />

/home<br />

172.16.0.0/16(ro,insecure,sync)<br />

172.16.25.0/24(rw,sync,no_root_squash)<br />

Die Option no_root_squash wurde hinzugefügt, die dem remote Root Benutzer dieselben Rechte<br />

wie dem lokalen root gibt. Wenn jedoch keine weiteren Einstellungen getroffen werden, haben<br />

die Benutzer noch keine Schreiberlaubnis auf /home !<br />

Am pc10 können mit den Befehlen<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

mount ­t nfs 172.16.25.15:/cdrom /pc15­cdrom<br />

mount ­t nfs 172.16.25.15:/home /pc15­home<br />

die Verzeichnisse /cdrom und /home des pc15 unter dem Verzeichnissen /pc15­cdrom und /pc15­<br />

home angesprochen werden.<br />

Unmounten:<br />

umount /pc15­cdrom<br />

umount /pc15­cdrom<br />

Der Zugriff auf den anderen Rechner pc15 kann durch einen Eintrag in der Datei /etc/fstab des<br />

Rechners PC10 permanent gemacht werden:<br />

172.16.25.15:/home/franz /nfstest nfs defaults 0 0<br />

Werden die Einstellungen in der Datei /etc/exports mit der Hand geändert, ist nfs neu zu<br />

starten:<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 4/63


systemctl restart nfs.service oder<br />

service nfs restart<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

Kennen die Benutzer das Administratorpasswort nicht, muss das Passwort eines Benutzers<br />

angegeben werden, mit dem sich die anderen PC's anmelden können. In der Datei /etc/exports<br />

können folgende Optionen angegeben werden:<br />

root_squash<br />

no_root_squash<br />

all_squash<br />

no_all_squash<br />

Benutzer, die sich am entfernten PC als root mit nfs zugreifen, werden<br />

auf die UID nobody gesetzt, die nur Leserechte hat. (Voreinstellung)<br />

Benutzer, die sich am entfernten PC als root mit nfs zugreifen, werden<br />

auch am lokalen System als root behandelt.<br />

Wandelt alle UID's des entfernten Benutzers in anonyme UID um<br />

Wandelt die UID's des entfernten Benutzers nicht um, ein Benutzer<br />

franz am entfernten PC wird auch am lokalen PC als Benutzer franz<br />

identifiziert – falls er überhaupt angelegt ist. Dies ist die<br />

Voreinstellung.<br />

Die Datei /etc/exports könnte für den Fall, dass die Rootrechte nicht gewährt werden, aber alle<br />

lokal angelegten Benutzer auch von außen zugreifen dürfen, folgend aussehen.<br />

/daten­fuer­alle 172.16.25.0/24(rw,sync,no_all_squash)<br />

­­­­­­­­­­­­ ­­­­­­­­­­­­ ­­­­­­­­­­­­ ­­­­­­­­­­­<br />

Will man alle Benutzer auf eine lokale anonyme UID mappen, unabhängig davon, ob sie als root<br />

oder als lokaler Benutzer zugreifen, also alle Benutzer als anonyme Benutzer behandeln, kann<br />

dies leicht in der grafischen Benutzeroberfläche geschehen: in der Datei /etc/passwd ist der<br />

anonyme Benutzer nfsnobody eingetragen; dessen UID und GID sind nun anzugeben. Es kann<br />

aber auch die UID des Benutzers franz angegeben werden, dann werden alle Zugriffe so<br />

bewertet, als ob franz zugreifen würde.<br />

­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 5/63


Anmerkung: Wird die Firewall nicht ausgeschaltet sind die ports 2049 und 111 sowie<br />

3 selbst definierte Ports in der Firewall freizugeben:<br />

Übungen:<br />

a) Geben Sie Ihr DVD Laufwerk für das Netz frei und versuchen Sie eine Datei auf der DVD<br />

Ihres Nachbarn auf ihren PC zu kopieren.<br />

b) Ihr Verzeichnis /home geben Sie zum Lesen und Schreiben nur für Ihren Nachbarn frei.<br />

Kopieren Sie eine Datei auf das freigegebene Verzeichnis /home Ihres Nachbarn.<br />

c) Editieren Sie den File /etc/fstab um das Verzeichnis /home Ihres Nachbarn über NFS<br />

permanent einzubinden.<br />

d) Ermöglichen Sie dem remote root auch einen lokalen root Zugriff.<br />

e) Behandeln Sie alle Benutzer gleich als anonyme Benutzer.<br />

f) Stellen Sie in der grafischen Benutzeroberfäche die Firewall ein und versuchen einen Ordner<br />

freizugeben.<br />

g) Stellen Sie beim Benutzerzugriff die UID des Benutzers franz ein. Warum kann dann eine<br />

Datei, die root gehört, vom gemounteten Verzeichnis des anderen PC gelöscht werden, jedoch<br />

kein Verzeichnis, das root gehört <br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 6/63


2) FTP Server vsftpd<br />

Das File Transfer Protocol (FTP) dient zur Dateiübertragung zwischen Hosts und basiert auf<br />

einer Client­Server Architektur. FTP verwendet einen Datenkanal, (Port 20), der für die reine<br />

Übertragung der Daten zuständig ist, und einen Steuerkanal, (Port 21), der für den Austausch<br />

der Befehle verwendet wird.<br />

In der Fedora Distribution wird der vsftpd Server mitgeliefert, der auf allen Unix ähnlichen<br />

Maschinen läuft, hohen Sicherheitsansprüchen genügt und einige komfortable<br />

Konfigurationsmerkmale bietet. (vsftpd ... very secure file transfer protocol daemon – daemon<br />

ist ein Hintergrundprozess). Der Server wird in der Datei /etc/vsftpd/vsftpd.conf konfiguriert.<br />

Start des Servers mit: systemctl restart vsftpd.service oder<br />

service vsftpd restart<br />

Die Standardeinstellungen in der Konfigurationsdatei erlauben anonymes wie auch<br />

benutzerbezogenes <strong>Login</strong>. Als FTP Client verwenden wir den mit der Fedora Distribution<br />

mitgelieferten lftp.<br />

lftp ­u franz 172.16.25.15<br />

lftp ­u franz,franz123 172.16.25.15<br />

lftp 172.16.25.15<br />

Benutzerbezogenes Anmelden<br />

Benutzerbezogenes Anmelden + Passwort<br />

anonymes Anmelden<br />

Anmerkung: Zum Testen empfiehlt sich das Setzen eines alias, zB:<br />

alias v=”lftp ­u franz,franz123 172.16.25.15”<br />

Bei anonymem <strong>Login</strong> landet der Benutzer im Verzeichnis /var/ftp<br />

Veränderung der Konfigurationseinstellungen in /etc/vsftpd/vsftpd.conf<br />

anonymous_enable=NO<br />

local_enable=NO<br />

write_enable=NO<br />

anon_upload_enable=YES<br />

Anonymes FTP ist nun nicht mehr erlaubt<br />

Lokales FTP (für angelegte Benutzer) verboten<br />

lokale Benutzer: die dürfen nun nicht uploaden<br />

Anonyme Benutzer dürfen uploaden<br />

Verzeichnis pub muss dem Benutzer ftp gehören !!<br />

chroot_list_enable=YES<br />

Erlaubnis, einen Listfile anzulegen<br />

chroot_local_user=YES<br />

lokaler Benutzer auf sein Verzeichnis beschränkt...<br />

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list außer die im Listfile sind<br />

banner_file=/etc/vsftpd/banner_file<br />

dirmessage_enable=YES<br />

local_max_rate=30000<br />

Begrüßungsdatei<br />

Die Datei .message wird bei Verzeichniswechsel<br />

ausgegeben<br />

30000 Bytes/sec Transferrate<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 7/63


userlist_enable=YES<br />

Benutzer im File user_list dürfen nicht einloggen<br />

user_config_dir=/etc/vsftpd/user_config Wenn der Benutzer franz sich anmeldet, wird für ihn<br />

die Konfiguration in der Datei /etc/vsftpd/user_config/franz<br />

eingestellt (Ausnahmen: banner_file usw.)<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

Zur Automatisierung von Aufgaben können auch Batchfiles verwendet werden:<br />

lftp ­f batchfile<br />

In der Datei batchfile steht zB.:<br />

open ­u franz,franz123 172.16.25.10<br />

echo “ ­­­­­­­­­­­­­ Beginn der Übertragung ...”<br />

put file1<br />

mput a*<br />

echo “­­­­­­­­­­­­­­ Übertragung beendet ...”<br />

exit<br />

Verschlüsselte Übertragung mit FTP:<br />

Soll eine verschlüsselte Übertragung mit TLS (Transaction Layer Security) ermöglicht werden,<br />

sind folgende Zeilen in vsftpd.conf hinzuzufügen:<br />

ssl_enable=YES<br />

force_local_logins_ssl=NO<br />

force_local_data_ssl=NO<br />

ssl_tlsv1=YES<br />

rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem<br />

ssl_sslv2=YES<br />

ssl_sslv3=YES<br />

Dadurch wird eine verschlüsselte Übertragung ermöglicht aber nicht erzwungen.<br />

Das Zertifikat wird in /etc/pki/tls/certs folgend erzeugt:<br />

cd /etc/pki/tls/certs<br />

make vsftpd.pem<br />

Damit wird ein rsa private key sowie ein self signed Zertifikat erzeugt<br />

sftp franz@172.16.25.15<br />

ermöglicht nun bereits verschlüsselten Transfer ohne Konfiguration. Dieser Client besitzt aber<br />

einen reduzierten Befehlssatz und wird daher selten verwendet.<br />

ncftp ­u franz 172.16.25.15<br />

ncftp ist ein ftp Client, der keine Verschlüsselung beherrscht, geht nun auch, ist aber nicht<br />

verschlüsselt<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 8/63


lftp ­u franz 172.16.25.15<br />

Bei Verwendung des komfortablen lftp Clients kann eine verschlüsselte Übertragung auch<br />

erzwungen werden, indem in der Konfigurationsdatei /etc/lftp.conf folgende Anweisungen<br />

hinzugefügt werden:<br />

set ftp: ssl­force YES<br />

set ftp: ssl­protect­data YES<br />

Will man serverseitig nur verschlüsselte Passwörter und Datenübertragung erlauben, so sind<br />

die Anweisungen in vsftpd.conf<br />

force_local_logins_ssl=YES<br />

force_local_data_ssl=YES<br />

zu setzen, ncftp geht dann nicht mehr, sftp schon.<br />

Die Verwendung von TLS/SSL kann wegen der aufwändigen Verschlüssselung auch dem Client<br />

untersagt werden:<br />

set ftp:ssl­allow NO<br />

Eine Verifizierung der Übertragungsdaten kann durch die Option<br />

set xfer:verify yes<br />

in /etc/lftp.conf eingestellt werden.<br />

In der Datei ~/.lftp/rc (oder allgemein /etc/lftp.conf) können zusätzliche Clienteintsellungen<br />

vorgenommen werden:<br />

set ssl:verify­certificate no<br />

dient dazu, das Zertifikat nicht zu überprüfen<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 9/63


Aktives und Passives FTP:<br />

Bildquelle: http://www.linuxhomenetworking.com/wiki/images/a/a7/Ftp.gif<br />

Beim aktiven FTP öffnet der Client auf dem Server den Port 21 und gibt auf diesem Port seine<br />

Befehle wie ls und get ab. Wenn der Client eine Datei übertragen will, öffnet der Server seinen<br />

Port 20 und überträgt die Datei auf einen hohen Port des Clients. In der einen Richtung wird<br />

also von einem hohen Port des Clients zu Port 21 des Servers übertragen, in der anderen<br />

Richtung von Port 20 des Servers zu einem hohen Port des Clients.<br />

Beim passiven FTP beginnt die Eröffnung gleich wie beim aktiven FTP: Es wird eine<br />

Verbindung client:hoher­port zu server:port21 aufgebaut. Wenn jedoch der Client eine Datei<br />

wünscht, baut der Client von sich aus eine Verbindung client:hoher­port zu Server:hoher­port<br />

auf.<br />

Passives FTP ist für Firewalls leichter zu handhaben; da die Verbindung immer von Client<br />

ausgeht, wird sie auch als sicherer angesehen.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 10/63


Grafische FTP Clients:<br />

Es gibt auf dem Desktop viele grafische FTP Clients, unter KDE etwa Kasablanca oder KFTP<br />

Grabber<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 11/63


Beispiele:<br />

1) Stellen Sie den Server so ein, dass anonymes ftp auf das Verzeichnis pub mit upload<br />

möglich ist<br />

2) Alle Benutzer sind chrooted, nur franz darf sich frei bewegen<br />

3) Maximale Transferrate ist bei 20 KB<br />

4) Erstellen Sie eine Begrüßungsdatei<br />

5) Wenn der anonyme Benutzer in das Verzeichnis pub/franz geht, soll er eine Information<br />

über den Inhalt dieses Verzeichnisses erhalten.<br />

6) Der Benutzer franz hat eine Transferrate von 200KB, alle anderen 20 KB<br />

Antworten zu den Beispielen<br />

zu 1) anonymous_enable=YES anonymes ftp erlaubt<br />

anon_upload_enable=YES<br />

upload erlaubt<br />

zu 2)<br />

zu 3)<br />

chroot_list_enable=YES<br />

chroot_local_user=YES<br />

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list<br />

20000 Bytes/sec Transferrate<br />

local_max_rate=20000<br />

zu 4) banner_file=/etc/vsftpd/banner_file Eine der zwei Zeilen<br />

ftp_banner=Hallo am FTP Server.....<br />

Anmerkung: debug 3 in /etc/lftp.conf !<br />

zu 5)<br />

dirmessage_enable=YES<br />

in /var/ftp/pub/franz eine Datei .message erstellen<br />

Weiter Feineinstellungen in man vsftpd.conf<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 12/63


3) Domain Name Service (DNS)<br />

In einem kleinen Netz ohne Domain Name Service kann das Nameservice durch die Files<br />

/etc/hosts<br />

/etc/host.conf<br />

konfiguriert werden.<br />

In /etc/hosts stehen die IP­Adressen und die Hostnamen:<br />

127.0.0.1 localhost.localdomain localhost<br />

172.16.25.1 pc1.graz.at pc1<br />

172.16.25.2 pc2.graz.at pc2<br />

In /etc/host.conf wird festgelegt, ob bei der Namensauflösung zuerst der DNS bind oder die Datei<br />

/etc/hosts befragt wird.<br />

order hosts,bind<br />

# Bei Namensauflösung zuerst /etc/hosts befragen<br />

Mit diesen Einstellungen sind pc1 und pc2 aber nur bei denjenigen PC's bekannt, die diese<br />

Dateien übernommen haben.<br />

Domain Name Server bind<br />

Das Domain Name Service ist der grundlegende Dienst des Internets, denn ohne eine<br />

Namensauflösung (Umsetzung des Namens in eine IP Adresse) wären Surfen und Mailen nicht<br />

möglich. Für einen Domain müssen aus Gründen der Ausfallsicherheit 2 Hosts das<br />

Nameservice bereitstellen. DNS ist ein streng hierarchischer Dienst. Es gibt weltweit einige<br />

Rootserver, die die Informationen über die Top Level Domains (TLD) wie zB. .at oder .com<br />

besitzen. Für jeden Top Level Domain gibt es mehrere Server, die die Informationen der Sub<br />

Level Domains (SLD) wie zB. bulme.at oder nic.at beinhalten. Erst der Nameserver für einen<br />

domain bulme.at enthält die Informationen über die jeweiligen Hosts innerhalb des Domains<br />

bulme.at.<br />

Die Namensauflösung www.bulme.at. geschieht also von rechts nach links: Zuerst wird der<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 13/63


Rootserver (durch den Punkt am Ende des Namens bezeichnet) befragt, der die Anfrage an den<br />

zuständigen Nameserver für at weiterleitet, der wiederum eine Weiterleitung an den<br />

Nameserver der <strong>Bulme</strong> veranlasst; erst hier passiert die tatsächliche Auflösung des Hostnamens<br />

in eine IP­ Adresse.<br />

.<br />

Rootserver<br />

com<br />

at<br />

de<br />

TLD<br />

linux<br />

bulme<br />

SLD<br />

www<br />

proxy<br />

Host<br />

Hierarchische Auflösung eines Hostnamens in eine IP Adresse<br />

Start des Nameservers:<br />

systemctl (re)start named.service<br />

(service named (re)start)<br />

Die Konfigurationsfiles sind:<br />

1) /etc/resolv.conf<br />

2) /etc/named.conf und /etc/named.eigene­zonen<br />

3) /var/named/graz.at.db<br />

4) /var/named/25.15.172.in­addr.arpa<br />

Überprüft wird das nameservice mit dem Tool nslookup oder mit dem neueren Tool dig.<br />

Aus Sicherheitsgründen kann der Nameserver auch in einem „Jail“ gestartet werden, aus dem<br />

ein etwaiger Angreifer bei der Kompromittierung des Servers nicht ausbrechen kann. Wird der<br />

Nameserver mit einem jail installiert, ist allen Pfadangaben (Ausnahme: /etc/resolv.conf) ein<br />

/var/named/chroot voranzustellen. Dies ist nun in Fedora 13 automatisch der Fall.<br />

1) /etc/resolv.conf<br />

# hier wird der nameserver definiert<br />

nameserver 172.16.25.15<br />

2) /etc/named.conf<br />

options {<br />

listen­on port 53 { 127.0.0.1; 172.16.25.15; };<br />

// .....ausgeschnitten ...<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 14/63


include "/etc/pki/dnssec­keys//dlv/dlv.isc.org.conf";<br />

include "/etc/named.eigene­zonen";<br />

// hinzugefügte Zeile<br />

Zur bereits bestehenden Datei named.conf fügen wir nur eine Zeile hinzu<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

Datei /etc/named.eigene­zonen<br />

};<br />

zone "graz.at" IN {<br />

type master;<br />

file "graz.at.db";<br />

allow­update { none; };<br />

Diese Datei erstellen wir mit dem Editor.<br />

3) Die Datei graz.at.db erstellen wir auch mit Hilfe einer vorgefertigten Zonendatei:<br />

cd /var/named<br />

cp named.localhost<br />

graz.at.db<br />

/var/named/graz.at.db<br />

(Zonefile für graz.at)<br />

$TTL 1D ; Time To Live<br />

@ IN SOA pc15.graz.at. root.pc15.graz.at. (<br />

2010122001 ; Serial Number<br />

1D<br />

; Refresh time ein Tag<br />

1H<br />

; Retry time 1 Stunde<br />

1W<br />

; Expire time 1 Woche<br />

3H )<br />

; Minimum<br />

NS @<br />

A 127.0.0.1<br />

IN MX 10 pc15.graz.at.; Mailserver für graz.at<br />

pc15 IN A 172.16.25.15<br />

pc10 IN A 172.16.25.10<br />

www IN CNAME pc15<br />

mail IN CNAME pc10<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

$TTL<br />

Serial Number<br />

Refresh time<br />

Retry<br />

Expire<br />

Minimum<br />

Time To Live: Einen Tag darf ein Cache diese Einträge zwischen<br />

speichern<br />

Der Secondary Nameserver überprüft anhand dieser Nummer ob seine<br />

Einträge noch aktuell sind.<br />

In diesem Zeitintervall wird vom secondary nameserver überprüft, ob<br />

sich die Serial Number des primary nameservers geändert hat<br />

In diesem Zeitintervall macht der secondary Refrehes<br />

Hat der secondary nameserver diese Zeit erfolglos versucht, den prima<br />

ry zu erreichen, wird diese Zone verworfen<br />

wurde durch $TTL ersetzt<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 15/63


Die Dateien /var/named/na* werden nach /var/named/chroot/var/named kopiert:<br />

cp ­a /var/named/na* /var/named/chroot/var/named<br />

4) Viele Dienste verlangen ein sogenanntes reverse Nameservice, also die Ermittlung des Namens<br />

bei gegebener IP Adresse. Die für den Anfänger etwas kryptische Namensgebung benennt<br />

die Dateien auch “reverse”.<br />

Datei 25.15.172.in­addr.arpa<br />

; der reverse file fuer das Netz 172.16.25.0<br />

@ IN SOA pc15.graz.at. wolfger.pc15.graz.at. (<br />

2012110601 ; Serial<br />

28800 ; Refresh<br />

14400 ; Retry<br />

3600000 ; Expire<br />

86400 ) ; Minimum<br />

;nameserver<br />

NS @<br />

A 127.0.0.1<br />

1 IN PTR pc1.graz.at.<br />

2 IN PTR pc2.graz.at.<br />

9 IN PTR pc15.graz.at.<br />

Aus Sicherheitsgründen läuft der Nameserver nicht mit den Rechten des Administrators root,<br />

sondern wird unter dem Benutzer named gestartet. Beim Erstellen und Kopieren von Dateien<br />

ist daher darauf zu achten, dass diese der Gruppe named zugeordnet sind, damit der Benutzer<br />

named Leserechte auf diese Dateien besitzt.<br />

chgrp named /var/named/*<br />

chgrp named /etc/named.eigene­zonen<br />

Sekundärer Nameserver:<br />

Auf dem Rechner des sekundären Nameservers kann die Konfigurationsdatei des primären<br />

Nameservers mit einigen Änderungen übernommen werden:<br />

zone "sinabelkirchen.at" {<br />

type slave;<br />

file "slaves/sinabelkirchen.at";<br />

masters {172.16.25.10; };<br />

};<br />

Das Verzeichnis slaves ist bereits angelegt und hat auch die entsprechenden Rechte, sodass der<br />

master die Dateien in dieses Verzeichnis problemlos ablegen kann.<br />

Die Zonefiles des primary Nameservers werden automatisch auf den secondary transferiert,<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 16/63


sobald auf dem secondary named gestartet wird. Der File sinabelkirchen.at braucht auf dem<br />

secondary nicht erstellt zu werden. Wird der primary zonefile verändert, muss die<br />

Serialnummer erhöht werden, um dem secondary nameserver die veränderten Zonefiles<br />

anzuzeigen.<br />

Zum Testen des Nameservers gibt es den Befehl<br />

oder das neuere Tool dig:<br />

nslookup www.graz.at<br />

dig www.bulme.at<br />

dig linux.at ns<br />

dig linux.at mx<br />

dig –x 172.16.12.8<br />

dig www.linux.de +trace<br />

dig www.linux.at +short<br />

Liefert IP Adresse<br />

Liefert Nameserver für domain linux.at<br />

Liefert Mailserver für linux.at<br />

Liefert Namen der IP Adresse<br />

Liefert Auflösungsmodus<br />

Kurze Antwort<br />

Bildquelle: www.osnets.de<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 17/63


Übungen:<br />

1) Richten Sie als Übung einen zusätzlichen Domain für „Nachname.at“ als primären<br />

Nameserver ein.<br />

2) Arbeiten Sie zu zweit: Richten Sie einen sekundären Nameserver für die Domänen<br />

graz.at und bruck.at ein. Wann und unter welchen Umständen findet ein Zonetransfer<br />

vom primären zum sekundären Nameserver statt <br />

3) Schauen Sie auf www.nic.at ! Dort können Sie Ihren domain registrieren lassen<br />

Dokumentation:<br />

http://www.isc.org<br />

http://www.linuxhomenetworking.com<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 18/63


4) Webserver apache<br />

Bildquelle:<br />

www.wiegmann­linux.com<br />

Der Apache Webserver ist der meistbenutzte Webserver im Internet; er ist sowohl unter <strong>Linux</strong><br />

als auch unter Windows freie Software.<br />

Die Konfigurationsdatei liegt in /etc/httpd/conf/httpd.conf. Die wichtigsten Einstellungen sind:<br />

Port 80<br />

Apache horcht auf den Port 80, der Standardport für das HTTP<br />

ServerRoot<br />

/etc/httpd<br />

Dort befinden sich die Konfigurations­, Log­ und Errordateien.<br />

ServerAdmin vorname.nachname@bulme.at<br />

E­Mail Adresse des Administrators des Webservers<br />

ServerName www.graz.at<br />

Der Name des Webservers; muss im DNS (Domain Name Service) eingetragen sein.<br />

DocumentRoot /home/httpd/html<br />

Hier befindet sich die Startwebseite des Servers<br />

DirectoryIndex<br />

index.html, index.php, index.pl, index.cgi<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 19/63


Die Startseite des Webservers muss einen dieser Namen annehmen<br />

#UserDir<br />

disable<br />

UserDir<br />

public_html<br />

Im Verzeichnis /home/user/public_html kann jeder Benutzer seine Homepage ablegen. Sie ist<br />

dann unter ServerName/~username abrufbar.<br />

ErrorLog<br />

/var/log/httpd/www­error.log<br />

Logfile für eventuelle Fehlermitteilungen<br />

CustomLog<br />

/var/log/httpd/www­access.log combined<br />

Logfile für die Zugriffe auf die Webseite<br />

Werden nun mehr als eine Webseite auf dem Server abgelegt, so können mit Hilfe der<br />

VirtualHost Anweisungen diese Seiten unter verschiedenen Namen aufgerufen werden. Diese<br />

Namen müssen natürlich auch im Nameservice aufscheinen.<br />

Ist der Server gestartet steht eine ausführliche Dokumentation auf dieser Webseite zur<br />

Verfügung:<br />

http://localhost/manual<br />

Das folgende Beispiel beschreibt eine virtuelle Konfiguration für den Server pc15.graz.at<br />

<br />

ServerAdmin franz@graz.at<br />

DocumentRoot /home/httpd/pc15<br />

DirectoryIndex index.html<br />

ServerName pc15.graz.at<br />

<br />

require all granted<br />

<br />

ErrorLog /var/log/httpd/pc15­error.log<br />

CustomLog /var/log/httpd/pc15­access.log common<br />

<br />

Die Startseite der virtuellen Webseite pc15.graz.at muss index.html heißen und muss im<br />

Verzeichnis /home/httpd/pc15 liegen. Dieses Verzeichnis wird mit „require all granted“<br />

freigegeben.<br />

Benutzerbezogene Webseiten: Wird die Anweisung<br />

auskommentiert, und<br />

UserDir disable<br />

UserDir public_html<br />

gesetzt, so kann der Benutzer franz seine homepage unter /home/franz/public_html/index.html<br />

ablegen und ist unter www.graz.at/~franz erreichbar. Die Rechte müssen derart gesetzt sein,<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 20/63


dass der User apache diese Seite lesen kann.<br />

Starten, Stoppen und Status des Webservers<br />

systemctl { start | stop | restart | status } httpd.service<br />

service httpd { start | stop | restart | status }<br />

Konfiguration des Virtual Host franz.graz.at mit einer Zugriffsbeschränkung:<br />

In diesem Beispiel müssen alle Benutzer ein Passwort eingeben, der Benutzer von Adresse<br />

172.16.25.15 hat jedoch ohne Passwort Zugriff.<br />

<br />

ServerAdmin franz@graz.at<br />

DocumentRoot /home/httpd/franz<br />

ServerName franz.graz.com<br />

ErrorLog /var/log/httpd/franz­error.log<br />

CustomLog /var/log/httpd/franz­access.log common<br />

# Dieses Verzeichnis wird geschützt<br />

AuthName "Private Webseite"<br />

AuthType Basic<br />

# Plain Text Authentifizierung<br />

AuthBasicProvider file<br />

# Authentifizierung mit Passwortfile<br />

AuthUserFile /etc/httpd/passwd # Passwortfile<br />

<br />

# Eine der folgenden Bedingungen muss<br />

Require valid­user # erfüllt sein<br />

Require ip 172.16.25.15<br />

<br />

<br />

<br />

Einige Require Directiven:<br />

Require all granted<br />

Require all denied<br />

Require franz<br />

Require not fritz<br />

Require ip xxxx<br />

Require not ip xxx<br />

Alle haben Zugriff<br />

Keiner hat Zugriff<br />

franz hat zugriff<br />

fritz hat keinen Zugriff<br />

ip hat Zugriff<br />

ip hat keinen Zugriff<br />

RequireAll<br />

RequireNone<br />

RequireAny<br />

Alle Bedingungen müssen erfüllt sein<br />

Wenn eine Bedingung richtig ist, gibt es keinen Zugriff<br />

(keine Bedingung darf zutreffen um Zugriff zu haben)<br />

mindestens eine Bedingung muss zutreffen um Zugriff<br />

zu haben<br />

Die Passwortdatei wird erzeugt mit<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 21/63


htpasswd –cm /etc/httpd/htpasswd franz<br />

­c create Passwortdatei<br />

­m MD5 Verschlüsselung<br />

Passwort für den Benutzer franz hinzufügen:<br />

htpasswd –m /etc/httpd/htpasswd franz<br />

Neben der einfachen Authentifizierung, bei der die Passwörter unverschlüsselt zum Server gesendet<br />

werden, gibt es auch noch den Authentifizierungstyp htdigest, der die Passwörter verschlüsselt<br />

überträgt sowie eine auf einer Datenbank basierende Lösung.<br />

Beispiel für Authentifizierung Digest:<br />

AuthType Digest<br />

# Autentifizierungstyp ist nun verschlüsselt<br />

AuthName "test1"<br />

# AuthName ist der Realm Name beim Befehl htdigest<br />

AuthDigestFile /etc/httpd/passwd­digest # AuthUserFile<br />

require valid­user<br />

# Alle Benutzer in /etc/httpd/passwoerter/passwd dürfen<br />

Passwort hinzufügen:<br />

htdigest ­c /etc/httpd/passwd­digest test1 franz<br />

Anmerkung: Im Verzeichnis /var/www/error befinden sich standardisierte Fehlermeldungen<br />

des Webservers. Ein Beispiel ist die Datei HTTP_NOT_FOUND.html.var, die ausgegeben wird,<br />

wenn der Webserver einen Link nicht finden kann. Diese HTML Seite kann editiert werden und<br />

die Art der Fehlermitteilung an die speziellen Bedürfnisse des Webmasters angepasst werden.<br />

Dazu muss in httpd.conf in der Zeile<br />

ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var<br />

die Raute als Kommentarzeichen entfernt werden. Damit die Seite auch auf Deutsch angezeigt<br />

wird, muss in den Browsereinstellungen (Bearbeiten/Einstellungen/Allgemein/Sprachen)<br />

Deutsch als bevorzugte Sprache angegeben werden.<br />

Anmerkung: Eine Zugangsbeschränkung kann auch in einem Verzeichnis durch die Datei<br />

.htaccess stattfinden. Dazu muss in der <strong>Serverkonfiguration</strong> die Anweisung<br />

AllowOverride All<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 22/63


stehen, die es dem Webserver erst ermöglicht die Datei .htaccess mit ihren<br />

Konfigurationsanweisungen zu lesen und auszuführen.<br />

Beispiel einer .htaccess Datei in einem Verzeichnis, die eine Passwortabfrage verlangt:<br />

(Hier muss man entweder von der richtigen Adresse 172.16.25.15 kommen oder ein Passwort<br />

eingeben)<br />

AuthType Basic<br />

AuthName „Authentifizierung“<br />

AuthBasicProvider file<br />

AuthUserFile /etc/httpd/passwd<br />

<br />

Require valid­user<br />

Require ip 172.16.25.15<br />

<br />

Da der Webserver jedes Verzeichnis nach einer Datei .htaccess durchsucht leidet die<br />

Performance. Auch aus Sicherheitsgründen wird davon abgeraten diese Datei zu verwenden, da<br />

durch die Konfiguration der .htaccess Datei seitens des Webseitenerstellers die Berechtigungen<br />

verändert werden können. Diese Art der Zugangskontrolle sollte nur verwendet werden, wenn<br />

man keinen Zugang zum zentralen Konfigurationsfile httpd.conf besitzt.<br />

Durch die Anweisung<br />

AllowOverride None<br />

wird der Webserver angewiesen, die Datei .htaccess zu ignorieren.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 23/63


Verschlüsselte Webseite mit VirtualHost<br />

Um eine verschlüsselte Kommunikation zu ermöglichen, werden das Zertifikat und der<br />

Schlüssel dem virtuellen Host bekannt gegeben. In Fedora werden diese bei der Installation<br />

automatisch generiert, sie befinden sich im Verzeichnis /etc/pki/tls/certs/localhost.crt und<br />

/etc/pki/tls/private/localhost.key<br />

NameVirtualHost *:443<br />

<br />

ServerAdmin franz@graz.at<br />

DocumentRoot /home/httpd/secure<br />

ServerName secure.graz.at<br />

SSLEngine on<br />

SSLCertificateFile /etc/pki/tls/certs/localhost.crt<br />

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key<br />

ErrorLog /var/log/httpd/secure­error.log<br />

CustomLog /var/log/httpd/secure­access.log common<br />

<br />

Es ist auch möglich, eigene Keys und Zertifikate für den Webserver zu erzeugen, sogenannte<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 24/63


selbst unterschriebene Zertifikate:<br />

cd /etc/pki/tls<br />

make genkey<br />

make certreq<br />

make testcert<br />

erzeugt localhost.key<br />

erzeugt localhost.csr<br />

erzeugt localhost.crt<br />

Das Zertifikat und der Key sind dem virtuellen Host bekannt zu geben:<br />

Wenn die Seite mit https://secure.graz.at aufgerufen wird, muss die Gültigkeit des Zertifikats,<br />

bestätigt werden, denn der Browser kennt das selbst signierte Zertifikat selbstverständlich nicht<br />

an.<br />

Wenn das Passwort in den Schlüssel hineincodiert wird, braucht es beim Start des Webservers<br />

nicht mehr eingegeben werden:<br />

openssl rsa ­in localhost.key ­out localhost.key.new<br />

mv localhost.key.new localhost.key<br />

Will man automatisch von der unverschlüsselten auf die verschlüsselte Seite weitergeleitet<br />

werden, wird in der httpd.conf ein Redirect eingerichtet:<br />

<br />

Servername secure.graz.at<br />

Redirect / https://secure.graz.at:443<br />

<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 25/63


5) Software Updates<br />

5.1 RedHat Packet Manager (RPM)<br />

Zum Installieren und Administrieren von Software werden neben Tar­Archiven sogenannte<br />

RPM Pakete verwendet, die sich in den letzten Jahren als Standard in der <strong>Linux</strong>welt etabliert<br />

haben. Sie enthalten neben den zu installierenden Dateien auch Hinweise auf eventuelle<br />

Paketabhängigkeiten. RPM verwaltet eine Datenbank aller installierten Pakete, sodass ein<br />

Überblick über alle Pakete leicht möglich ist.<br />

1) Installation eines Paketes, zB: der Editor joe<br />

cd /cdrom/RedHat/RPMS<br />

rpm ­i joe­2.8­9.i386.rpm<br />

2) Welche Pakete gibt es <br />

cd /cdrom/RedHat/RPMS<br />

rpm ­qpli * > alle_pakete_auf_der_dvd<br />

3) Welche Pakete sind installiert <br />

rpm ­qa > kurzes_listing_aller_installierte_pakete<br />

rpm ­qali > langes_listing_aller_installierten_pakete<br />

4) Welche Dateien sind in einem Paket enthalten <br />

rpm ­qpl paketname<br />

5) Upgrade eines Paketes<br />

rpm ­Uvh paketname<br />

6) Deinstallation eines Paketes<br />

rpm ­e Paketname<br />

7) Welche Pakete benötigt man zur Installation des Paketes_1<br />

rpm ­qp ­­requires Paketes1<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 26/63


8) Zu welchem Paket gehört diese Datei <br />

rpm ­qf /usr/bin/joe<br />

9) Welches nichtinstallierte Paket stellt die Datei zur Verfügung<br />

Rpm ­q –whatprovides /etc/httpd/conf.d/ssl.conf<br />

Übung: Holen Sie sich den Editor jed von ftp.tugraz.at (oder ftp.tuwien.ac.at) und installieren<br />

Sie ihn.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 27/63


5.2 ) Updating mit yum<br />

Die Versionen von RedHat und Fedora können auch mit yum upgedatet werden. Der Vorteil gegenüber<br />

RPM ist das selbständige Handling von Paketabhängigkeiten. Zusätzlich wurde das<br />

Programm mit einer grafischen Benutzeroberfläche versehen. Die Pakete werden in yum in verschiedenen<br />

Repositories verwaltet, jedes Repository enthält entweder nur upgedatete Pakete<br />

oder nur die Sourcecodes der Pakete.<br />

Befehle: yum list Listet alle Pakete<br />

yum update squid<br />

Update des Paketes squid<br />

yum update<br />

komplettes Update<br />

yum check­update gibt’s Updates <br />

yum list updates<br />

listet alle Updates<br />

yum update cyrus* Geht auch !<br />

yum install paket<br />

Installiert paket<br />

yum remove paket<br />

Entfernt Paket<br />

yum list available<br />

Listet alle verfügbaren Pakete<br />

yum search <br />

Sucht Pakete nach keyword ab<br />

yum provides */ssl.conf<br />

welches Paket liefert ssl.conf<br />

yum groupinstall KDE­Desktop installiert KDE Desktop<br />

yum grouplist<br />

listet alle Gruppen auf<br />

Will man die Fragen während des Updates mit ja beantworten, kann das Paket mit<br />

installiert werden.<br />

yum ­y install paket<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 28/63


6) Firewall mit iptables<br />

Mit einer Firewall können beliebige Serverdienste für eine Gruppe von Benutzern oder Hosts<br />

gewährt oder verweigert werden. Die Befehle von iptables steuern das Verhalten der<br />

Datenpakete, die am Host ankommen. Dabei wird das Paket von der Netzwerkkarte an den<br />

Kernel weitergereicht.<br />

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_<strong>Linux</strong>_Firewalls_Using_iptables<br />

Abb: Weg eines Datenpaketes durch einen Router<br />

linke Seite: Datenpaket ist für den Router bestimmt<br />

rechte Seite: Datenpaket ist zum forward bestimmt<br />

Ausgehend von der Netzwerkkarte durchwandert ein Datenpaket eine Reihenfolge von Tabellen<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 29/63


(mangle, nat, filter), wobei in diesen Tabellen ein Reihe von Ketten (PREROUTING, INPUT,<br />

FORWARD, POSTROUTING) vorgesehen sind.<br />

Ein Paket, das geforwarded wird, muss u.a. durch folgende Tabellen und Chains (in dieser<br />

Reihenfolge):<br />

Tabelle<br />

Chain<br />

nat<br />

Prerouting<br />

filter<br />

forward<br />

nat<br />

postrouting<br />

Ein Paket, das für den localhost, also den Router mit der Firewall bestimmt ist, muss u.a.<br />

durch<br />

Tabelle<br />

nat<br />

filter<br />

Chain<br />

Prerouting<br />

input<br />

Ein Paket, das vom localhost, also vom Router mit der Firewall kommt, muss u.a. durch<br />

Tabelle<br />

nat<br />

Chain<br />

Postrouting<br />

Gefiltert werden muss in der Tabelle filter, dort in den chains FORWARD und INPUT.<br />

Löschen der Regeln:<br />

/sbin/iptables ­t filter ­F<br />

/sbin/iptables ­t mangle ­F<br />

/sbin/iptables ­t nat ­F<br />

/sbin/iptables ­X<br />

# Lösche Regeln in der Tabelle filter<br />

# Lösche Regeln in der Tabelle mangle<br />

# Lösche Regeln in der Tabelle nat<br />

# Lösche eine selbstgebaute Chain<br />

Tabelle filter ist der Defaultwert, wenn keine Tabelle angegeben wird.<br />

Beispiel 1: Der PC wird komplett vom Netz abgeschnitten:<br />

/sbin/iptables ­t filter ­A INPUT ­s 0/0 ­j DROP<br />

Beispiel 2: Der FTP Transfer vom Netz 193.190.122/24 zum Netz 193.170.134/24 wird nicht<br />

durchgelassen<br />

/sbin/iptables ­A INPUT ­p tcp ­s 193.190.122.0/24 ­d 193.170.134.0/24 ­­dport 21 ­j LOG ­­log­prefix="port<br />

not allowed: "<br />

/sbin/iptables ­A INPUT ­p tcp ­s 193.190.122.0/24 ­d 193.170.134.0/24 ­­dport 21 ­j DROP<br />

­A INPUT Append to Tabelle INPUT<br />

­p tcp die Pakete sind mit Protokoll TCP<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 30/63


­s address die Pakete kommen von dieser Quelle<br />

­d destination die Pakete gehen zu diese Adresse ...<br />

­­dport 21<br />

und sprechen dort den Port 21 (ftp) an<br />

­j LOG Paket wird mitgeloggt<br />

­­log­prefix “port not allowed” Beliebiger Text<br />

­j DROP Paket wird weggeworfen<br />

Beispiel 3: Vom Intranet (172.16.0.0/16) darf die Mail (port 110) nur vom Server<br />

193.110.120.123 geholt werden, alle anderen Mailserver sind für das Intranet gesperrt.<br />

/sbin/iptables ­A INPUT ­p tcp ­s 172.16.0.0/16 ­d 193.110.120.123 ­­dport 110 ­j ACCEPT<br />

/sbin/iptables ­A INPUT ­p tcp ­s 172.16.0.0/16 ­d 0/0 ­­dport 110 ­j DROP<br />

Beispiel 4: Zulassen von einigen ports, alle anderen werden gesperrt<br />

remote_net=”0/0”<br />

server_net=”193.180.90.0/24”<br />

# hohe ports werden zugelassen<br />

/sbin/iptables ­A INPUT ­p udp ­s $remote_net ­d $server_net ­­dport 1023:65535 ­j ACCEPT<br />

# ssh wird zugelassen<br />

/sbin/iptables ­A INPUT ­p tcp ­s $remote_net ­d $server_net ­­dport 22 ­j ACCEPT<br />

# www wird zugelassen<br />

/sbin/iptables ­A INPUT ­p tcp ­s $remote_net ­d $server_net ­­dport 80 ­j ACCEPT<br />

# dns wird zugelassen<br />

/sbin/iptables ­A INPUT ­p tcp ­s $remote_net ­d $server_net ­­dport 53 ­j ACCEPT<br />

# Sonst wird alles geloggt und gedroppt<br />

/sbin/iptables ­A INPUT ­s $remote_net ­j LOG ­­log­prefix "Drop von remote: "<br />

/sbin/iptables ­A INPUT ­s $remote_net ­j DROP<br />

Beispiel 5: Alle Pakete, die ins Internet wollen, werden auf den am Router befindlichen<br />

Webserver umgeleitet<br />

/sbin/iptables ­t nat ­A PREROUTING ­p tcp ­s 172.16.0.0/16 ­d $remote_net ­­dport 80 ­j LOG<br />

­­log­prefix "Packet redirected "<br />

$IP ­t nat ­A PREROUTING ­p tcp ­s 172.16.0.0./16 ­d $remote_net ­­dport 80 ­j REDIRECT ­­toports<br />

80<br />

Beispiel 6: NAT ... Network Address Translation: Alle Pakete vom Intranet kommend werden<br />

mit der IP Adresse des Routers (193.80.99.12) versehen<br />

$IP ­t nat ­A POSTROUTING ­s 172.16.0.0./16 ­j SNAT ­­to 193.80.99.12<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 31/63


Übungen: (Nach jedem Punkt löschen Sie bitte die erstellte Regel)<br />

1.Sperren Sie jeden Zugang zu Ihrem PC<br />

2.Sperren Sie für ihren Nachbarn den ftp Zugang und den telnet Zugang.<br />

3.Sperren Sie für alle Hosts nur das anpingen auf Ihrem PC (protocol icmp)<br />

4.Ihr Nachbar darf nun nicht auf ihre Webseiten zugreifen (port 80)<br />

5.a) Die Ports 80 (www) und 3128 (proxy) sind für alle erlaubt<br />

b) Vom Netz 172.16.25.0/24 soll jeder Kontakt abgelehnt werden<br />

c) Für das Netz 172.16.26.0/24 soll nur das Mailservice benutzt werden können (Ports 25 und<br />

110)<br />

d) Host 172.16.27.13 hat jeden Zugang zu diesem Host<br />

6. In der Dateien /etc/hosts.trusted steht eine Liste von Netzen und Hosts, denen ein Zugang<br />

über FTP, http, mail und ssh gewährt ist. In der Datei /etc/hosts.banned stehen jeweils eine<br />

Liste von Netzen und Hosts denen jeder Zugang verwehrt wird.<br />

Das Format der Dateien ist dabei folgend:<br />

/etc/ipchains.hosts.trusted<br />

180.156.23.0/24 Mitarbeiter Müller<br />

94.23.45.120/32 Außendienstmitarbeiter<br />

100.20.0.0/16 Dynamischer Pool von Provider X1<br />

/etc/hosts.banned<br />

62.46.78.0/24 Netzattacke am 23­02­2002<br />

64.19.62.23 wiederholter Portscan<br />

Erstellen Sie ein Bashscript, das diese Regeln implementiert<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 32/63


7) Mailserver sendmail<br />

1) Allgemeines:<br />

Mailexchanger für graz.at<br />

MX1<br />

Mailexchanger für wien.at<br />

MX2<br />

PC1<br />

PC2<br />

Sendet der Benutzer franz@graz.at von PC1 eine Mail nach fritz@wien.at, so wird diese an<br />

den im Mailclient angegebenen SMTP Server (der Mailexchanger für den domain graz.at)<br />

gesendet. Dieser findet über das Nameservice heraus, welcher Server der Mailexchanger für den<br />

domain wien.at ist und sendet die Mail an MX2. Der Benutzer von PC2 kann nun mit einem<br />

Mailclient, in dem er als POP Server MX2 angibt, seine Mails von diesem Server herunterladen.<br />

Sendmail ist ein MTA (Mail Transport Agent), der die Mails zum Bestimmungsort sendet, wo er<br />

sie seinerseits wiederum an einen MDA (Mail Delivery Agent) weitergibt, der im Falle des MDA<br />

procmail die Mails dann lokal in /var/spool/mail ablegt.<br />

2) Konfiguration des Nameservices, domain graz.at, statische IP eintragen<br />

Mail Exchanger (MX) für den domain graz.at ist pc15.graz.at<br />

pc15.graz.at (FQDN = Full Qualified Domain Name) in /etc/hosts eintragen:<br />

172.16.25.15 pc15.graz.at pc15<br />

Der Hostname wird in /etc/hostname auf pc15.graz.at gesetzt:<br />

pc15.graz.at<br />

3) Mailclient konfigurieren:<br />

smtp:<br />

pop:<br />

username:<br />

pc15.graz.at<br />

pc15.graz.at<br />

franz<br />

Wird jetzt gesendet, gibt es natürlich noch eine Fehlermitteilung, da sendmail noch nicht<br />

installiert und konfiguriert ist.<br />

Am Terminal kann der Mailclient mutt verwendet werden, der am Server keine<br />

Einstellungen benötigt.<br />

4) Zum Senden und Empfangen von Mails müssen folgende Programme installiert sein:<br />

sendmail<br />

Zum Versenden der Mails (smtp server)<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 33/63


dovecot<br />

Zum Abholen der Mails vom Server (pop/imap server)<br />

sendmail verwendet die Portnummer 25 (smtp), der Popserver die Portnummer 110<br />

Zur Kontrolle, ob die Ports offen sind: (d.h: die Server ansprechbar sind)<br />

telnet pc15.graz.at 25<br />

telnet pc15.graz.at 110<br />

Wird die Verbindung verweigert, sind die Programme noch nicht verwendbar. Eventuell liegt<br />

das an der Konfiguration von /etc/dovecot.conf, am sendmail oder am Nameservice.<br />

in /etc/dovecot/conf.d/10­mail.conf geben wir an, wo die Mails sich befinden:<br />

default_mail_env = mbox:~/mail/:INBOX=/var/spool/mail/%u<br />

Die Rechte des Mailordners überprüfen:<br />

chmod 600 /var/mail/*<br />

Neustart<br />

systemctl restart dovecot.service<br />

5) Mit dem Programm mail kann zum Testen eine Mail verschickt werden mit<br />

mail –s testmail franz@graz.at < datei oder<br />

echo „hallo „ | mail ­s testmail franz@graz.at<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 34/63


6) Erfolgreich versendete Mails befinden sich in /var/spool/mail/username am Server des<br />

Empfängers.<br />

6.1) Sendmail verwendet 2 Dateien, die bestimmen, wer Mails versenden bzw. empfangen<br />

darf:<br />

/etc/mail/access: Eine Liste von domains, die diesen SMPT Server verwenden dürfen.<br />

Die Zeile<br />

bulme.at<br />

RELAY<br />

erlaubt jedem Benutzer aus dem Domain bulme.at diesen Server als SMTP Server<br />

benützen.<br />

/etc/mail/local­host­names:<br />

graz.at<br />

Der eigene domain muss eingetragen werden, z.B.:<br />

6.2) Sendmail ist aus Sicherheitsgründen nicht sofort verfügbar: es muss der Eintrag<br />

in /etc/mail/sendmail.mc<br />

dnl # DAEMON OPTIONS(„Port=smtp, ADDR=127.0.0.1, Name=MTA“)<br />

auskommentiert werden und danach sendmail neu gestartet werden<br />

6.3) In die Datei /etc/aliases werden die Aliase der Emailadressen eingetragen: der<br />

Benutzer franz des Mailexchangers graz.at hat automatisch die Emailadresse<br />

franz@graz.at. Will er nun die Adresse franz.mueller@graz.at verwenden, so ist in der<br />

Datei /etc/aliases folgender Eintrag zu tätigen:<br />

franz.mueller:<br />

franz<br />

Verteilerlisten sind mit aliases leicht einzurichten:<br />

programmierer: franz@graz.at, fritz@wien.at<br />

Es können Emailadressen, die sich in einer Datei befinden, gesammelt angesprochen<br />

werden:<br />

mailingliste:<br />

:include /etc/mail/mailingliste<br />

7) Der Logfile /var/log/maillog enthält wertvolle Hinweise über Fehlkonfigurationen; bei<br />

Problemen führen die Fehlermitteilungen dieser Datei mit www.google.at zur<br />

Problemlösung.<br />

8) Will man eine Mail vom PC1 mit dem domain gruber.at zu einem anderen domain maier.at<br />

auf PC2 senden, muss PC1 in seinem nameservice den domain maier.at als slave eingetragen<br />

haben und in den domainfiles muss der eigene MX definiert sein.<br />

9 ) Verschlüsselung:<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 35/63


Wird thunderbird konfiguriert, wird der Port 993 und imaps für den IMAP­Server<br />

vorgeschlagen. Dies kann belassen werden, denn dies ist im IMAP/POP Server dovecot<br />

eingestellt: dieser beherrscht die Protokolle pop3,pop3s,imap und imaps.<br />

Beim SMTP Server sendmail muss die Verschlüsselung mit dem STARTTLS in der Datei<br />

/etc/mail/sendmail.mc eingestellt werden:<br />

define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl<br />

define(`confCACERT', `/etc/pki/tls/certs/ca­bundle.crt')dnl<br />

define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl<br />

define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl<br />

Das Zertifikat und der private Schlüssel, enthalten in der Datei sendmail.pem, müssen erst<br />

erzeugt werden:<br />

cd /etc/pki/tls/certs<br />

make sendmail.pem<br />

Sodann der SMTP Server in den Konteneinstellungen des dovecot konfiguriert werden:<br />

10) Dokus: www.sendmail.org<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 36/63


8) Proxy squid<br />

Ein Proxy (Stellvertreter) übernimmt die Anfrage eines Clients an einen Server an Stelle des<br />

Clients.<br />

Wichtige Funktionen eines Proxy sind:<br />

1) Er dient als Cache zwischen dem lokalen Netz und dem Internet<br />

2) Er kontrolliert das Surfverhalten der Benutzer<br />

3) Die Downloadgeschwindigkeit kann gleichmäßig verteilt werden<br />

4) Zugriff auf das Intranet von außen wird ermöglicht<br />

Ein oft verwendeter Proxy in <strong>Linux</strong> ist das Open Source Softwarepaket squid. Gestartet wird<br />

squid mit<br />

/etc/init.d/squid start<br />

Nach einer Änderung der Konfigurationsdatei wird nur mehr diese neu geladen:<br />

/etc/init.d/squid reload<br />

Die Konfigurationsdatei ist /etc/squid/squid.conf. Die Default­Einstellungen verbieten jeden<br />

Zugriff auf den proxy. Für einen funktionsfähigen squid ist es ausreichend, einen Hostnamen zu<br />

anzugeben, einen nameserver und eine eigene Access control list (acl) wie in Beispiel 1a) zu<br />

definieren:<br />

dns_nameservers 172.16.25.15<br />

visible_hostname cerberus.graz.at<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 37/63


Ausführliche Fehlermeldungen werden in /var/log/squid/cache.log geschrieben, die Zugriffe<br />

werden in /var/log/squid/access.log mitgeschrieben.<br />

Beispiel 1: Access Control Lists (acl)<br />

Access Control Listen bieten eine Vielzahl von Möglichkeiten den Datenfluss zwischen Internet<br />

und Intranet zu beeinflussen, hier einige Beispiele:<br />

Es dürfen nur bestimmte IP Adressen den Proxy verwenden<br />

Es dürfen Seiten oder IP Adressen nicht angesurft werden<br />

Es muss eine Identifizierung stattfinden<br />

Bestimmte Dateien dürfen nicht downgeloaded werden<br />

a) Definiere einige Netze, die den Proxy verwenden dürfen<br />

acl mynets src 192.168.0.0/24 172.16.25.0/24<br />

http_access allow mynets<br />

b) Diese Adressen dürfen den Proxy nicht verwenden<br />

acl liste1 src 172.16.25.1­172.16.25.4<br />

http_access deny liste1<br />

c) Diese Zieladresse ist nicht erlaubt<br />

acl liste2 dst 172.16.25.7/255.255.255.255<br />

http_access deny liste2<br />

d) Liste der verbotenen Begriffe<br />

acl liste3 url_regex "/etc/squid/verb_begriffe.txt"<br />

http_access deny liste3<br />

e) MP3 Dateien dürfen nicht runtergeladen werden<br />

acl mp3 urlpath_regex \.mp3$<br />

http_access deny mp3<br />

f) Authentifizierung<br />

# Die Passwortdatei /etc/squid/passwd wird von /etc/shadow genommen<br />

# Das Authentifizierungsprogramm heißt ncsa_auth<br />

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd<br />

auth_param basic realm Passworteingabe web server www.graz.at<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 38/63


# Alle Benutzer müssen ein Passwort verwenden<br />

acl password proxy_auth REQUIRED<br />

http_access allow all password<br />

Werden mehrere ACL’s verwendet, so ist darauf zu achten, dass die Listen sequentiell<br />

abgearbeitet werden und die erste Übereinstimmung gilt. (First match)<br />

Daher sollte als letzte Regel der ACL's immer jeder Zugriff verweigert werden,<br />

http_access deny all<br />

Beispiel 2) Alle Benutzer müssen ein Passwort eingeben, Begriffe aus der Liste der<br />

verbotenen Begriffe sind gesperrt.<br />

# die acl password verlangt ein Passwort vom Benutzer<br />

acl password proxy_auth REQUIRED<br />

# Erlaubte Begriffe sind mit Passwort zu erreichen: es muss die acl liste0 und die acl password<br />

erfüllt werden<br />

acl liste0 url_regex "/etc/squid/erlaubte_begriffe.txt"<br />

http_access allow liste0 password<br />

# Liste der verbotenen Begriffe<br />

# Verbotene Begriffe sind auch mit Passwort unerreichbar<br />

acl liste1 url_regex "/etc/squid/verb_begriffe.txt"<br />

http_access deny liste1<br />

# Alle müssen ein Passwort eingeben<br />

http_access allow all password<br />

Beispiel 3 : delay pools für Hosts<br />

# PC 46 myacl1 delay pool 1 class 1 64000 Bytes bucket, dann 6000 Bytes/sec<br />

# PC 46 hat ein Guthaben von 64000 Bytes, anschließend hat er mit eine<br />

# downloadrate von 6000 Bytes/sec<br />

#<br />

# PC 45 myacl2 delaypool 2 class 1 64000 Bytes bucket, dann 64000 Bytes/sec<br />

# PC 45 kann immer mit 64000 Bytes/sec downloaden<br />

#<br />

acl myacl1 src 172.16.23.46<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 39/63


acl myacl2 src 172.16.23.45<br />

delay_pools 2<br />

delay_class 1 1<br />

delay_class 2 1<br />

delay_access 1 allow myacl1<br />

delay_access 2 allow myacl2<br />

delay_parameters 1 6000/64000<br />

delay_parameters 2 64000/64000<br />

Beispiel 4: Delay pools für Netze<br />

: delay_class2, bezieht sich auf Netze und Hosts<br />

Gesamt 320000 Bytes fuers gesamte Netz<br />

# 64000 Bytes als Bucket fuer jeden Host<br />

# 6000 Bytes wenn die 64000 Bytes aufgebraucht sind<br />

#<br />

acl myacl src 172.16.23.45/255.255.255.0<br />

acl all src 0.0.0.0/0.0.0.0<br />

delay_pools 1<br />

delay_class 1 2<br />

delay_access 1 allow myacl<br />

delay_access 1 deny all<br />

delay_parameters 1 320000/300000 6000/64000<br />

# Erklärung der delay_parameter:<br />

#1 delay_pool Nummer<br />

#320000/300000 320000 Bytes/sec downloadrate, 300000 Bytes Guthaben<br />

#6000/64000 6000 Bytes/sec downloadrate, 64000 Bytes Guthaben<br />

Übungen:<br />

1) Port auf 3333 ändern und im Webbrowser ausprobieren<br />

2) www.bulme.at nicht in den Cache geben<br />

3) Zugriffsbeschränkung mit acls:<br />

Zugriff auf www.bulme.at von überall her erlaubt<br />

Zugriff auf schueler.bulme.at ist nur von einem Netz erlaubt<br />

Zugriff auf info­ti.bulme­intern.ac.at ist nur einem Netz nicht erlaubt<br />

Zugriff auf info­ncc.bulme­intern.ac.at ist nur mit Authentifizierung erlaubt<br />

Zugriff ins Internet ist nur mit delay pools erlaubt<br />

4) Anpassen der Fehlermitteilungen in /usr/share/squid/errors/English/<br />

Dokus:<br />

squid.nlanr.net<br />

/usr/share/doc/squid*/FAQ<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 40/63


9) Nameserver, Webserver, Mailserver und Proxy<br />

PC Zone Adresse<br />

1 wien.at 172.16.80.1/27<br />

2 prag.at 172.16.80.2/27<br />

3 oslo.at 172.16.80.33/27<br />

4 paris.at 172.16.80.34/27<br />

5 luanda.at 172.16.80.65/27<br />

6 maputo.at 172.16.80.66/27<br />

7 lima.at 172.16.80.97/27<br />

8 quito.at 172.16.80.98/27<br />

9 tokio.at 172.16.80.99/27<br />

10 sinabelkirchen.at 172.16.80.129/27<br />

11 stinaz.at 172.16.80.130/27<br />

12 gangtok.at 172.16.80.161/27<br />

13 dehli.at 172.16.80.162/27<br />

14 harare.at 172.16.80.193/27<br />

15 kapstadt.at 172.16.80.194/27<br />

16 trofaiach.at 172.16.80.225/27<br />

17 warschau.at 172.16.80.226/27<br />

18 peking.at 172.16.80.227/27<br />

Konfigurieren Sie das Nameservice für Ihre Zone, in der die Hosts www.stadt.at,<br />

nachname.stadt.at, ftp.stadt.at, mail.stadt.at und proxy.stadt.at erreichbar sein sollen.<br />

Der Webserver soll folgend konfiguriert werden<br />

a) Der Startfile für www.stadt.at soll in /home/httpd/stadt/www liegen und soll nur für Sie ohne<br />

Passwortabfrage erreichbar sein, alle anderen müssen ein Passwort vergeben<br />

b) Die Webseite nachname.stadt.at soll für alle erreichbar sein<br />

Der Mailserver soll mail.stadt.at heißen<br />

a) Die Benutzer peter und petra sollen die Mailadressen peter.huber@stadt.at und<br />

petra.maier@stadt.at erhalten<br />

b) Wie können Sie dem peter ihres Nachbarn eine Mail schicken <br />

c) Wie können Sie petra's Mails vom Nachbarserver abholen <br />

d) Ermöglichen Sie Ihrem Nachbar, der im gleichen Netz ist wie sie, dass er seine Mails<br />

über Ihren Mailserver versenden darf.<br />

Stellen Sie den Proxy folgend ein:<br />

a) Authentifizierung ist notwendig für Ihren Nachbar, Sie selbst dürfen ohne Passwort surfen<br />

b) Erstellen Sie je eine Liste von verbotenen Destinationen und verbotenen Begriffen<br />

c) Dateien mit gewissen Endungen (.mp3, wav usw.) dürfen nicht heruntergeladen werden<br />

d) Erstellen Sie ein Delaypool mit einer maximale Downloadgeschwindigkeit von 10 KB/s<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 41/63


10) Dual Boot mit Windows und <strong>Linux</strong> (ohne grub2/Fedora17)<br />

Bei der Installation von Windows wird ohne Rückfrage der Windows Bootloader auf den MBR<br />

(Master Boot Record) der Festplatte geschrieben. Wird nun <strong>Linux</strong> zusätzlich installiert, besteht<br />

die Möglichkeit, den Bootloader von Windows zu belassen oder den <strong>Linux</strong> Bootloader zu installieren.<br />

Hier wird die 2. Möglichkeit beschrieben, den <strong>Linux</strong> Bootloader zu installieren, damit beide<br />

Systeme gebootet werden können. Windows befindet sich also bereits auf Partition 1 und <strong>Linux</strong><br />

wird nun auf Partition 2 der Festplatte installiert.<br />

Die Datei /boot/grub/grub.conf ist die Konfigurationsdatei des <strong>Linux</strong> Bootloaders grub (Grand<br />

Unified Bootloader) und sieht bei einer Installation von <strong>Linux</strong> auf Partition 2 folgend aus:<br />

# ­­­­­­­­­­­­­­­­­­­­­­ Datei grub.conf ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­default=0<br />

timeout=10<br />

splashimage=(hd0,1)/boot/grub/splash.xpm.gz<br />

hiddenmenu<br />

title Fedora Partition 2<br />

kernel /boot/vmlinuz­2.6.15­1.2054_FC5 ro root=/dev/hda2 rhgb quiet<br />

initrd /boot/initrd­2.6.15­1.2054_FC5.img<br />

#­­­­­­­­­­­­­­­­­­­­­­­ Ende grub.conf ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

Anmerkungen:<br />

default=0<br />

Als default wird das erste System gebootet<br />

splashimage=(hd0,1)/boot/grub/splash.xpm.gz<br />

Das Bild des Bootloaders, (hd0,1) bezeichnet die 2. Partition auf Harddisk 1,<br />

es wird bei Null zu zählen begonnen<br />

timeout=10<br />

10 Sekunden wird gewartet bis gebootet wird<br />

hiddenmenu<br />

Das Bootmenu wird zuerst versteckt, durch Tastatureingabe erscheint es, diese Anweisung sollte<br />

besser auskommentiert werden<br />

title Fedora Partition 2<br />

Dieser Titel erscheint beim Bootmenu<br />

kernel ....<br />

Der Kernel befindet sich in /boot/vmlinuz­2.6.15­1.2054_FC5 und zwar auf Partition 2<br />

(root=/dev/hda2)<br />

Hat man nun Windows auf Partition 1 installiert, (Windows soll immer auf einer primären<br />

Partition installiert werden), so muss die Bootloaderdatei grub.conf um folgende Zeilen ergänzt<br />

werden:<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Ergänzung von grub.conf ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 42/63


title Windows Partition 1<br />

rootnoverify (hd0,0)<br />

chainloader +1<br />

Es ist kein weiterer Befehl mehr notwendig, beim nächsten Bootvorgang erscheint das Bootmenu.<br />

Anmerkung: Wenn weder der Windows noch der <strong>Linux</strong> Bootloader funktionieren, helfen folgende<br />

Kochbuchregeln. Wir nehmen an, dass <strong>Linux</strong> auf der Partition 1 installiert ist, aber nicht<br />

mehr bootbar ist:<br />

Mit der Fedora CD hochfahren und beim Bootprompt eingeben:<br />

linux rescue<br />

Nach den Einstellungen der Sprache, Tastatur und Netzkarte wird ein Fedorasystem unter<br />

/dev/hda1 gefunden, das auch unter /mnt/sysimage gemountet werden soll.<br />

Dann:<br />

chroot /mnt/sysimage<br />

grub­install /dev/hda<br />

cd /boot/grub<br />

Datei grub.conf mit Editor erstellen, die Kernelnummern von<br />

vmlinuz sind in /boot ersichtlich<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 43/63


11) Kernelkompilierung<br />

/* You are not expected to understand this */<br />

[UNIX V6 kernel source code]<br />

Der Kernel ist der innerste Teil des Betriebssystems mit seinen grundlegenden Funktionen wie<br />

Speicherverwaltung, Prozessverwaltung, I/O Verwaltung sowie der Steuerung der Hardware.<br />

Der Kernel ist in der Programmiersprache C geschrieben und muss bei einer Neukonfiguration<br />

neu kompiliert werden. Jede Distribution liefert einen vorkompilierten Kernel mit, dessen<br />

Vorteil klar auf der Hand liegt: man braucht sich um eine Kernelkompilation nicht mehr zu<br />

kümmern. Will man jedoch einen Kernel besitzen, der speziell auf die Hard­ und<br />

Softwarebedürfnisse des eigenen Servers zugeschnitten ist oder Features installieren will, die<br />

im vorkompilierten Kernel nicht enthalten sind, kommt man um eine Neukompilierung des<br />

Kernel nicht herum.<br />

Es gibt stabile Kernelversionen, die als ausgereift gelten und von der <strong>Linux</strong>gemeinde<br />

ausreichend getestet wurden; sie haben gerade Endnummern (2.2, 2.4, 2.6), während hingegen<br />

die ungeraden Nummern (2.3, 2.5, 2.7) als Entwicklerkernel gelten, denen man sich nur als<br />

<strong>Linux</strong>freak widmen sollte.<br />

Module sind Kernelkomponenten, die wahlweise fix in den Kernel integriert werden können,<br />

oder zu einem späteren Zeitpunkt, wenn sie benötigt werden, eingebunden, also geladen werden<br />

können. Ein Beispiel eines Moduls ist etwa der Treiber einer Netzwerkkarte. Wird nur diejenige<br />

Netzwerkkarte in den Kernel integriert, die sich gerade im PC befindet, muss bei einem<br />

Netzkartenwechsel der Kernel neu kompiliert werden. Deshalb werden die Treiber der gängigen<br />

Netzkartenhersteller als ladbare Module kompiliert, um eine Neukompilation des Kernels zu<br />

vermeiden.<br />

Module können mit den Befehlen<br />

lsmod, insmod, rmmod, modprobe<br />

verwaltet werden; sie werden aber bei Verwendung automatisch geladen.<br />

Eine Neuerstellung des Kernels erfordert bei Fedora 6 etwa 2GB an Speicherplatz.<br />

Zuerst werden einige Pakete installiert:<br />

yum install rpm­build<br />

Rpm­build Paket enthält einige Skripte und Programme zum Erstellen von RPM­Paketen unter<br />

Verwendung des Red Hat Package Managers. (Der Baum /usr/src/redhat wird u.a. erstellt)<br />

yum install yum­utils<br />

yum­utils enthält u.a. den yumdownloader<br />

yum install rpmdevtools<br />

Damit kann der Kernel an einem beliebigen Ort zusammengebaut werden<br />

Nun wird im Homeverzeichnis des Benutzers der für die Kompilation benötigte<br />

Verzeichnisbaum erzeugt ...<br />

rpmdev­setuptree<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 44/63


...und die Patches der Kernelsourcen dort installiert:<br />

rpm ­ivh kernel­2.6.18­1.2798.fc6.src.rpm<br />

cd ~/rpmbuild/SPECS<br />

rpmbuild ­bp –target $(uname ­m) kernel­2.6spec<br />

Wir gehen nun zum Sourcebaum des Kernels und kopieren eine vorgefertigte<br />

Konfigurationsdatei für den Kernel ins richtige Verzeichnis:<br />

cd ~/rpmbuild/BUILD/kernel­version/linux­version/<br />

cp configs/kernel­2.6.18­i686.config .config<br />

liefert<br />

uname ­r<br />

kernel­2.6.18­1.2798.fc6<br />

Nun wird noch der Makefile editiert um den Namen des neuen Kernels zu erstellen. Statt<br />

EXTRAVERSION = ­prep<br />

schreiben wir<br />

EXTRAVERSION = ­1.2798.fc6<br />

um einen korrekten Namen für den neu kompilierten Kernel zu haben. Alternativ kann auch<br />

EXTRAVERSION = ­mykernel<br />

geschrieben werden<br />

Hier wird die neue Kernelkonfigurationsdatei mit den alten Konfigurationseinstellungen<br />

erzeugt<br />

make oldconfig<br />

Installation der Kernel­development Dateien, die zur Kompilation der Module benötigt werden:<br />

rpm ­ivh kernel­devel­2.6.18­1.2798.fc6.i686.rpm oder<br />

yum install kernel­devel<br />

Auch der GNU C­Compiler darf nicht fehlen:<br />

yum install gcc<br />

yum install ncurses­devel<br />

ist für “make menuconfig” notwendig<br />

yum install qt­devel<br />

yum install gcc­c++<br />

sind für den Befehl “make xconfig” notwendig<br />

Unter Umständen sind auch einige benötigte Pakete wie make usw. nicht installiert. Diese<br />

müssen entweder mit dem RedHat Packet Manager oder mit yum nachinstalliert werden. Hier<br />

wird davon ausgegangen, dass alle benötigten Pakete bereits installiert sind.<br />

Wir gehen in das Verzeichnis, in dem sich der Makefile befindet:<br />

cd ~/rpmbuild/BUILD/kernel­version/linux­version/<br />

Die Datei .config wird nun gesichert. Sie enthält alle Einstellungen des Kernels, die bei der<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 45/63


Konfiguration des Kernels geladen werden kann, alternativ kann auch eine andere Datei<br />

geladen werden.<br />

cp .config .config­jjjmmdd<br />

sichere eventuell vorhandene alte Konfigdatei<br />

Die Auswahl der Kernelkomponenten erfolgt mit:<br />

make config<br />

make menuconfig<br />

make xconfig<br />

(altbacken) oder<br />

(besser) ncurses­devel installieren ! ­ oder<br />

Geht nur mit qt, qt­devel und gcc­c++ Paketen<br />

make clean<br />

Löschen der Objectfiles<br />

make mrproper Lösche alle generierten Files (auch .config !)<br />

make<br />

Kernel und Module werden kompiliert<br />

Zielort<br />

make modules_install<br />

make install<br />

Die Module werden auf ihren<br />

verschoben (/lib/modules/KERNEL_VERSION)<br />

Der Kernel wird installiert<br />

Mit dem letzten Befehl wird der Kernel mit einigen anderen Dateien in das Verzeichnis /boot<br />

kopiert und der Bootloader /boot/grub/grub.conf so verändert, dass der neue Kernel das nächste<br />

Mal gebootet wird.<br />

Doku:<br />

http://fedora.redhat.com/docs/release­notes/fc6/en_US/sn­Kernel.html<br />

www.kernel.org<br />

www.howtoforge.com<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 46/63


12) Der Bootvorgang<br />

Das Hochfahren des Rechners lässt sich in 2 Teile gliedern:<br />

1) Laden des Kernels<br />

2) Ausführen des Programmes /sbin/init<br />

zu 1) Laden des Kernels<br />

Für den ersten Teil ist der grub Bootloader zuständig. Die prinzipielle Vorgangsweise eines<br />

Bootloaders: Beim Hochfahren des Rechners wird nach dem Selbsttest ein kleines Programm<br />

ausgeführt, das sich im Bootsektor der Festplatte (MBR ... Master Boot Record) befindet. Dieses<br />

maximal 512 Byte große Programm hat nur die Aufgabe, ein größeres Programm, das Boot­<br />

Hauptprogramm zu laden. Danach hat der Benutzer die Möglichkeit, verschiedene Kernel oder<br />

Betriebssysteme auszuwählen. Wenn die Kerneldatei, vmlinuz, gestartet wird, erscheint am<br />

Bildschirm die Zeile<br />

Loading linux ......<br />

Zu 2) Ausführen des Programms /sbin/init<br />

Der Kernel startet als erstes Programm /sbin/init, wobei dem Bootloader einige Parameter, die<br />

der Benutzer angeben kann, mitgegeben werden können. (So kann durch die Eingabe linux<br />

single <strong>Linux</strong> im Single­User­Mode gestartet werden, was besonders nützlich ist, wenn man das<br />

root Passwort vergessen hat)<br />

In <strong>Linux</strong> gibt es verschiedene Runlevel:<br />

Level 0<br />

Level 1<br />

Level 3<br />

Level 5<br />

Rechner wird niedergefahren<br />

<strong>Linux</strong> im Single­User­Mode<br />

Multiuser Mode mit Netz<br />

Inklusive Grafik<br />

Mit dem Befehl /sbin/init 3 kann zum Runlevel 3 gewechselt werden<br />

Der Prozess init wird durch die Datei /etc/inittab gesteuert, die wesentlichen Befehle sind:<br />

a)Setzen des Default Runlevels<br />

id:5:initdefault:<br />

Das Default Runlevel ist also Level 5<br />

b) Systeminitialisierung<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 47/63


si::sysinit:/etc/rc.d/rc.sysinit<br />

Mit diesem Befehl wird das System initialisiert:<br />

Der Hostname wird gesetzt, swap Partition eingebunden, Root Partition wird<br />

überprüft, alle anderen Partitionen gemountet, depmod wird ausgeführt, usw.<br />

c) Starten des jeweiligen Runlevels<br />

l0:0:wait:/etc/rc.d/rc 0<br />

l1:1:wait:/etc/rc.d/rc 1<br />

l2:2:wait:/etc/rc.d/rc 2<br />

l3:3:wait:/etc/rc.d/rc 3<br />

l4:4:wait:/etc/rc.d/rc 4<br />

l5:5:wait:/etc/rc.d/rc 5<br />

l6:6:wait:/etc/rc.d/rc 6<br />

Wird nun das Level 5 gestartet, so werden alle Programme, die sich in /etc/rc.d/rc5.d/ befinden,<br />

ausgeführt: Zuerst werden alle Programme die mit K beginnen zum Beenden eventuell laufender<br />

Prozesse ausgeführt, sodann werden alle Programme die mit S beginnen zum Starten der<br />

neuen Programme ausgeführt.<br />

Im Verzeichnis /etc/rc.d/rc5.d/ befinden sich nur Links auf das Verzeichnis /etc/rc.d/init.d/, in<br />

dem sich die tatsächlichen Programme befinden.<br />

Im Verzeichnis /etc/rc.d/rc5.d/ kann ein neuer Link kann mit<br />

ln ­s ../init.d/ipchains S85iptables<br />

gesetzt werden; mit diesem Befehl wird beim Wechsel in diesen Runlevel das<br />

Firewallprogramm ipchains gestartet.<br />

Dieser Link wird durch den folgenden Befehl gesetzt:<br />

chkconfig –level 135 iptables on/off<br />

Zum Abschluss wird noch das Programm<br />

/etc/rc.d/rc.local<br />

ausgeführt: hier können zusätzliche Skripts gestartet werden und Veränderungen durchgeführt<br />

werden.<br />

Anmerkungen und Übungen:<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 48/63


Das Programm pstree widerspiegelt die zentrale Rolle des Prozess /sbin/init<br />

Erweitern Sie die Variable PATH indem Sie das Verzeichnis /home/franz/bin hinzufügen.<br />

Was machen Sie, wenn Sie beim Starten keine grafische Benutzeroberfäche wollen <br />

Starten Sie beim Hochfahren im Runlevel 3 den Nameserver, Webserver und den Proxy.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 49/63


13) Automatisierung von Aufgaben mit cron<br />

Mit dem Befehl crontab kann jeder Benutzer gewisse Aufgaben zu einem späteren Zeitpunkt<br />

ausführen lassen. Dies eignet sich besonders für backups oder Internettransfers, die in der Nacht<br />

durchgeführt werden können.<br />

Jeder User hat einen eigenen crontab, der sich in /var/spool/cron/user befindet<br />

1) export VISUAL=joe (Um den joe Editor zu verwenden)<br />

2) crontab -e Editiere den File /var/spool/cron/user<br />

Eingabe:<br />

00 * * * * rm /home/harald/test/a*<br />

Der Befehl wird durchgeführt wenn Minuten auf 00 zeigen, also jede Stunde.<br />

Syntax:<br />

Minute Stunden Monatstag Wochentag Monat Befehl<br />

* */2 * * * /usr/local/backup<br />

Diese Batchdatei wird alle 2 Stunden ausgeführt<br />

3) crontab -l listet die Eintraege auf<br />

Nach einer Änderung der Einträge ist das Programm crond neu zu starten:<br />

/etc/init.d/crond restart<br />

------------------------------------------------------------------------------------------------------------<br />

Diese Aufgaben können auch unabhängig von einem bestimmten Benutzer durchgeführt werden: Der<br />

Prozess crond wird gesteuert von der Datei /etc/crontab, die folgende Dateien aufruft:<br />

/etc/cron.hourly<br />

/etc/cron.daily<br />

/etc/cron.weekly<br />

/etc/cron.monthly<br />

/etc/cron.d<br />

Diese Verzeichnisse enthalten Dateien, die von cron aufgerufen werden; die Files in cron.hourly eben<br />

stuendlich, die Files im cron.d zu der Zeit wie in den Files angegeben.<br />

Beispiel fuer /etc/cron.d/save-system<br />

# Am 15 jeden Monats wird vom Benutzer root um 4.00 Uhr ein Backup durchgeführt<br />

00 04 15 * * root /etc/backup<br />

Das Skript /etc/backup soll die Rechte 644 besitzen.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 50/63


Beispiel 1: Erstellen Sie mit Hilfe des Befehl ncftpput eine Sicherung des Verzeichnisses /etc auf dem<br />

PC Ihres Nachbarn.<br />

Mit einem tar-Befehl können Sie eine gesamte Systemsicherung durchführen:<br />

tar c /etc | ncftpput –c –u user –p passwort 172.16.25.10 system.tar<br />

Syntax von ncftpput:<br />

ncftpput –u user –ppasswort remote_host remote_dir local_file<br />

ncftpput –u franz –pfranz 172.16.25.6 / /etc/passwd<br />

Beispiel 2: Eine monatliche Systemsicherung auf eine andere Festplatte, zB: /dev/hdb1<br />

mount –t ext3 /dev/hdb1 /sicherung<br />

cd /sicherung && (cd / && tar cplf - .) | tar xpvf - 1> backup.log 2> backup.log.fehler<br />

umount /sicherung<br />

Anwendung von cron: Rotation der Logdateien<br />

Ein Beispiel für cronjobs besteht in der Verwaltung der Logdateien, die bei stark frequentierten<br />

Servern sehr groß werden können.<br />

Im Verzeichnis /etc/cron.daily gibts den File logrotate, der die Zeile<br />

/usr/sbin/logrotate /etc/logrotate.conf<br />

enthält, womit sichergestellt ist, dass das Programm logrotate jeden Tag aufgerufen wird.<br />

Das Programm logrotate wird durch /etc/logrotate.conf gesteuert, das standardmaessig einen Verweis<br />

auf das Verzeichnis /etc/logrotate.d/ enthaelt, in dem fast alle Logfiles rotiert werden.<br />

Zum Testen ist es wichtig zu wissen, dass der Aufruf<br />

/usr/sbin/logrotate -f /etc/logrotate.conf<br />

funktioniert (-f steht fuer force), jedoch der Aufruf<br />

/usr/sbin/logrotate -f -dv /etc/logrotate.conf<br />

nicht funktioniert (-dv steht fuer debug und verbose) !!<br />

Um nun die Logfiles in einer uebersichtlichen Art und Weise rotieren zu lassen, ist die Option<br />

notifempty<br />

wichtig, die zumindest die leeren Files nicht rotiert: ist bei /var/log/httpd/* wichtig, da dort viele leere<br />

Files sind.<br />

Die Files im Verzeichnis /var/log/squid/ werden im File /etc/logrotate.d/squid besser direkt<br />

angegeben:<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 51/63


var/log/squid/access.log {<br />

ifempty<br />

mail harald<br />

}<br />

/var/log/squid/cache.log {<br />

ifempty<br />

mail harald<br />

}<br />

/var/log/squid/store.log {<br />

ifempty<br />

mail harald<br />

}<br />

Man kann auch mit<br />

/usr/sbin/squid -k rotate<br />

die squidfiles rotieren lassen.<br />

Files : /var/lib/logrotate.status<br />

/etc/cron.d/*<br />

/etc/cron.daily/*<br />

/etc/cron.hourly/*<br />

/etc/cron.weekly/*<br />

/etc/cron.monthly/*<br />

/etc/logrotate.conf<br />

/etc/logrotate.d/*<br />

/var/spool/cron/user<br />

/usr/sbin/logrotate /etc/logrotate.conf<br />

/usr/sbin/squid -k rotate<br />

Aufruf von logrotate<br />

Rotiere squid files<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 52/63


14) Übungen zur Bash mit sort, cut und uniq (ohne Programmierteil)<br />

1) Holen Sie sich die Datei /home/franz/testfile.txt vom <strong>Lehrer</strong> PC<br />

2)Sortieren Sie diese Datei nach dem Geburtsdatum und geben Sie die Ausgabe auf test1.out<br />

aus<br />

3)Sortieren Sie diese Datei nach dem Geburtsdatum und geben Sie etwaige Fehlermeldungen<br />

auf test1.fehler aus<br />

4) Datei testfile.txt: Welche Schueler der 4ANH haben das Geburtsdatum 8001<br />

5) Datei testfile.txt: Wie erstellen Sie eine nach Nachnamen sortierte Liste der 4AEH <br />

6) Erstellen Sie ein alias "myip", das die IP Nummer ihres PC folgend ausgibt:<br />

Meine Ipnummer lautet: 172.16.23.209<br />

7) Datei /etc/passwd: Stellen Sie fest, wieviele Benutzer am System angelegt sind<br />

8: Datei /etc/passwd: Wieviele der angelegten Benutzer haben ein Homeverzeichnis in /home<br />

9) Datei /etc/passwd: Wieviele Benutzer haben eine Shell bash <br />

10) Erweitern Sie die Variable PATH, sodass auch Programme im Verzeichnis /home/franz/test1<br />

ausgeführt werden können, ohne den Pfad anzugeben.<br />

11) Existiert die Datei /etc/shadow geben Sie aus:<br />

Shadowpasswoerter eingerichtet<br />

andernfalls geben Sie aus:<br />

Bitte Shadowpasswoerter mit „pwconv“ einrichten<br />

12) Holen Sie sich vom <strong>Lehrer</strong>PC /home/franz die Datei messages.log<br />

Wieviele Zeilen hat dieser File <br />

13) Listen Sie die letzten 10 Zeilen dieses Files am Bildschirm und leiten Sie die Ausgabe auf<br />

eine Datei um.<br />

14) Wieviele failed <strong>Login</strong>s gibt es <br />

15) Das Programm /sbin/fsck.ext3 (oder ext2) überprüft eine Partition auf Datenintegrität;<br />

verwenden sie es bei einer nicht gemounteten Partition die dieses Dateisystem besitzt. Dieses<br />

Programm muss beim Hochfahren manchmal ausgeführt werden, wenn eine Dateifehler<br />

entdeckt wurde.<br />

16) Erstellen Sie ein Filessystem auf einer leeren (!) Partition mit dem Befehl /sbin/mkfs.ext3 ­<br />

Passen Sie bitte auf !<br />

17) Mounten Sie eine andere Partition<br />

18) Lassen Sie sich den freien Speicherplatz auf den gemounteten Partitionen anzeigen<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 53/63


19) Als root: Melden Sie sich als Benutzer franz an und wieder ab.<br />

20) Erstellen Sie ein alias namens mycp, das Ihre Diskette formatiertiert, mountet und alle<br />

Dateien, die mit a bis k beginnen und mit conf enden, auf die Diskette kopiert.<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 54/63


15) Weitere Übungen zur Bash (mit Programmierteil)<br />

Beispiel 1: Man kopiere die ersten 10 Dateien des Verzeichnisses /usr/sbin auf das Verzeichnis<br />

/tmp.<br />

Beispiel 2: Beispiel 1 wird nun ausgebaut: das Verzeichnis, die Anzahl der Dateien, aber auch<br />

die genaue Dateiangabe (Etwa *.doc) sollen nun als Parameter variabel gehalten werden<br />

können.<br />

Beispiel 3 Stellen Sie fest, wieviele Benutzer am System angelegt sind<br />

Beispiel 4: Wieviele der angelegten Benutzer haben ein Homeverzeichnis in /home<br />

Beispiel 5: Setzen Sie die Zugriffsrechte des Verzeichnisses der homepage aller Benutzer auf<br />

750.<br />

Beispiel 6: Wird ein Schüler am Schülerserver angelegt, so wird auch automatisch eine Default –<br />

Homepage /home/username/public_html/index.shtml generiert, die 443 Bytes groß ist. Um nun<br />

im Laufe des Jahres festzustellen, ob ein Schüler eine eigene Homepage erstellt hat, schaut man<br />

auf diese Datei und überprüft ob sie noch immer 443 Bytes groß ist. Schreiben Sie ein Script, das<br />

eine Liste derjenigen Schüler ausgibt, die bereits eine Homepage erstellt haben.<br />

Beispiel 7: Erstellen Sie eine Liste aller Dateien von /var/log, die groesser als 100 KB sind. Verwenden<br />

Sie dazu uebungshalber die Befehle ls und cut<br />

Beispiel 8: Geben Sie folgenden Text aus:<br />

Zur Zeit sind 147234 Bytes von 255404 Bytes im RAM belegt<br />

12456 Bytes des Swap Bereiches sind belegt<br />

Beispiel 9: Erstellen Sie eine Liste aller Benutzer, deren uid ueber 500 liegt; verwenden Sie<br />

dazu die Datei /etc/passwd<br />

Ausgabe: fritz Fritz Maier<br />

franz<br />

Franz Mueller<br />

peter<br />

Peter Huber<br />

Beispiel 10: Vereinen Sie die letzten 3 Beispiele in eine Batchdatei und fuegen Sie dem Aufruf<br />

dieser Batchdatei einen Parameter an, der angibt, welcher der 3 Punkte durchgefuehrt<br />

werden soll.<br />

Beispiel 11: Erstellen Sie eine Batchdatei, die nach dem Befehl dsum die Anzahl der Dateien<br />

und die Gesamtgroesse der Dateien im Arbeitsverzeichnis angibt:<br />

Beispiel: Eingabe: dsum<br />

Ausgabe:<br />

34 Dateien, 234222 Bytes<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 55/63


Beispiel 12: Schreiben Sie ein Script, das in einem als Parameter übergebenen Verzeichnis feststellt,<br />

wie viele Dateien und wie viele Verzeichnisse sich dort befinden:<br />

Eingabe: listfiles /home<br />

Ausgabe:<br />

Verzeichnis /home: 12 Verzeichnisse, 23 Dateien<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 56/63


Lösungen zu den Bash Übungen<br />

#! /bin/bash<br />

echo" ­­­­­­­­­­­­­­­­­ Uebung 14­6 IPNR ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­"<br />

echo ­n ""Meine IP: "" ; /sbin/ifconfig eth0 | grep inet | cut ­c24­37<br />

alias ipnr="echo ­n ""Meine IP: "" ; /sbin/ifconfig eth0 | grep inet | cut ­c24­37"<br />

echo "­­­­­­­­­­­­­­ Uebung 14­7a Shadow Datei Version 1 ­­­­­­­­­­­­­­­­­­­­­"<br />

[ ­e /etc/shadow ] && echo " Shadowdatei eingerichtet"<br />

[ ­e /etc/shadow ] || echo " Shadowdatei nicht eingerichtet"<br />

# oder<br />

echo "­­­­­­­­­­­­­­­­ Shadow Datei Version 2 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­"<br />

if [ ­e /etc/shadow ]<br />

then<br />

echo " Shadowdatei eingerichtet"<br />

else<br />

echo " Shadowdatei nicht eingerichtet"<br />

fi<br />

echo "­­­­­­­­­­­­­­ Uebung 14­7b Dateien groesser als 10000 Bytes­­­­­­­­­­­ls<br />

­l /var/log > tempfile<br />

k=0<br />

for i in $(cut ­c35­43,57­ tempfile)<br />

do<br />

if [ $k ­eq 0 ]<br />

then<br />

k=1<br />

byte=$i<br />

else<br />

if [ $byte ­ge 10000 ]<br />

then<br />

echo "Datei groesser als 10000 Bytes:" $byte $i<br />

fi<br />

k=0<br />

fi<br />

done<br />

echo "­­­­­­­­­­­­­­­­ Uebung 14 –7d User und Uids­­­­­­­­­­­­­­­­­­­­­­­­­­­­"<br />

for i in $(cut ­d":" ­f1,3 /etc/passwd)<br />

do<br />

uid=$(echo $i | cut ­d ":" ­f2)<br />

name=$(echo $i | cut ­d ":" ­f1)<br />

# echo $uid " " $name<br />

if [ $uid ­ge 500 ]<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 57/63


then<br />

echo $uid $name<br />

fi<br />

done<br />

echo "­­­­­­­­­­­­­­­­­Uebung 14 –8 dirsum ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­"<br />

# Gibt nach dem Befehl ls ­ald die Anzahl der Dateien<br />

# sowie deren Gesamtspeicherplatz aus<br />

tempfile=/tmp/lt.$$<br />

ls ­al ­­color=tty $*<br />

ls ­al $* > $tempfile<br />

summe=0<br />

anz=0<br />

for i in $(cut $tempfile ­b 33­42); do # Spalte 33­41 herausgeschnitten<br />

# i=${i#*[^0­9,' ']*} # Regulaerer Ausdruck<br />

if [ i ]; then<br />

summe=$[$summe+$i] # Keine Leerzeichen !!<br />

anz=$[$anz+1]<br />

# Eckige Klammer: Ausdruck auswerten<br />

fi<br />

done<br />

kb=$[$summe/1024]<br />

mb=$[$kb/1024]<br />

echo $anz "Dateien, " $summe "Bytes, " $kb "KB, " $mb "MB"<br />

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Uebung 14 ­ 9 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­<br />

#!/bin/bash<br />

tempfile=/tmp/lt.$$<br />

ls ­al $1 > $tempfile<br />

v=0<br />

f=0<br />

for i in $(cut $tempfile ­b 1­1)<br />

do<br />

echo "Wert von i= "$i<br />

if [ $i != "i" ]<br />

then<br />

if [ $i == "d" ]<br />

then<br />

v=$[$v+1]<br />

echo " Ist ein Verzeichnis v = " $v<br />

else<br />

f=$[$f+1]<br />

echo " Ist ein File f = " $f<br />

fi<br />

fi<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 58/63


done<br />

echo $1": " $v "Verzeichnisse, " $f " Files"<br />

Lösungen zu Uebung 18<br />

Beispiel 1:<br />

# Kopiere die ersten 10 Files in einem Verzeichnis auf das Verzeichnis /tmp<br />

#<br />

j=0;<br />

# Filezähler<br />

for i in * ; do<br />

# Schleife über alle Dateien<br />

echo $i<br />

# Testausgabe der Dateien am<br />

Schirm<br />

echo "cp ­v" $i "/tmp" >> testscript.out<br />

# Kopierbefehl wird auf File<br />

kopiert<br />

j=$[$j+1]<br />

# Filezähler erhöht<br />

echo $j<br />

# Testausdruck<br />

test $j ­ge 10 && exit 1 # Abbruch, falls Filezähler > 10<br />

done<br />

Beispiel 6<br />

# Durchsuche alle Benutzerverzeichnisse:<br />

# Existiert dort kein public_html Verzeichnis, kopier eines hinein<br />

# Existiert eines, schau ob dort der index.shtml die Groesse zahl hat<br />

# Wenn ja ueberschreibe den index.shtml mit einem neuen, schoeneren<br />

# index.shtml<br />

anzuser=0<br />

# Zaehler fuer die Anzahl der<br />

Benutzer<br />

zahl=443<br />

# Groesse der gesuchten Datei<br />

for user in $(ls /home/); do<br />

# Suche alle Elemente von /home ab<br />

{ file=$(ls ­d /home/$user)<br />

echo $file<br />

if [ ­d $file ] # ist $file ein Directory <br />

then<br />

echo "Es geht um den Benutzer: " $user<br />

if grep $user /etc/passwd > /dev/null # Ist $user auch ein Benutzer <br />

then<br />

echo " Das ist ein echter Benutzer !"<br />

anzuser=$(($anzuser+1))<br />

if [ ­e $file/public_html ] # existiert ein public Verzeichnis <br />

then<br />

tempfile=test.$$<br />

echo "Benutzer hat ein public Verzeichnis"<br />

ls ­l $file/public_html/index.shtml | tee $tempfile<br />

for filesize in $(cut $tempfile ­b 38­41); do<br />

echo " So gross ist der file" $filesize<br />

# Spalte 38­41: filesize<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 59/63


if [ $filesize ­eq $zahl ] # Hat Benutzer den default index.html <br />

then<br />

echo "Benutzer " $user " hat Standardseite !" # Ja er hat standard file<br />

cp ­vf index.shtml $file/public_html/<br />

# copy index.shtmlauf<br />

Verzeichnis<br />

chown $user $file/public_html/index.shtml # Setze die Rechte<br />

chgrp users $file/public_html/index.shtml # Setze die Rechte der<br />

Gruppe<br />

else<br />

echo "Benutzer " $user " hat schon eine eigene homepage, bravo !"<br />

fi<br />

done<br />

else<br />

echo "Benutzer hat kein public Verzeichnis" # Benutzer hat kein Standardverzeichnis<br />

cp ­vf /etc/skel/.* $file # hidden files in /etc/skel kopieren<br />

cp ­rvf /etc/skel/* $file # rekursiv alles kopieren<br />

cp ­rvf /etc/skel/.kde $file<br />

# Wie kopier ich mehrere hidden<br />

dirs <br />

chown ­R $user $file # Rechte setzen<br />

chgrp ­R users $file # Rechte der Gruppe setzen<br />

fi<br />

else<br />

echo " Das ist kein echter Benutzer !"<br />

fi<br />

else<br />

echo " Das ist ein File, wird daher ausgelassen !!!"<br />

fi<br />

echo "­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­"<br />

ende=2<br />

echo "ANZUSER: "$anzuser<br />

if [ $anzuser ­ge $ende ]<br />

then<br />

echo "Abfrage ist ok "<br />

exit<br />

#else<br />

# echo "Abfrage ist nicht ok !!!"<br />

# exit<br />

fi<br />

}<br />

done<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 60/63


16) Download und Installation eines Programms<br />

1)Download<br />

Auf www.freshmeat.net kann nach freeware und shareware für <strong>Linux</strong> gesucht werden.<br />

Den Suchbegriff "html editor" eingeben und die Software von Coffee Cup auswählen<br />

und die für <strong>Linux</strong> freie Software runterladen.<br />

2) Entpacken<br />

tar xvfz Coffee<strong>Linux</strong>.tar.gz<br />

entpackt das gezippte File in ein Verzeichnis dist<br />

3) Installieren<br />

Gehe in das Verzeichnis dist und<br />

4) Starten<br />

./Coffee<br />

./Coffee_install<br />

gesamte Webseite <br />

Titel der Kopfleiste <br />

Titel des Dokumentes <br />

Hier beginnt die Webseite <br />

Einige HTML Tags:<br />

Beispiel: Bestimmen der Textfarbe sowie des Hintergrundbildes<br />

<br />

<br />

Einfügen einer horizontalen Linie<br />

<br />

Zeilenumbruch<br />

Text groß geschrieben <br />

Text groß geschrieben <br />

anchor Text Anchor tagging pair<br />

Beispiele sind die Hyperlinks:<br />

Link auf eine E Mail Adresse: <br />

Link auf eine HTML Seite im gleichen Verzeichnis: (sogenannte relative URL's)<br />

:


<br />

Beispiel einer Webseite:<br />

<br />

<br />

<br />

<br />

<br />

Testseite Nr 1 : Webseitenerstellung<br />

<br />

<br />

<br />

<br />

<br />


17) Grafische Benutzeroberfläche<br />

TODO Liste<br />

Beispiele:<br />

Als root:<br />

Bringen Sie den Browser auf den Desktop<br />

Bringen Sie den Browser in das Hauptmenu<br />

Legen Sie 2 Benutzer lara und peter an, mit den Passwörtern lara und peter<br />

Melden Sie sich als Benutzer lara an und bringen Sie firefox in das<br />

persönliche Menu<br />

Konfiguration der Netzwerkkarte<br />

Persönlicher Ordner<br />

Openoffice<br />

Software installieren und Updates mit kyum, pirut usw<br />

PDF<br />

Firewall und SE<strong>Linux</strong><br />

Kontrollzentrum in KDE<br />

Dateien suchen<br />

NFS<br />

Multimedia<br />

k3b<br />

Nameserver<br />

Webserver<br />

Internet mit Firefox, Thunderbird, Evolution, kmail usw<br />

<strong>Linux</strong> fuer den Unterricht <strong>Serverkonfiguration</strong>.odt 2013-12-20 © WR 63/63

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!