Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...
Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...
Linux Serverkonfiguration - Bulme Lehrer - Login - BULME Graz ...
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 />
BundesLehr 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.linuxuser.de/ausgabe/2005/11/044heimnetz/nfs.png<br />
Konfiguriert wird dies am Desktop mit<br />
Start/Administration/Servereinstellungen/NFS/Hinzufügen<br />
(systemconfignfs muss installiert sein)<br />
Will man nicht nur Leserechte, sondern auch Schreibrechte, muss bei Eigenschaften und<br />
Benutzerzugriff “Remoteroot 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 /pc15cdrom<br />
mount t nfs 172.16.25.15:/home /pc15home<br />
die Verzeichnisse /cdrom und /home des pc15 unter dem Verzeichnissen /pc15cdrom und /pc15<br />
home angesprochen werden.<br />
Unmounten:<br />
umount /pc15cdrom<br />
umount /pc15cdrom<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 />
/datenfueralle 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 ClientServer 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: sslforce YES<br />
set ftp: sslprotectdata 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:sslallow 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:verifycertificate 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:hoherport zu server:port21 aufgebaut. Wenn jedoch der Client eine Datei<br />
wünscht, baut der Client von sich aus eine Verbindung client:hoherport zu Server:hoherport<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 IPAdressen 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.eigenezonen<br />
3) /var/named/graz.at.db<br />
4) /var/named/25.15.172.inaddr.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 />
listenon 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/dnsseckeys//dlv/dlv.isc.org.conf";<br />
include "/etc/named.eigenezonen";<br />
// hinzugefügte Zeile<br />
Zur bereits bestehenden Datei named.conf fügen wir nur eine Zeile hinzu<br />
<br />
Datei /etc/named.eigenezonen<br />
};<br />
zone "graz.at" IN {<br />
type master;<br />
file "graz.at.db";<br />
allowupdate { 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.inaddr.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.eigenezonen<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.wiegmannlinux.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 />
EMail 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/wwwerror.log<br />
Logfile für eventuelle Fehlermitteilungen<br />
CustomLog<br />
/var/log/httpd/wwwaccess.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/pc15error.log<br />
CustomLog /var/log/httpd/pc15access.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/franzerror.log<br />
CustomLog /var/log/httpd/franzaccess.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 validuser # 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/passwddigest # AuthUserFile<br />
require validuser<br />
# Alle Benutzer in /etc/httpd/passwoerter/passwd dürfen<br />
Passwort hinzufügen:<br />
htdigest c /etc/httpd/passwddigest 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 validuser<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/secureerror.log<br />
CustomLog /var/log/httpd/secureaccess.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 TarArchiven 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 joe2.89.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 checkupdate 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 KDEDesktop 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 logprefix="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 />
logprefix “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 logprefix "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 />
logprefix "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 23022002<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/10mail.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/localhostnames:<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 IMAPServer<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/cabundle.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 DefaultEinstellungen 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.1172.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 infoti.bulmeintern.ac.at ist nur einem Netz nicht erlaubt<br />
Zugriff auf infoncc.bulmeintern.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/vmlinuz2.6.151.2054_FC5 ro root=/dev/hda2 rhgb quiet<br />
initrd /boot/initrd2.6.151.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/vmlinuz2.6.151.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 />
grubinstall /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 rpmbuild<br />
Rpmbuild Paket enthält einige Skripte und Programme zum Erstellen von RPMPaketen unter<br />
Verwendung des Red Hat Package Managers. (Der Baum /usr/src/redhat wird u.a. erstellt)<br />
yum install yumutils<br />
yumutils 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 />
rpmdevsetuptree<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 kernel2.6.181.2798.fc6.src.rpm<br />
cd ~/rpmbuild/SPECS<br />
rpmbuild bp –target $(uname m) kernel2.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/kernelversion/linuxversion/<br />
cp configs/kernel2.6.18i686.config .config<br />
liefert<br />
uname r<br />
kernel2.6.181.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 Kerneldevelopment Dateien, die zur Kompilation der Module benötigt werden:<br />
rpm ivh kerneldevel2.6.181.2798.fc6.i686.rpm oder<br />
yum install kerneldevel<br />
Auch der GNU CCompiler darf nicht fehlen:<br />
yum install gcc<br />
yum install ncursesdevel<br />
ist für “make menuconfig” notwendig<br />
yum install qtdevel<br />
yum install gccc++<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/kernelversion/linuxversion/<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 .configjjjmmdd<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) ncursesdevel installieren ! oder<br />
Geht nur mit qt, qtdevel und gccc++ 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/releasenotes/fc6/en_US/snKernel.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 SingleUserMode 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 SingleUserMode<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 146 IPNR "<br />
echo n ""Meine IP: "" ; /sbin/ifconfig eth0 | grep inet | cut c2437<br />
alias ipnr="echo n ""Meine IP: "" ; /sbin/ifconfig eth0 | grep inet | cut c2437"<br />
echo " Uebung 147a 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 147b Dateien groesser als 10000 Bytesls<br />
l /var/log > tempfile<br />
k=0<br />
for i in $(cut c3543,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 3342); do # Spalte 3341 herausgeschnitten<br />
# i=${i#*[^09,' ']*} # 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 11)<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 3841); do<br />
echo " So gross ist der file" $filesize<br />
# Spalte 3841: 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