Highfish
Active Member
Inhaltsangabe
1. Intro
2. Gedanken zu Hardware und Software
3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk
4. Installation von FreeBSD 5.1
5. FreeBSD Feintuning (Basissystem Sicherheit Teil 1)
6. FreeBSD up to date halten
7. FreeBSD Feintuning (Basissystem Sicherheit Teil 2)
8. Installation und Konfiguration von Samba 3.0.0 und Webmin 1.121
9. Installation und Konfiguration des DHCP Servers ISC-DHCP3
10. Konfiguration des NTP (Network Time Protocol) Servers von FreeBSD
11. FreeBSD Feintuning (Basissystem Sicherheit Teil 3)
12. Ein paar Anmerkungen zu Zugriffsrechten unter FreeBSD
13. Konfiguration von Windows XP Professional als Domänen-Mitglied
14. Maintenance des Servers
15. Schlusswort
1. Intro
Als ich das erste Mal FreeBSD und Samba installierte, suchte ich nach einer Step-by-Step Anleitung, wie man FreeBSD und Samba richtig installiert und konfiguriert. Ich fand zwar vieles im Web, das meiste war mir jedoch zu sehr auf Linux und Samba bezogen oder hatte mir nicht genug Tiefgang. Zudem war vieles auch noch auf Englisch. Ich hoffe mit diesem Howto diese Lücke ein wenig schliessen zu können.
Dieses Howto soll beschreiben, wie man einen standalone Server mit FreeBSD, Samba als PDC, DHCP und NTP für ein kleines Netzwerk installiert und konfiguriert
An wen richtet sich dieses Howto? Prinzipiell an alle, die sich gerne einmal mit FreeBSD beschäftigen möchten. Auch wenn man keine oder wenig Vorkenntnisse hat, sollte man mit diesem Howto einen Fileserver konfigurieren können. Jedoch sollte man auf jeden Fall wissen, welche Hardware (und zwar im Detail) im Rechner drinsteckt auf dem man FreeBSD installieren will. Ebenso muss man wissen, was eine Domäne ist, bzw. wie man ein Windows-Computer einer Domäne hinzufügen kann. Ein wenig Englischkenntnisse muss man schon besitzen und etwas geübt im Tastaturschreiben sollte man auch sein, weil man relativ viel tippen muss.
Jedoch muss ich sagen, dass dies hier nicht "mein" Howto ist, vielmehr habe ich diverse FreeBSD-Literatur genommen und ins Deutsche übersetzt. Darum hier auch gerade die Quellenangabe mit den Originalartikeln, auf die dieses Howto aufbaut:
FreeBSD Handbuch des FreeBSD German Documentation Project
http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/index.html
Die englische Version des FreeBSD Handbuchs des FreeBSD Documentation Project
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html
Frequently Asked Questions for FreeBSD 2.X, 3.X and 4.X des FreeBSD Documentation Project
http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/index.html
FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi
Building a Fairly secure FreeBSD Mail server von soup4you2
http://screamingelectron.org/phpBB2/viewtopic.php?t=774
Using Samba, 2ed, O'Reilly & Associates
http://samba.epfl.ch/samba/docs/using_samba/toc.html
The Samba-HOWTO-Collection
http://samba.epfl.ch/samba/docs/man/Samba-HOWTO-Collection.html
IPFW und NATD von asg, marzl und anderen
http://www.bsdforen.de/forums/showthread.php?threadid=148
Die Dokumentation welche im Samba Web Administration Tool (SWAT) eingebaut ist
Das Buch: FreeBSD unleashed von Michael Urban / Brian Tiemann
Ich hoffe ich habe niemanden vergessen und wünsche viel Spass beim Lesen.
2. Gedanken zu Hardware und Software
2.1 Hardware
Die Prozessorleistung ist für einen Fileserver nicht das wichtigste, so tut es auch ein ausrangierter Pentium II für den Server. Wichtiger ist der Arbeitspeicher, hier sollten es mindestens 128MB sein. So richtig Spass machen tut es IMHO ab 256MB aufwärts. Vor allem interessant wird’s bei den Festplatten. Hier empfehle ich unbedingt ein RAID – Array zu bauen, schliesslich sollen die Daten auf dem Fileserver ja auch sicherer lagern als auf den Windows-Clients. Darum macht hier eine einzelne Festplatte wenig Sinn. RAID 0 (Striping) können wir auch gleich vergessen, da dort, wenn eine Platte abraucht, auch die Daten auf den anderen verloren sind. Also ist mindestens RAID 1 (Mirroring) angesagt. Dafür tut’s ein billiger RAID-Controller z.B. mit Highpoint 370 Chipsatz. RAID 5 wäre natürlich die Krönung nur kostet ein RAID 5 IDE-Controller schon eine Stange Geld, von SCSI ganz zu schweigen. Die Grafikkarte ist recht nebensächlich, da der Server ohnehin nur über die Kommandozeile eingerichtet wird. Ein Diskettenlaufwerk ist nicht zwingend notwendig, aber ein CD-ROM (alternativ kann man FreeBSD auch übers Netz installieren, wozu aber wieder ein Diskettenlaufwerk nötig ist, aber das beschreibe ich hier im Howto nicht) sollte der Server schon haben. Wichtig für dieses Howto ist auch eine gute Internetverbindung am besten ADSL über einen Router.
2.2 Software
Warum FreeBSD und nicht Net-/ OpenBSD oder Linux?
Bei Linux kann ich mit dem Distributionswirrwarr nicht viel anfangen und über NetBSD kann ich nichts sagen, weil ich es selber nie ausprobiert habe. OpenBSD wäre wohl noch eine Spur sicherer als FreeBSD, aber ich habe anno dazumal unter OpenBSD 2.5 versucht, Samba aus den Quellen zu kompilieren, mit sagen wir mal, sehr bescheidenem Erfolg. Für FreeBSD spricht, dass es IMHO am besten von den drei BSD’s auf die Intel x86 Plattform optimiert (Hardwareunterstützung) ist, und dass die Ports immer sehr aktuell sind.
Obwohl FreeBSD 5.1 auf der FreeBSD Homepage als New Technology Release gekennzeichnet ist, habe ich für mein Howto FreeBSD 5.1 verwendet, da es das neue UFS2 Dateisystem bietet. Dies ist in meinen Augen wichtig, da wenn man später auf neuere Versionen von FreeBSD updaten möchte, man seine Daten schon auf dem neuen UFS2 Dateisystem hat und nicht auf dem UFS Dateisystem von FreeBSD 4.X. Schliesslich hat nicht jedermann genügend Plattenspeicher um seine gesamten Daten vom Server zu kopieren, nur weil man die Platten im Server mit einem neuen Dateisystem versehen will.
Die weitere Software, die ich hier im Howto verwende, ist Samba 3.0.0, Webmin 1.121 und der isc-dhcp3 Server aus den FreeBSD Ports sowie Software, die als Abhängigkeiten der oben genannten drei Ports mitinstalliert wird.
3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk
Endziel: der Server soll als "Primary Domain Controller" für Windows XP, Windows 2000 und Windows NT dienen und somit auch für die Namensauflösung im Windows-Netz (WINS) zuständig sein.
Weiter soll er IP-Adressen an die Clients vergeben können (DHCP) und den Clients seine Zeiteinstellungen weitergeben, hierfür bezieht der Server seine Zeit aus dem Internet (NTP).
Namensgebung im Netzwerk
Einheitliche Namen scheinen mir wichtig in einem Netzwerk, hier eine Idee wie diese Namensgestaltung aussehen könnte:
sbsd0001 = S (Server) bsd (Betriebssystem) 0001 (Nummer des Servers)
wwxp0001 = W (Workstation) wxp (Windows XP) 0001 (Nummer der Workstation
phpq0001 = P (Printer) hpq (Hewlett-Packard) 0001 (Nummer des Printers)
u01 = U (User) 01 (Benutzer 01)
Sonderzeichen wie Trennstriche, Underscores usw. würde ich nicht verwenden.
4. Installation von FreeBSD 5.1
Ich installiere FreeBSD am liebsten von CD. Daher habe ich mir auch das 5.1 ISO-File von einem FreeBSD - Mirror gezogen. z.B. von ftp://ftp.de.FreeBSD.org/pub/FreeBSD/. Die ganze Mirrorliste ist zu finden unter: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html
4.1. Das ISO auf eine CD brennen, CD rein und let’s go!
4.2. sysinstall Main Menu -> Custom wählen
4.3. Choose Custom Installation Options -> Options -> Newfs Args wählen (mit Space anwählen) Parameter ändern auf -b 4096 -f 2048 Begründung: es macht zumindest mir keine Freude, wenn die MP3 - Sammlung auf dem Server doppelt so viel Speicher wie auf dem Windows-Client benötigt, nun das Menü wieder verlassen.
4.4 Choose Custom Installation Options -> Partition: Hier ist zu beachten, dass man bei mehreren Festplatten die richtige Platte partitioniert!
ad0 steht zum Beispiel für die Master IDE-Festplatte am primären IDE-Kontroller. sd0 ist demnach die erste SCSI-Platte. Speziell bei IDE Raid-Arrays mit den verbreiteten Kontrollern von Promise und Highpoint ist zu beachten, dass FreeBSD sowohl die einzelnen im Raid vorhandenen Platten als auch das Array als solches erkennt. Ein solches IDE-Raid hat die Bezeichnung ar0 und nur dieses ar0 sollte partitioniert werden. Wieder anders sieht es bei "richtigen" Hardware-Raid-Controllern (z.B der Promise Supertrak SX6000 oder SCSI-Raid-Controller von ICP-Vortex) aus, diese Arrays erscheinen dann als eigenständige Platte z.B als pst0 für den Promise Supertrak SX6000.
Allfällige vorhandene Partitionen löschen und mit Druck auf "A" die ganze Festplatte für FreeBSD verwenden. Partition nochmals anwählen und mit "S" bootfähig machen. "Q" zum verlassen des FDISK Partition Editors. Wenn wir gefragt werden nach dem Boot Manager, wählen wir BootMgr Install the FreeBSD Boot Manager.
4.5 Choose Custom Installation Options -> Label: wir erstellen durch drücken von "C" neue Slices. Dann werden wir nach der Grösse gefragt, wo wir 128M für 128MB eingeben. Dann wählen wir File System und zum Schluss geben wir den Mountpoint an. In diesem Falle ist der Mountpoint "/". Fertig ist das Root-Slice.
Analog erstellen wir folgende Slices
Regeln zur Grösse des Swapspeichers: Früher (als Rechner 4 MB RAM hatten) sagte man das Doppelte des Hauptspeichers, heute ist dies jedoch anders und es macht bei 512MB RAM nicht viel Sinn 1GB Swapspeicher zu kreieren. Bis 256MB RAM ist 256MB Swap auf jeden Fall eine gute Grösse.
256M swap kein
256M filesystem /var
256M filesystem /tmp
2048M filesystem /usr
Rest filesystem /home
Den FreeBSD Disklabel Editor wieder mit "Q" verlassen.
4.6 Choose Custom Installation Options -> Distributions -> Custom: Wir wählen base, crypto, man und ports Begründung: diese 4 Pakete reichen vollkommen aus für unseren Fileserver.
4.7 Choose Custom Installation Options -> Media: CD/DVD wählen.
4.8 Choose Custom Installation Options -> Commit wählen damit FreeBSD installiert wird.
4.9 Nachdem die Installation abgeschlossen wurde, werden wir gefragt, ob wir nochmals das General Confirmation Menü aufrufen wollen für letzte Änderungen, dort wählen wir "NO". Nun sind wir wieder im Choose Custom Installation Options Menü, das wir mit anwählen von Cancel verlassen und so wieder im sysinstall Main Menü sind.
4.10 sysinstall Main Menu -> Configure wählen
4.11 FreeBSD Configuration Menu -> Root Password. Begründung: Passwort des Superusers (Root) setzen. Das Passwort sollte nicht zu einfach sein, aber auch nicht so schwierig, dass man es vergisst.
4.12 FreeBSD Configuration Menu -> User Management -> User: Begründung, wir legen einen Unix Benutzer an, der später Root werden darf.
Login ID: highfish (na ja das kann irgendwas sein, highfish ist nur ein Beispiel)
UID: 1001
Group:
Password (irgendwas, das man nicht vergisst)
Full Name: Highfish (oder irgendwas anderes)
Member groups:
Home directory: /home/highfish
Login shell: /bin/sh
4.13 FreeBSD Configuration Menu -> User Management -> Group: Begründung, wir legen gerade noch ein paar Benutzergruppen an, die wir später wieder brauchen werden.
Group name: smb-users
GID: 1100
Group name: smb-admin
GID: 1150
und
Group name: smb-workstations
GID: 1200
4.14 FreeBSD Configuration Menu -> Time Zone. Wenn die Rechneruhr nach lokaler zeit läuft, wählen wir zuerst "NO". Dann wählen wir Europe und das Land in dem wir wohnen. Dann wir die jeweilige Zeitzonenbezeichnung angezeigt. CET zum Beispiel für Mitteleuropa.
4.15 FreeBSD Configuration Menu -> Networking -> Interfaces. Dort die Netzwerkkarte wählen. In meinem Falle ist dies rl0 für eine Realtek 8139 PCI Netzwerkkarte. IPv6 configuration -> "NO", DHCP configuration -> "NO". Damit können wir nun die Einstellungen der Netzwerkkarte manuell vornehmen.
Host: sbsd0001 (oder was auch immer)
Domain: highfish.info (oder was auch immer)
IPv4 Gateway: IP-Adresse des Internet-Gateways (DSL-Router)
Name Server: IP-Adresse des Name Servers des Internet Providers
IPv4 Address: IP-Adresse des Fileservers. Bei mir z.b. 192.168.1.5
Netmask: 255.255.255.0 (kommt aber automatisch)
Dann wird man gefragt, ob man das Interface rl0 aufstarten will, wo wir "YES" wählen.
4.16 FreeBSD Configuration Menu -> Networking -> TCP Extensions deaktivieren mit Druck auf Space.
4.17 FreeBSD Configuration Menu -> Startup -> usbd deaktivieren, wenn man wie ich keine USB – Geräte verwendet.
4.18 Das FreeBSD Configuration Menu verlassen
4.19 sysinstall Main Menu -> Keymap: das passende Keyboard-Layout installieren, bei mir wäre das Swiss German ISO
4.20 Nun die Installation durch verlassen des sysinstall Main Menu abschliessen. D.h. Exit install anwählen und alle Floppies, CD-ROMS usw. aus den Laufwerken nehmen und zusehen wie der PC neu startet.
5. FreeBSD Feintuning (Basissystem Sicherheit Teil 1)
Vormerkung: In diesem Abschnitt müssen diverse Konfigurationsdateien von FreeBSD an unsere Bedürfnisse angepasst werden. Ich benutze dazu den Editor VI. Dieser Editor ist standardmässig bei FreeBSD dabei und wenn man sich an seine Bedienung gewöhnt hat, kommt man schnell damit voran. In der Manpage des VI steht geschrieben, wie man ihn bedient. http://www.freebsd.org/cgi/man.cgi?...ion=0&manpath=FreeBSD+5.1-RELEASE&format=html
Nun Ist FreeBSD 5.1 also auf der Festplatte installiert und wir können uns ans Feintuning des Systems machen. Dafür loggen wir uns als Superuser (root) ins System ein. sbsd0001# steht für den Kommandozeilenpromt unseres BSD-Systems
sbsd0001# sockstat -4
Damit werden gestartete Daemons angezeigt und auf welchen Ports sie laufen
Wir sehen, dass sendmail defaultmässig läuft auf den Ports 25 und 587. Da wir das nicht brauchen stellen wir das gleich mal ab
sbsd0001# vi /etc/mail/sendmail.cf
So können wir das sendmail Konfigurationsfile editieren. Wir suchen im File nach der Zeile:
O DaemonPortOptions=Port=587, Name=MSA, M=E
Dort setzen wir ein Kommentarzeichen (#) davor um diese Zeile auszukommentieren.
Dann das File abspeichern und folgendes Kommando ausführen:
sbsd0001# killall –HUP sendmail
Somit wird der Sendmailprozess neu gestartet und liest seine Konfigurationsdatei neu ein. Wenn wir jetzt wieder sockstat -4 eingeben, ist der sendmail an Port 587 verschwunden.
Nun noch sendmail auf port 25 abstellen:
sbsd0001# vi /etc/rc.conf
In der nun geöffneten Konfigurationsdatei (die wir übrigens noch ein paar mal editieren werden) ergänzen wir folgendes:
sendmail_enable="NO"
Somit ist sendmail zwar nicht ganz abgestellt, aber es ist nicht mehr von aussen zugänglich, sondern nur noch auf unserem System am localhost (127.0.0.1:25).
sbsd0001# shutdown now
Dies fährt FreeBSD in den Single-User Modus um so die Startup-Dateien neu einzulesen. Um wieder aus dem Single-User Modus zu kommen, Enter drücken und exit eingeben.
Falls der Port 111 in unserem Output von sockstat -4 erscheint (was allerdings nicht der Fall ist, wenn man meine Anleitung bis hier Schritt für Schritt befolgt hat), haben wir Portmap auf unserem System laufen, was nur für NFS (und somit für unseren Samba Server überflüssig) notwendig ist. Also folgendes eintragen in /etc/rc.conf
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
Weiter ist noch Port 514 für syslogd offen, den schliessen wir aber nicht vollständig, sondern tragen in /etc/rc.conf folgendes ein:
sbsd0001# vi /etc/rc.conf
syslogd_enable="YES"
syslogd_flags="-ss"
Nach einem weiteren
sbsd0001# shutdown now
Und einem weiteren sockstat -4 ist nun auch der syslogd Port nicht mehr ersichtlich.
Last but not least setzen wir noch einen weiteren Parameter in /etc/rc.conf:
clear_tmp_enable="YES"
Dieser Parameter leert das Verzeichnis /tmp beim Aufstarten, IMHO eine gute Idee.
Wenn wir hier sowieso die Datei /etc/rc.conf editieren, schauen wir auch, ob die USB Unterstützung auch wirklich abgeschaltet ist (natürlich nur, wenn wir keine USB Geräte verwenden). Dafür checken wir, ob folgende Zeile drinsteht.
usbd_enable="NO"
Darunter darf keine weitere Zeile mit usbd_enable=“YES“ stehen, falls diese steht, diese löschen.
So nun raus aus /etc/rc.conf und rein in /etc/login.conf mit folgendem Kommando:
sbsd0001# vi /etc/login.conf
Dort ändern wir : passwd_format=md5:\ in
: passwd_format=blf:\ (beachten, dass in der Datei zwischen dem ersten Doppelpunkt und dem p kein Leerschlag sein darf!)
Damit der Blowfish-Verschlüsselungsalgorithmus und nicht der md5 Algorithmus verwendet wird.
Weiter bauen wir folgende Zeile ein (am besten unter der Zeile :ignoretime@:\ ).
:idletime=30:\
Damit werden inaktive User nach 30 Minuten wieder ausgeloggt.
Dann das File /etc/login.conf abspeichern und verlassen und Folgendes eingeben um die Login-Datenbank neu zu bauen:
sbsd0001# cap_mkdb /etc/login.conf
Danach müssen die Passwörter der Benutzer an den neuen Algorithmus angepasst werden. D.h. für den Benutzer highfish geben wir folgendes ein um neue Passwörter zu setzen.
sbsd0001# passwd highfish
Und für den Benutzer root
sbsd0001# passwd
Ob es funktioniert hat, überprüfen wir hiermit:
sbsd0001# more /etc/master.passwd
Nun sollten bei den beiden Usern die Passwörter mit $2 beginnen.
Nun müssen wir noch das adduser Tool an den neuen Blowfish-Algorithmus anpassen.
sbsd0001# vi /etc/auth.conf
Dort die #crypt_default = md5 des Linie ändern auf:
crypt_default=blf
Jetzt passen wir das optische Erscheinungsbild unserer Loginprozedur ein wenig an, in dem wir eine neue /etc/motd gestalten. Diese Message of the day (motd) wird angezeigt, nachdem ein Benutzer sich erfolgreich eingeloggt hat. Dort kann eigentlich stehen was will, es soll sich ja eh niemand auf dem System einloggen, ausser der Systemadministrator. Trotzdem kann man die motd anpassen durch editieren der Datei /etc/motd.
sbsd0001# vi /etc/motd
Dort könnte dann so etwas stehen:
Nun die Copyright Information noch entfernen:
sbsd0001# touch /etc/COPYRIGHT
Viel interessanter finde ich den Text zu ändern, der vor dem login:-Prompt kommt.
Dazu muss man /etc/gettytab editieren.
sbsd0001# vi /etc/gettytab
Dort die Linie suchen die mit
:cb:ce:ck:lc:
beginnt. Dort zwischen dem ersten r und dem letzen Doppelpunkt dieser Zeile kann man reinschreiben was man will, als Pre-Login Message. Da mir ein schlichtes login: am besten gefällt, lösche ich alles zwischen dem r und dem oben besagten Doppelpunkt.
Nach diesen Änderungen ist wieder einmal kurz die Datei /etc/rc.conf dran:
sbsd0001# vi /etc/rc.conf
Dort die Linie
update_motd="NO"
ergänzen um zu vermeiden, dass FreeBSD selbständig Version und Kernel Information zu der /etc/motd packt. Damit diese Änderung wirksam wird, muss dass System neu gestartet werden. Zuerst würde ich jedoch noch auf einer weiteren Konsole überprüfen, ob die neue Loginprozedur funktioniert indem man sich nochmals einloggt.
sbsd0001# reboot
Oder:
sbsd0001# shutdown -r now
So nun weiter mit unserem Sicherheitsfeintuning. Prinzipiell sollte sich der User root gar NIE direkt einloggen. Dies stellen wir durch Modifikation von /etc/ttys sicher.
sbsd0001# vi /etc/ttys
In dieser Datei suchen wir mehrere Zeilen, die mit ttyv0 bis ttyv8 beginnen. In diesen Zeilen ersetzen wir das Wörtchen "secure" durch "insecure", damit sich root nicht mehr einloggen kann. Man kann bei diesen Linien auch "on" mit "off" ersetzen, um das jeweilige Terminal ganz zu deaktivieren, aber IMHO tuts der Wechsel auf "insecure" vollkommen
Nun suchen wir die Linie (ein kleiner Hint: die Linie steht gerade über den anderen)
console none unknown off secure
Und löschen das Wort "secure" vollständig. Somit wird verhindert, dass jemand das System in den Single-User Modus fahren kann und dann ohne Eingabe des root-Passworts am System arbeiten kann.
Weiter ändern wir auch bei den seriellen Terminals ttyd0 bis ttyd3 "secure" auf "insecure". Das hat zwar an sich kein Einfluss, da diese seriellen Terminals sowieso deaktiviert sind, aber der Vollständigkeit ändern wir das hier trotzdem. Nun speichern wir /etc/ttys und bearbeiten /etc/group
sbsd0001# vi /etc/group
Dort ergänzen wir die Linie wheel:*:0:root folgendermassen:
wheel:*:0:root,highfish
Wobei highfish der Benutzer ist, den wir ganz am Anfang dieser Installation im sysinstall Tool angelegt haben, sollte der Benutzer nicht highfish heissen, dementsprechend hier auch anpassen. Dies ist IMMINENT wichtig, da wir ohne diesen Zusatz nicht mehr root-Benutzer werden können. Was aber unabdingbar für das weitere Gelingen unserer Installation ist.
Sollte bei obiger Konfiguration doch etwas schiefgelaufen sein, und man kann sich nach einem Reboot nicht mehr als root einloggen oder zu root emporschwingen mit "su", hier der Weg wie man trotzdem wieder reinkommt.
1. ctrl-alt-del, Hardreset oder den Stecker des Fileservers ziehen
2. bei "Hit [Enter] to boot immediately, or any other key for command prompt." geben wir "boot -s ein, damit wir in den Single-User Modus kommen
3. Nun wird man nach dem Root-password gefragt für den Single-User Modus
4. Enter drücken, um eine Shell zu erhalten
5. mit "fsck" allfällige beschädigte Filesysteme checken (nur bei Hardreset oder Stecker raus)
6. mit "mount" die Filesysteme wieder einhängen
z.b. mount /dev/ad0s1a /
7. Sobald alle Filesysteme wieder eingehängt sind, ist auch der VI Editor wieder verfügbar, mit dem sich eventuelle Fehler in den Config-Dateien wieder glatt bügeln lassen
8. mit einem schnöden "exit" kommt man wieder in den Multiuser-Modus.
Ob alles funktioniert, testen wir mit einem weiteren
sbsd0001# shutdown now
Wenn wir nun wieder beim login:-Promt sind, müssen wir uns als der Benutzer anmelden, der wir während der Installation angelegt haben. Danach müssen wir den Befehl su eingeben und darauf das root-Passwort, um wieder den Superuser root zu werden.
Doch nun weiter mit dem Absichern unseres Systems.
sbsd0001# vi /etc/sysctl.conf
Zuerst kommen in der Datei /etc/sysctl.conf einige Kommentare, danach können wir mit unseren Ergänzungen loslegen. Wir kommentieren wir folgende Zeile aus (d.h. das # am Anfang der Zeile entfernen):
security.bsd.see_other_uids=0
Oder für FreeBSD 4.8
kern.ps_showallprocs=0
Dadurch werden den Benutzern nur diese Prozesse angezeigt, von denen sie auch Besitzer sind. Nur root sieht weiterhin alle Prozesse (na ja, irgendwie logisch).
Nun erstellen wir noch die Regeldatei für die IP-Firewall IPFW. Diese Regeln sind „dynamisch“ das heisst, wir können durch setzen von vier Variabeln die Firewall an unsere Anforderungen anpassen. Die vier Variabeln sind "interface", "dns_server", "open_tcpports" und "open_udpports“"(siehe weiter unten). Wir müssen nun unten in der Regeldatei interface="rl0" durch die Netzwerkkarte ersetzen, die tatsächlich im Rechner steckt sowie dns_server="193.192.227.3" durch den DNS-Server des eigenen Providers ersetzen. open_tcpports und open_udpports lassen wir wie unten, denn so werden nur die Ports geöffnet, die wir für unseren Fileserver benötigen. Dazu erstellen wir die Datei /etc/ipfwrules.
sbsd0001# vi /etc/ipfwrules
In die Datei tragen wir folgendes ein.
Damit IPFW auch beim nächsten Systemstart gestartet wird, müssen wir einmal mehr /etc/rc.conf bearbeiten.
sbsd0001# vi /etc/rc.conf
Wir tragen folgendes ein:
firewall_enable="YES"
firewall_script="/etc/ipfwrules"
firewall_logging="YES"
Nun müssen wir /etc/syslog.conf bearbeiten, damit das Logging von abgelehnten Verbindungen auch richtig funktioniert.
sbsd0001# vi /etc/syslog.conf
Wo wir folgendes nachtragen:
# IPFW
!ipfw
*.* /var/log/ipfw.log
Nun legen wir die Logdatei ipfw.log noch an
sbsd0001# touch /var/log/ipfw.log
Zum Schluss müssen wir noch die Untersützung der Firewall in den Kernel einkompilieren. Wie das genau geschieht, beschreibe ich im nächsten Kapitel.
6. FreeBSD up to date halten
Um ein sicheres System zu erhalten, ist es extrem wichtig, dass zuerst einmal das Basissystem auf dem neuesten Stand ist und somit die bekannten Sicherheitslücken gestopft sind. Dies ist in FreeBSD sehr einfach via CVSUP zu realisieren, da eine der grossen Stärken von FreeBSD ist, das System durch updaten des ganzen Betriebssystem vom Source Code zu aktualisieren.
Dazu müssen wir zuerst CVSUP installieren. Da wir am Anfang der Installation die FreeBSD Ports auch installiert haben, schlage ich vor, installieren wir CVSUP über die Ports. Installieren von den Ports heisst, dass FreeBSD sich die Quellen auf vorgegeben Servern im Internet herunterlädt, kompiliert und für FreeBSD patcht. Dies macht die Ports zu einem so mächtigen Werkzeug.
sbsd0001# cd /usr/ports/net/cvsup-without-gui
sbsd0001# make install clean
Dies installiert CVSUP ohne grafische Benutzeroberfläche für X-Window. Diese grafische Benutzeroberfläche benötigen wir auch nicht, da wir X-Window ja nicht installiert haben.
Damit wir FreeBSD mit CVSUP updaten können, müssen wir zuerst eine Konfigurationsdatei erstellen, damit CVSUP weiss, was wir updaten wollen.
Diese Datei erstellen wir unter /root also dem Home-Directory vom Superuser root.
sbsd0001# vi /root/cvs-supfile
In diese Datei schreiben wir folgendes rein:
*default host=cvsup3.de.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default compress
src-all tag=RELENG_5_1
ports-all tag=.
Dies weist CVSUP an, die Sourcen von FreeBSD 5.1 (RELENG_5_1) vom CVSUP Server cvsup3.de.FreeBSD.org herunterzuladen. Hier empfiehlt es sich einen schnellen CVSUP Server zu nehmen. Z.B. in der Nacht einen Server in Deutschland (de) bzw. Europa, während am Tag auch ein CVSUP Server in Amerika (da im Amiland dann ja Nacht ist) recht schnell sein kann.
Nun führen wir folgenden Befehl als root (d.h. als root eingeloggt oder ein User, der mit su zu root wurde) aus:
sbsd0001# /usr/local/bin/cvsup /root/cvs-supfile
Damit werden die Sourcen heruntergeladen. Nachdem diese heruntergeladen wurden, müssen wir die Sourcen kompilieren und installieren. Man nennt dies „buildworld“.
sbsd0001# cd /usr/src
sbsd0001# make buildworld
Das kompilieren und installieren der Sourcen dauert je nach Rechenleistung des Systems deftig lange (mit AMD-1.2 GHz Athlon brauchte ich 70 Minuten).
Nachdem die Sourcen kompiliert und installiert sind, d.h. buildworld fertig ist. Gehen wir nun daran uns einen auf unser System massgeschneiderten Kernel zu backen.
sbsd0001# cd /usr/src/sys/i386/conf
sbsd0001# cp GENERIC MYKERNEL
wobei MYKERNEL für den neugebauten Kernel steht, man kann irgendwas nehmen, ich nehme als Kernelname gerne den Typ und die Megahertz des Prozessors z.B. P3-800 für einen Pentium 3 mit 800 MHz.
sbsd0001# vi MYKERNEL
Bevor wir nun in diesem Konfigurationsfile herumwüten, lohnt es sich, im FreeBSD Handbook ein wenig nachzulesen, welche Optionen einkompiliert werden müssen oder sollten. Für Wissbegierige sei auch noch das File /usr/src/sys/i386/conf/NOTES genannt, in dem alle für die jeweilige Version gültigen Kerneloptionen aufgeführt sind.
Hier jedoch, das Wichtigste, das man einkompilieren sollte:
options SC_DISABLE_DDBKEY
options SC_DISABLE_REBOOT
options CPU_ENABLE_SSE
options CPU_ATHLON_SSE_HACK
options IPSEC
options IPSTEALTH
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
Weiter empfehle ich, alle Gerätetreiber, die man nicht für seinen Rechner benötigt, auszukommentieren (mit einem # vor der jeweiligen Zeile). Schliesslich wird die Hardware bei einem Server nicht jeden zweiten Tag verändert, und wenn man etwas ändert, kann man schnell wieder einen neuen Kernel bauen.
Nun müssen wir auch den neuen Kernel noch kompilieren:
sbsd0001# cd /usr/src
sbsd0001# make buildkernel KERNCONF=MYKERNEL
Wenn der Kernel ohne Fehler kompiliert ist, können wir ihn installieren
sbsd0001# make installkernel KERNCONF=MYKERNEL
Nun ist der Kernel installiert und ein Neustart des Systems ist nötig um den neuen Kernel auch zu aktivieren.
sbsd0001# reboot oder shutdown -r now
Nachdem der Rechner neu gestartet ist, und wir wieder als root eingeloggt (d.h. wir loggen uns als User highfish ein, und werden dann mit dem Befehl su zum root-Benutzer) sind, können wir mit uname -a überprüfen, mit was für einem Kernel das System gerade läuft.
Bevor wir die zuvor mit "buildworld" kompilierten Dateien auf unserem System installieren, lassen wir mergemaster durchlaufen, ein Tool, das verschiedene Dateiversionen erkennt und korrigiert.
sbsd0001# mergemaster -p
Nun installieren wir die kompilierten Dateien. Dafür müssen wir das System in den Single-User-Modus fahren.
sbsd0001# shutdown now
Nun müssen wir noch das root-Passwort eingeben und wir sind im Single-Mode. Dort geben wir folgendes ein, um die kompilierten Binaries zu installieren:
sbsd0001# cd /usr/src
sbsd0001# make installworld
Bevor nun das Update vollständig ist, lassen wir nochmals das Mergemaster-Skript laufen
sbsd0001# mergemaster
Wir werden nun vom Skript gefragt, wie es mit gleichen Dateien unterschiedlichen Datums verfahren soll. Im Zweifelsfalle lassen wir Mergemaster nichts machen und sehen uns die Dateien mit VI einmal selber an.
Nun ist wieder ein Neustart fällig
sbsd0001# reboot oder shutdown -r now
7. FreeBSD Feintuning (Basissystem Sicherheit Teil 2)
Zuerst sichern wir das root-Homeverzeichnis /root ab, so dass nur der Superuser root Zugriff hat und Dateien darin verändern oder löschen kann.
sbsd0001# chmod 700 /root
Nun kommen die Laufwerke dran, die beim Start von FreeBSD ins System eingebunden (gemounted) werden. Dazu editieren wir die Datei /etc/fstab.
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen folgendermassen:
für /home rw,nosuid,nodev
für /tmp rw,nosuid,noexec,nodev
für /usr rw,nodev
für /var rw,nosuid,noexec,nodev
Was bedeutet das?
rw = readwrite, das Dateisystem kann sowohl gelesen als auch beschrieben werden
nosuid = keine Dateien können mit root-Rechten (su) ausgeführt werden
noexec = keine Dateien können ausgeführt werden
nodev = Dateien können keine Device-Treiber sein, d.h. werden unnötige Direktzugriffe auf die Hardware des Systems vermieden
Noch eine Anmerkung dazu: Wenn man nun im Multi-User-Modus ein "make installworld" durchführen möchte, kann dies durch obige Restriktionen zu Fehlern führen. D.h. sollte man vor einem "make installworld" immer das System in den Single-User-Modus fahren.
Nun zu den temporären Speicherplätzen im System. Da haben wir zum einen /var/tmp und zum anderen /tmp. Da wir eigens ein Slice für /tmp eingerichtet haben, ist es sinnvoll, alle temporären Dateien auch dort abzulegen. Deshalb kreieren wir für /var/tmp einen Symlink. Das heisst, Dateien, die von Anwendungen nach /var/tmp geschrieben werden, werden umgeleitet und abgespeichert unter /tmp.
sbsd0001# cd /var
sbsd0001# rm -R tmp
sbsd0001# ln -s /tmp /var/tmp
Bevor wir nun weiterfahren, unser System abzusichern, erachte ich es als sinnvoll, an dieser Stelle die für unseren Server benötigten Programme Samba (das Fileserverprogramm), Webmin 1.121 (Webkonfigurationstool) und isc-dhcp3 (der dhcp-Server) zu installieren und zu konfigurieren.
8. Installation und Konfiguration von Samba 3.0.0 und Webmin 1.121
Zuerst müssen wir die Samba-Suite auf unserem System installieren. Dies machen wir wie oben mit CVSUP über die Ports.
sbsd0001# cd /usr/ports/net/samba-devel
sbsd0001# make install clean
Wenn Samba fertig installiert ist, fahren wir das System schnell mal wieder in den Single-User Modus und zurück, damit die soeben installierten Programme der Samba Suite zur Verfügung stehen.
sbsd0001# shutdown now
Nun stellen wir als erstes FreeBSD so ein, dass Samba beim Starten des Systems mitgestartet wird.
sbsd0001# cd /usr/local/etc/rc.d
sbsd0001# cp samba.sh.sample samba.sh
Mit der Samba-Suite wird auch CUPS, das Common UNIX Printing System, mitinstalliert. Dieses benötigen wir, falls wir Drucker über Samba einrichten und benutzen wollen. Also stellen wir auch hier sicher, dass CUPS beim Aufstarten von FreeBSD gestartet wird.
sbsd0001# cp cups.sh.sample cups.sh
Bevor wir an die Konfiguration der Samba-Konfigurationsdatei /usr/local/etc/smb.conf gehen, legen wir die Benutzer auf dem FreeBSD System an. Die Benutzer, die sich später einmal an den Windows-Clients einloggen sollen, legen wir wiederum mit /stand/sysinstall an.
sbsd0001# /stand/sysinstall
FreeBSD Configuration Menu -> User Management -> User (siehe Kapitel 3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk)
Login ID: u01
UID: 1002 (oder was das System gerade vorgibt)
Group: 1100 (die Gruppe smb-users, die wir bei der Installation angelegt haben)
Password (kein Passwort, da der Benutzer sich sowieso nicht am System anmelden kann)
Full Name: Fritz Muster (oder was weiss ich, dies wird jedoch in Windows auch verwendet, z.b. wenn der Client gelockt ist, wird angezeigt, was hier eingegeben wurde. Also: „Only SAMBA\u01 (Fritz Muster) or an administrator can unlock this computer“)
Member groups:
Home directory: /home/u01 (wird automatisch eingetragen)
Login shell: /sbin/nologin (somit kann sich der User nicht direkt am System anmelden)
Weitere Benutzer die sich an den Windows-Clients anmelden sollen, muss man analog zum obigen anlegen.
Wenn wir alle Benutzer angelegt haben, können wir sysinstall wieder verlassen.
Da wir ja ein „Primary Domain Controller“ PDC machen, müssen, wie in Windows NT, die Computer selbst auch ein Benutzerkonto auf der FreeBSD Maschine haben. Ein sogenannter Machine Account. Diesen legen wir auf der Kommandozeile mit dem Befehl pw an.
sbsd0001# pw useradd wwxp0001$ -g 1200 –c wwxp0001 –d “/nonexistent“ –s „/sbin/nologin”
Pw = Befehl (Programm) pw
Useradd = besagt dem Programm pw, dass es einen neuen Benutzer anlegen soll
wwxp0001$ = der anzulegende Benutzer. D.h. die Windows-Workstation wwxp0001 (dies muss identisch sein, mit dem Computername in Windows). Das $-Zeichen ist notwendig, dass Samba daraus ein Machine Account machen kann.
-g = Gruppe 1200 (smb-workstations Gruppe, die wir bei der Installation angelegt haben)
-c = Kommentar (ich wähle immer den Computername, d.h. wwxp0001)
-d „/nonexistent“ = Das Homedirectory ist „/nonexistent“, d.h. es wird kein Homedirectory angelegt
-s „/sbin/nologin“ = Der Benutzer bekommt keine Login-shell, kann sich also nicht am FreeBSD Server anmelden via Telnet oder SSH.
Nun zur zentralen Konfigurationsdatei /usr/local/etc/smb.conf. Wir legen diese Datei zuerst als leere Datei im Verzeichnis /usr/local/etc an.
sbsd0001# touch /usr/local/etc/smb.conf
Man kann diese Konfigurationsdatei von Hand anpassen, das ist klar. Jedoch stellt die Samba-Suite ein gutes Webtool namens SWAT zur Verfügung, das ich gerne für die Erstkonfiguration des Servers verwende. Durch zwei konzeptionelle Schwächen was die Sicherheit anbelangt, disqualifiziert sich jedoch SWAT als Administrationstool. Zum einen werden Passwörter im Klartext vom Browser zum Server gesendet (klar, das könnte man mit Stunnel noch verschlüsseln) und zum anderen muss man sich zur Administration des Servers via SWAT mit dem root Account (dem UNIX-root Account) und root Passwort anmelden.
Da wir nicht ganz auf SWAT verzichten wollen, installieren wir an dieser Stelle das Web-Konfigurationstool Webmin aus dem Ports, mit dem wir diverse Einstellungen unseres Servers ändern können und unter anderem (via SSL getunnelt) auf SWAT zur Samba-Konfiguration zurückgreifen können.
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make install clean
Nachdem Webmin aus dem Ports installiert wurde, startet automatisch ein Konfigurationsskript, mit dem wir Webmin an unsere Wünsche anpassen können.
Config file directory [/usr/local/etc/webmin]: enter drücken
Log file direcotry [/var/log/webmin]: enter drücken
Full path to perl (default /usr/bin/perl): enter drücken
Web server port (default 10000): enter drücken
Login name (default admin): highfish (oder was weiss ich)
Login password: Beliebiges Passwort, jedoch _NICHT_ das gleiche wie der Unix-Benutzer highfish hat!
Password again: Passwort wiederholen
Use SSL (y/n): y
Nun starten wir Webmin mit dem folgenden Befehl:
sbsd0001# sh /usr/local/etc/rc.d/webmin.sh-dist start
Dadurch wird Webmin gestartet und bleibt bis zum nächsten reboot oder shutdown now aktiv. Danach muss Webmin wieder mit obigem Befehl gestartet werden, Dies damit Webmin nicht immer läuft, sondern bei Bedarf zuerst von der Konsole oder SSH gestartet werden muss.
Nun können wir uns auf einem beliebigen PC mit Internet Explorer oder Netscape bei Webmin einloggen. Wir geben dazu in der Adresszeile des Browsers folgendes ein:
https://192.168.1.5:10000
Darauf zeigt uns der Browser ein Zertifikat, das wir annehmen. Nach der Eingabe von Username und Passwort landen wir im Obermenü Webmin wo wir Webmin an unsere Wünsche anpassen können.
Wir klicken auf „Change Language and Theme“ und wählen bei „Webmin UI language“ -> „Personal Choice“ die Sprache die uns am besten liegt. Mit einem Klick auf „Make Changes“ werden die Änderungen aktiv.
Als nächstes klicken wir auf „Webmin-Benutzer“ und dort auf dem Namen des bei der Installation von Webmin angelegten Benutzers. In meinem Falle war das highfish.
Webmin zeigt uns nun die Webmin-Benutzerzugriffsrechte. Bei den Modulen versehen wir nur Webmin-Benutzer und Windows Dateifreigabe mit einem Häkchen, alle anderen wählen wir nicht und klicken nun auf Speichern. Dadurch wird die Gefahr geringer, dass wir via Webmin versehentlich etwas am System verändern. Danach müssen wir diese Konfiguration noch speichern, in dem wir ganz unten auf speichern klicken.
Nun klicken wir oben links auf „Server“ und wählen dann „Windows-Dateifreigabe“. Darauf wählen wir auf der rechten Seite SWAT. Nun müssen wir uns mit dem Unix-root Account und Passwort anmelden und kommen nun endlich ins SWAT-Konfigurationstool, welches nun auch über SSL getunnelt ist.
Dort klicken wir zuerst auf die Schalfläche „Wizard“ wo wir die Grobkonfiguration von Samba machen können.
Server Type: Domain Controller
Configure WINS As: Server for client use
Expose Home Directories: yes
Danach klicken wir auf den “Commit“-Button.
Nun klicken wir auf die Schaltfläche „Globals“ wo wir die sogenannte [global]-Sektion von Samba konfigurieren können, d.h. alle Parameter, die für alle Benutzer, Drucker und Freigaben gelten sollen. Zuerst klicken wir auf dem „Advanced View“-Button, um alle Einstellungsmöglichkeiten zu sehen. Nun stellen wir folgende Parameter ein.
workgroup = SAMBA (oder wie die NT-Domäne heissen soll)
netbios name = SBSD0001 (oder wie der Name des Servers ist)
server string = analog zu netbios name
passdb backend = tdbsam
logon script = logon.cmd (oder wie auch immer, da komme ich später noch dazu)
logon path = \\%L\profiles\%U (dies wird für die Roaming Profiles benötigt)
logon drive = p: (Das Homedrive des Benutzers wird unter Windows an den Laufwerksbuchstaben p: gebunden)
logon home = \\%L\%U (dies wird benötigt, damit Samba weiss, welches das richtige Homeverzeichnis des Benutzers ist.)
os level = 65 (ich wähle 65 damit der Server gegen etwaige Windows-Server gewinnt was browsing anbelangt)
preferred master = yes (wird zusammen mit domain master benötigt, damit der Samba-Server der Master-Browser wird.)
domain master = yes (siehe Preferred master)
Wenn wir das eingestellt haben, klicken wir oben auf „Commit Changes“
Nun klicken wir auf die Schaltfläche „Shares“, um neue Freigaben zu erzeugen.
Wir geben Netlogon als Sharename ein und klicken auf „Create Share“
Weiter geben wir folgendes ein:
comment = Netlogon (Kommentar, der das Share beschreibt)
path = /usr/data/netlogon (Unix-Verzeichnis, wo Daten in diesem Share abgespeichert werden)
browseable = no (no damit dieses Share in der Netzwerkumgebung nicht erscheint)
Und können mit einem Klick auf „Commit Changes“ unser Netlogon-Share (das übrigens zwingend für unseren Server benötigt wird) erstellen.
Damit die roaming Profiles von Windows auch funktionieren, legen wir ein Share mit dem Namen Profiles an.
Wir geben Profiles als Sharename ein und klicken wieder auf „Create Share“.
Wir klicken auf „Advanced View“ und ändern folgende Parameter
comment = Profiles
path = /usr/data/profiles
read only = no (d.h. ist das Share auch zum Schreiben freigegeben)
create mask = 0600 (beschreibt, mit welchen Rechten eine Datei angelegt wird)
security mask = 0600 (wird benötigt, wenn ein Benutzer durch eine NT Dialogbox die Rechte einer Datei ändern will)
directory mask = 0700 (beschreibt, mit welchen Rechten ein Verzeichnis angelegt wird)
directory security mask = 0700 (wird benötigt, wenn ein Benutzer durch eine NT Dialogbox die Rechte eines Verzeichnisses ändern will)
browseable = no (no damit dieses Share in der Netzwerkumgebung nicht erscheint)
Nun kreieren wir eine Datenaustauschfreigabe, auf die alle Benutzer Lese und Schreibzugriff auf alle Files haben, auch wenn diese Dateien ursprünglich einem anderen Benutzer gehörten.
Wir geben z.b. Highfish als Sharename ein und klicken wieder auf „Create Share“.
Wir klicken auf „Advanced View“ und ändern folgende Parameter
comment = Highfish Group Drive
path = /usr/data/highfish
read only = no
create mask = 0777
directory mask = 0777
Nun erstellen wir noch ein Share mit dem Namen “Data”, auf das nur der Benutzer u01 schreiben darf, jedoch alle lesen dürfen.
Wieder auf „Advanced View“ klicken und folgendes ändern:
comment = Data
path = /usr/data/data
write list = u01 (dieser Benutzer hat Schreibrechte auf das Share)
security mask = 0744
directory security mask = 0755
Weiter müssen wir noch das “homes”-Share, das die Homeverzeichnisse zur Verfügung stellt, ein bisschen anpassen.
create mask = 0700
security mask = 0700
directory mask = 0700
directory security mask = 0700
veto files = /.*/ (Dateien mit einem Punkt vor dem Dateinamen werden unter Windows nicht angezeigt)
Ich habe Parameter, die bei den verschiedenen Shares gleich sind, nicht mehrmals beschrieben, um die Unterschiede der Shares hervorzuheben.
Nun müssen wir die Verzeichnisse noch unter FreeBSD erstellen
sbsd0001# cd /usr/data
sbsd0001# mkdir netlogon profiles highfish data
Nun müssen wir dazu auch noch die Zugriffsrechte auf diese Verzeichnisse setzen.
sbsd0001# chmod 777 netlogon profiles highfish data
Die Verzeichnisse für das [homes] share wurden bereits angelegt, als wir die jeweiligen Benutzer anlegten.
Nachdem wir weiter oben alle Benutzer und Machine Accounts auf der FreeBSD Seite angelegt haben, müssen wir die Benutzer nun noch auf der Samba-Seite anlegen. Dies machen wir mit dem Programm pdbedit.
sbsd0001# pdbedit –a –u root
Dies kreiert den Samba-Account für den Superuser root und fordert uns auf, ein smb-Passwort für root zu setzen. Ich empfehle, hier NICHT das gleiche Passwort zu verwenden, wie wir bei der Installation in Kapitel 4 für root gesetzt haben. Wir benötigen diesen Benutzer nur, wenn wir Computer in die Windows-Domäne aufnehmen wollen. Der Benutzer root sollte sich auch über Samba nicht am Fileserver anmelden.
Nun fügen wir wie oben die anderen Benutzer hinzu. Jedoch nur die Benutzer, die sich später über Windows am Server anmelden sollen, nicht die Machine-Accounts.
sbsd0001# pdbedit –a –u u01
Jetzt fügen wir mit folgendem Befehl die Machine-Accounts hinzu:
sbsd0001# pdbedit –a –m –u wwxp0001
Das $-Zeichen hinter dem eigentlichen Computernamen ist hier nicht mehr nötig.
Jetzt verknüpfen wir die von Samba automatisch angelegten NT-Domänen-Benutzergruppen mit den entsprechenden Benutzergruppen von FreeBSD
sbsd0001# net groupmap add ntgroup=“Domain Admins” UNIXgroup=smb-admin
sbsd0001# net groupmap add ntgroup=“Domain Users” UNIXgroup=smb-users
Nun noch zur Windows-Batchdatei logon.cmd (man kann sie auch logon.bat taufen). Diese Datei wird von Windows ausgeführt, wenn sich ein Benutzer an unserem Server anmeldet. Daher muss diese Datei auch im Windows-Textdateiformat vorliegen und nicht als Unix-Textdatei. Ich empfehle deshalb, diese Datei auf einem Windows-Rechner zu erstellen.
Man kann in mit dieser Datei zum Beispiel Netzlaufwerke automatisch verbinden lassen oder die Zeit mit unserem FreeBSD Server synchronisieren
NET USE * \\SBSD0001\DATA (verbindet das Netzlaufwerk SBSD0001\DATA mit dem nächsten freien Laufwerksbuchstaben unter Windows)
NET TIME \\SBSD0001 /SET /Y(synchronisiert die Zeit mit unserem FreeBSD Server)
9. Installation und Konfiguration des DHCP Servers ISC-DHCP3
Wie schon oben in Kapitel 3 erwähnt, ist der ISC-DHCP3 des Internet Software Consortiums dazu da, TCP/IP Adressen automatisch an Clients zu vergeben. Dabei spielt es keine Rolle, ob diese Clients Windows, Unix oder was weiss ich für Clients sind.
Wichtig 29.06.2004: den ISC-DHCP3 unbedingt auf Version 3.0.1rc14 updaten, da in den älteren Versionen zwei Sicherheitslücken enthalten sind!
Den ISC-DHCP3 installieren wir wieder über die Ports.
sbsd0001# cd /usr/ports/net/isc-dhcp3-server
sbsd0001# make install clean
Wie bei Samba und CUPS müssen wir wieder dafür sorgen, dass der ISC-DHCP3 beim Start des Systems gestartet wird.
sbsd0001# cd /usr/local/etc/rc.d
sbsd0001# cp isc-dhcpd.sh.sample isc-dhcpd.sh
Damit der ISC-DHCP3 auch mit den richtigen Parametern gestartet wird, müssen wir wieder die /etc/rc.conf bearbeiten.
sbsd0001# vi /etc/rc.conf
Dort tragen wir folgendes ein:
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces=""
dhcpd_umask="022"
dhcpd_chuser_enable="YES"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chroot_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"
Nun müssen wir einen Benutzer dhcpd und eine Gruppe dhcpd anlegen. wir machen das wieder über das Tool /stand/sysinstall.
sbsd0001# /stand/sysinstall
FreeBSD Configuration Menu -> User Management -> Group
Group name: dhcpd
GID: 1201
FreeBSD Configuration Menu -> User Management -> User
Login ID: dhcpd
UID: 1010 (egal, einfach das was gerade angezeigt wird)
Group: 1201
Password: keines, da sich Benutzer nicht am System anmelden soll
Full Name: dhcpd
Member groups:
Home directory: /nonexistent
Login shell: /sbin/nologin
Nun müssen wir noch das Konfigurationsfile dhcpd.conf des ISC-DHCP3 an unsere Bedürfnisse anpassen. Da wir jedoch nicht die Original Konfigurationsdatei verändern wollen, kopieren wir diese zuerst.
sbsd0001# cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf
Nun öffnen wir sie mit VI.
sbsd0001# vi /usr/local/etc/dhcpd.conf
In dieser Datei ändern wir folgendes, bzw. fügen folgende Zeilen ein.
option domain-name „highfish.info“;
option domain-name-servers 193.192.227.3 , 195.141.56.5;
Die obigen Linien sind allgemein gültig fürs ganze Netzwerk, und geben den Domain Name bzw. die Domain Name Server vor. 193.192.227.3 und 195.141.56.5 sind die primären bzw. sekundären DNS-Server von Sunrise (www.sunrise.ch), bitte durch die DNS-Server des jeweiligen Providers ersetzen.
default-lease-time 600; (eine per DHCP bezogene Adresse, ist normal 10 Minuten gültig)
max-lease-time 7200;
authoritative; (da unser DHCP-Server der offizielle DHCP-Server in unserem Netz ist)
ddns-update-style none;
log-facility local7;
Die nun folgenden Zeilen beschreiben das Subnetz 192.168.1.0.
subnet 192.168.1.0 netmask 255.255.255.0 { (Subnetz bzw. Subnetzmaske)
range 192.168.1.12 192.168.1.100; (im Bereich 192.168.1.12 – 192.168.1.100 werden IP-Adressen per DHCP verteilt)
option routers 192.168.1.1; (der Router den die Clients für ins Internet nehmen)
option netbios-name-servers 192.168.1.5; (WINS-Server im Netz, logischerweise unsere FreeBSD Samba Maschine)
option ntp-servers 192.168.1.5; (NTP-Server im Netz, ebenfalls der FreeBSD-Rechner)
}
Die nun folgenden Zeilen werden benötigt, wenn man einem bestimmten PC immer die gleiche IP-Adresse per DHCP zuteilen möchte
host wwxp0001 { (Name des Hosts)
hardware Ethernet 00:3C:F0:FF:23:03; (MAC-Adresse der Ethernetkarte, kann z.b. unter Windows mit ipconfig /all ermittelt werden)
fixed-address 192.168.1.10; (die fixe Adresse die der Rechner bekommen soll)
}
Alle anderen Zeilen in der Datei /usr/local/etc/dhcpd.conf müssen mit einem # auskommentiert werden.
Nun können wir mit shutdown now und anschliessendem hochfahren in den Multi-User-Modus den DHCP-Server in betrieb nehmen.
sbsd0001# shutdown now
10. Konfiguration des NTP (Network Time Protocol) Servers von FreeBSD
Der NTP-Server ntpd wird standardmässig mit FreeBSD installiert, wir müssen nur noch sicherstellen dass der NTP Server beim Aufstarten des Systems gestartet wird: Dazu editieren wir wieder die /etc/rc.conf:
sbsd0001# vi /etc/rc.conf
Dann fügen wir folgende Zeile ein und speichern die /etc/rc.conf danach.
xntpd_enable="YES"
Nun müssen wir noch die NTP-Konfigurationsdatei erstellen:
sbsd0001# vi /etc/ntp.conf
Dort fügen wir folgendes ein:
server ntp1.fau.de prefer
server swisstime.ethz.ch
driftfile /var/db/ntp.drift
Ich habe ntp1.fau.de als bevorzugten NTP Server genommen, weil er laut Beschreibung NTP V3 unterstützt, was der Server swisstime.ethz.ch scheinbar nicht tut. Weitere NTP Server sind auf folgenden Sites aufgeführt:
Primäre: http://www.eecis.udel.edu/~mills/ntp/clock1a.html
Sekundäre: http://www.eecis.udel.edu/~mills/ntp/clock2a.html
11. FreeBSD Feintuning (Basissystem Sicherheit Teil 3)
Nachdem wir nun alle unsere benötigten Programme installiert und konfiguriert haben, können wir weiter daran gehen, unser System abzusichern. Dafür verwenden wir das Kommando chflags um Dateien zu schützen, die nie modifiziert werden sollen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
Damit sichern wir ebenfalls unseren Kernel. Jedoch gilt zu beachten, dass wenn wir einen neuen Kernel bauen und installieren, dieses Flag wieder neu setzen müssen.
sbsd0001# chflags schg /boot/kernel
Nun legen wir die Datei /boot.config an, mit Hilfe derer man beim Aufstarten des Systems den Kernel ändern kann. Um dies zu verhindern setzen wir bei dieser Datei ebenfalls das schg Flag.
sbsd0001# touch /boot.config
sbsd0001# chflags schg /boot.config
Nun setzen wir auch andere Zugriffsrechte auf unsere Logdateien unter /var/log
sbsd0001# cd /var/log
sbsd0001# chmod 600 *
Ebenso auf diverse andere Systemverzeichnisse und Systemdateien
sbsd0001# chmod 600 /etc/crontab
sbsd0001# chmod 700 /root
sbsd0001# chmod 700 /home/*
sbsd0001# chmod 650 /etc/rc.*
sbsd0001# chmod 600 /etc/master.passwd
Nun müssen wir noch unseren Remote-Zugang via SSH konfigurieren.
sbsd0001# vi /etc/ssh/sshd_config
Dort fügen wir folgendes ein:
Mit den obigen Einstellungen erlauben wir nur Benutzern in der Gruppe ssh Zugang via SSH. Also müssen wir eine neue Gruppe ssh anlegen und unseren Benutzer highfish (oder eben den Benutzer, den wir ganz zu Beginn bei der Installation angelegt haben) zu dieser Gruppe hinzufügen.
sbsd0001# echo “ssh:*:1010:highfish” >> /etc/group
Um von Windows aus via SSH auf unseren Server zugreifen zu können, benötigen wir einen SSH Client für Windows. Ich nehme dazu immer PuTTY. Es ist ein Freeware Tool und kann z.B. hier heruntergeladen werden: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Nocheinmal editieren wir /etc/rc.conf
sbsd0001# vi /etc/rc.conf
Zuerst die RFC1323 extensions für TCP/IP abschalten
tcp_extensions="NO"
Last but no least schauen wir noch, ob die folgenden beiden Parameter gesetzt sind.
kern_securelevel_enable=“YES“
kern_securelevel=”0“
Nun können wir einmal eine Sicherheitskopie von /etc anlegen, wo die meisten unserer Konfigurationsdateien abgelegt sind.
sbsd0001# tar –cvvpzf /root/etc.tar.gz /etc
sbsd0001# chmod 600 /root/etc.tar.gz
Nun verschlüsseln wir die soeben angelegte Datei mit dem Blowfish-Algorithmus
sbsd0001# openssl enc –blowfish –in /root/etc.tar.gz –out /root/etc.tgz.bf
Das gleiche machen wir mit den Dateien unter /usr/local/etc wo die Konfigurationsdateien und Startupskripte von Samba und Webmin lagern.
sbsd0001# tar –cvvpzf /root/usr.local.etc.tar.gz /usr/local/etc
sbsd0001# chmod 600 /root/usr.local.etc.tar.gz
Auch diese verschlüsseln wir natürlich.
sbsd0001# openssl enc –blowfish –in /root/usr.local.etc.tar.gz –out /root/usr.local.etc.tgz.bf
Zum entschlüsseln von /etc verwenden wir folgenden Befehl:
openssl enc –d –blowfish < /root/etc.tgz.bf | tar –xzf –
Beziehungsweise für /usr/local/etc
openssl enc –d –blowfish < /root/usr.local.etc.tgz.bf | tar –xzf –
Nun können wir die zuerst angelegten *.tar.gz Dateien wieder löschen
sbsd0001# rm /root/etc.tar.gz
sbsd0001# rm /root/usr.local.etc.tar.gz
12. Ein paar Anmerkungen zu Zugriffsrechten unter FreeBSD
Zugriffsrechte
Um die verschiedenen möglichen Zugriffsrechte zu demonstrieren machen wir z.B. unter /root ein ls –la
sbsd0001# cd /root
sbsd0001# ls –la
Nun kommt unter anderem etwas im folgenden Stil heraus
-r-xr-xr-x 1 root wheel 186 Oct 17 18:08 cvs-supfile
Das heisst aufgeschlüsselt folgendes
-r-xr-xr-x = Zugriffsrechte
1 = Anzahl Links
root = Dateibesitzer
wheel = Benutzergruppe
186 = Dateigrösse
Oct 17 18:08 = Zeit wenn die Datei das letzte Mal geändert wurde
cvs-supfile = Name der Datei
Doch nun zu den Zugriffsrechten in diesem Falle –r-xr-xr-x. Diese können wir in vier Teile unterteilen:
- r-x r-x r-x
Dateityp Rechte Dateibesitzer Rechte Benutzergruppe Rechte Dritte
Mögliche Dateitypen:
- = normale Datei
d = Verzeichnis
l = Link
s = Socket)
Mögliche Rechte:
r = read (lesen
w = write (schreiben)
x = execute (ausführen)
Man kann ein solches r-x nun auch im Binärformat als 101 verstehen. Wenn wir dies nun ins Oktalsystem konvertieren kommt 5 dabei heraus (Einfach nachzuvollziehen mit dem Rechner von Windows). Das heisst obiges File cvs-supfile hat im Oktalsystem die Rechte 555 (binär: 101101101). Für unsere drei Rechte read, write und execute gilt daher folgendes:
Read: binär 100 -> Oktal 4
Write binär 010 -> Oktal 2
Execute binär 001 -> Oktal 1
Natürlich können wir dies nun auch kombinieren:
Oktal für rwx: 4 + 2 + 1 = 7
Oktal für rw-: 4 + 2 + 0 = 6
Oktal für r-w: 4 + 0 + 1 = 5
Oktal für ---: 0 + 0 + 0 = 0
Mit diesen Oktalwerten operieren wir auch, wenn wir die Zugriffsrechte einer Datei ändern wollen. Dafür nehmen wir das Kommando chmod. Wenn wir jetzt folgendes eingeben: chmod 755 cvs-supfile hat die Datei nachher die Rechte –rwxr-xr-x.
Hier ein paar Beispiele über gängige Rechte, die mit dem Befehl chmod angewendet werden können:
Dateityp Rechte Dateibesitzer Rechte Benutzergruppe Rechte Dritte
chmod 777 = rwx rwx rwx
chmod 755 rwx r-x r-x
chmod 744 rwx r-- r—
chmod 650 rw r-x ---
chmod 600 rw --- ---
Datei- und Verzeichnisflags
Das chflags Kommando ist sehr nützlich, wenn wir die Sicherheit unseres Systems optimieren. Mit diesem Kommando kann man diverse Restriktionen auf eine Datei setzen, übergeordnet den eigentlichen Zugriffsrechten.
Sappnd – setzt das system append-only flag (nur root)
Es kann nur gesetzt oder entfernt werden von root. In Dateien, die mit diesem Flag ausgeschmückt sind, kann nur hinzugefügt werden. Jedoch können sie weder gelöscht noch sonstwie editiert werden.
Schg – setzt das system unveränderlich flag (nur root)
Auch das kann nur von root gesetzt oder entfernt werden. Solche Dateien können weder geändert, noch verschoben oder gelöscht werden. Der Kernel verhindert, dass diese Dateien in irgend einer Art verändert werden können.
Um diese Flags von einer Datei zu entfernen müssen wir nur ein „no“ vor das Flag setzen. Also nosappnd bzw. noschg. Jedoch kann ein solches Flag nicht entfernt werden, wenn das System mit securelevel 1 oder höher arbeitet.
13. Konfiguration von Windows XP Professional als Domänen-Mitglied
Windows XP ist insofern ein Spezialfall, da wir noch einen Wert in der Registry ändern müssen, damit wir uns an unserem FreeBSD Server anmelden können.
Also Start – Ausführen klicken. Dann bei Öffnen regedit eingeben für den Registrierungseditor. Im Editor mit Ctrl-F nach dem Schlüssel requiresignorseal suchen. Danach den Wert von 1 auf 0 setzen.
Falls wir die Zeit unserer Clients mit dem Server abgleichen wollen, müssen wir in der lokalen Sicherheitsrichtlinie auch noch eine Änderung machen. Diese ist zu finden unter Systemsteuerung – Verwaltung – Lokale Sicherheitsrichtlinie – Lokale Richtlinien – Zuweisen von Benutzerrechten – Ändern der Systemzeit
Dort wählen wir Benutzer oder Gruppe hinzufügen und klicken dann auf erweitert. Nun ein Klick auf Objekttypen und ein Hacken bei Gruppen setzen. Danach auf Ok und auf „Jetzt suchen“ klicken. Danach erscheint eine Login-Maske, wo wir uns mit einem Benutzerkonto der Domäne z.B. u01 (oder was auch immer) anmelden müssen. Danach wählen wir unten die Gruppe Domain-Users aus und bestätigen alles mit OK. Nun wird bei jedem Login am Windows XP Client die Uhrzeit mit dem Server synchronisiert, wenn wir ein entsprechendes Logon-Skript geschrieben haben.
14. Maintenance des Servers
Mit der zunehmenden Laufzeit des Servers muss dieser auch unterhalten werden, so müssen beispielsweise Security Patches eingespielt werden, neue Versionen von FreeBSD erscheinen oder neue Versionen der verwendeten Ports sind verfügbar und man möchte seinen Server daher updaten.
14.1 Vorbereitungen für das Update
Wenn man nicht nur das FreeBSD Basissystem updaten möchte, sondern auch noch gleich die neuesten Programmversionen der verwendeten Programme Samba, Webmin und ISC-DHCP einspielen möchte, empfehle ich die jeweiligen Programme zuerst über die Ports zu deinstallieren. Hierbei ist es vorteilhaft dass man die Konfigurationsdateien dieser Programme sicherheitshalber nach /root kopiert, man kann ja nie wissen…
Beispielsweise smb.conf
sbsd0001# cp /usr/local/etc/smb.conf /root/smb.conf
Dies erstellt eine Kopie der smb.conf im Verzeichnis /root.
sbsd0001# cd /usr/ports/net/samba-devel
sbsd0001# make deinstall clean
Dies deinstalliert das in der ursprünglichen Version dieses Howtos verwendete Samba 3.0.0. Neuere Versionen von Samba 3.0.X sind neu unter /usr/ports/net/samba3 zu finden
sbsd0001# cd /usr/ports/net/isc-dhcp3
sbsd0001# make deinstall clean
Deinstalliert den im ursprünglichen Howto verwendeten ISC-DHCP3. Der neue ist nun unter /usr/ports/net/isc-dhcp3-server zu finden.
Ebenso für webmin
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make deinstall clean
14.2 Updaten des FreeBSD Basissystems
Eigentlich wird dies bereits mehr oder weniger im Kapitel 6. „FreeBSD up to date halten“ beschrieben. Da man sich daran jedoch ganz dolle die Finger verbrennen kann und unter Umständen seinen Server total neu aufsetzen muss beschreibe ich es hier noch einmal.
Zuerst müssen Sicherheitseinstellungen wieder rückgängig gemacht werden, um das System updaten zu können.
Das heisst zuerst ist wieder die /etc/fstab dran.
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen folgendermassen:
für /home rw
für /tmp rw
für /usr rw
für /var rw
Ebenfalls rückgäng machen müssen wir das Setzen von ein paar schg-Flags.
sbsd0001# chflags noschg /bin/*
sbsd0001# chflags noschg /sbin/*
sbsd0001# chflags noschg /usr/sbin/*
sbsd0001# chflags noschg /boot/kernel
Nun wieder das cvs-supfile editieren mit VI.
sbsd0001# vi /root/cvs-supfile
Dort ist vor allem folgende Zeile wichtig.
src-all tag=RELENG_5_1
Denn diese Zeile besagt, auf welche Version wir updaten wollen, bzw. für welche Version Sicherheitspatches eingespielt werden müssen. Falls man noch FreeBSD 5.1 installiert hat, würde ich hier mal raten, ganz auf das aktuelle FreeBSD 5.2.1 umzustellen. Also
src-all tag=RELENG_5_2
Wichtig: Bei Updates auf unterschiedliche Versionen (also hier 5.1 und 5.2.1) unbedingt die Release Notes und den Early Adopter’s Guide auf der FreeBSD Homepage www.freebsd.org lesen! Sonst kann man beim Upgrade deftig ins Messer laufen!
Nachdem wir /root/cvs-supfile angepasst haben, lassen wir wieder CVSUP durchlaufen.
sbsd0001# /usr/local/bin/cvsup /root/cvs-supfile
Nun kommt wieder der „buildworld“.
sbsd0001# cd /usr/src
sbsd0001# make buildworld
Nun wieder einen Kernel bauen. Falls man nur Sicherheitspatches eingespielt hat, oder man sicher ist, dass man bei einem Versionswechel nichts Neues im Kernel haben will, kann man wieder die alte MYKERNEL (siehe Kapitel 6) Datei kompilieren.
sbsd0001# cd /usr/src
sbsd0001# make buildkernel KERNCONF=MYKERNEL
Neugebackenen Kernel installieren.
sbsd0001# make installkernel KERNCONF=MYKERNEL
Neustarten.
sbsd0001# reboot oder shutdown -r now
System in den Single-User-Modus fahren.
sbsd0001# shutdown now
Nun müssen wir noch das root-Passwort eingeben und wir sind im Single-Mode.
Mergemaster durchführen.
sbsd0001# mergemaster -p
Kompilierte Binaries installieren:
sbsd0001# cd /usr/src
sbsd0001# make installworld
Mergemaster Teil 2 durchführen.
sbsd0001# mergemaster
Nun ist wieder ein Neustart fällig.
sbsd0001# reboot oder shutdown -r now
Somit ist das Basissystem inkl. Ports wieder up to date und wir können die Securityeinstellungen nach dem Neustart wieder vornehmen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
sbsd0001# chflags schg /boot/kernel
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen wieder wie folgt:
für /home rw,nosuid,nodev
für /tmp rw,nosuid,noexec,nodev
für /usr rw,nodev
für /var rw,nosuid,noexec,nodev
14.3 Updaten der Programme Samba, Webmin und ISC-DHCP3
Eigentlich ist das Updaten der Programme simpel. Nachdem Updaten des Basissystems inkl Ports einfach die Programme wieder aus den Ports einspielen.
Samba 3.0.X
sbsd0001# cd /usr/ports/net/samba3
sbsd0001# make install clean
ISC-DHCP3
sbsd0001# cd /usr/ports/net/isc-dhcp3-server
sbsd0001# make install clean
Webmin
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make install clean
Jedoch gilt zu beachten, dass die Programme mit neuen Versionen auch neue Funktionen enthalten können bzw. dass alte nicht mehr vorhanden sind. Somit läuft unser Fileserver nach dem Upgrade auch evtl. nicht mehr. Leider würde es den Umfang dieses Howtos sprengen, immer wieder auf neue Programmversionen einzugehen.
Ich kann jedoch sagen, dass ich ein Upgrade von FreeBSD 5.1 auf FreeBSD 5.2.1 und den neuesten Versionen von Samba, Webmin und dem ISC-DHCP3 ohne unlösbare Probleme überstanden habe. Vor allem habe ich festgestellt, dass die Startupskripte der verschiedenen Programme gerne geändert werden. So musste ich beispielsweise die Datei /usr/local/etc/rc.d/samba.sh nochmals neu erstellen durch überschreiben mit der Datei /usr/local/etc/rc.d/samba.sh.sample. Weiter musste ich das Setupskript von Webmin nochmals ausführen und neuerdings startet sich der Webmin 1.150 mit /usr/local/etc/webmin/start bzw. stoppt sich mit /usr/local/etc/webmin/stop und nicht mehr über das webmin-Skript in /usr/local/etc/rc.d.
Wichtig ist zum Abschluss des Updates, dass wir nochmals die schg-Flags setzen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
sbsd0001# chflags schg /boot/kernel
15. Schlusswort
Wenn ihr bis hier gelesen habt, erstmal Gratulation! Schliesslich besteht mein Howto aus etwas mehr als 25 A4-Seiten. Ich hoffe, ihr hab euch nun einen FreeBSD Fileserver konfigurieren können. Falls ihr Konfigurationsfehler, Unzulänglichkeiten oder auch Rechtschreibfehler findet, bitte ich euch, die hier mitzuteilen, damit ich meine Anleitung anpassen kann.
Ich versuche auch, das Howto zu erweitern, so habe ich vor, noch etwas über die Konfiguration von CUPS und evtl. auch etwas über FreeBSD, Samba und OpenLDAP zu schreiben.
-Highfish-
1. Intro
2. Gedanken zu Hardware und Software
3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk
4. Installation von FreeBSD 5.1
5. FreeBSD Feintuning (Basissystem Sicherheit Teil 1)
6. FreeBSD up to date halten
7. FreeBSD Feintuning (Basissystem Sicherheit Teil 2)
8. Installation und Konfiguration von Samba 3.0.0 und Webmin 1.121
9. Installation und Konfiguration des DHCP Servers ISC-DHCP3
10. Konfiguration des NTP (Network Time Protocol) Servers von FreeBSD
11. FreeBSD Feintuning (Basissystem Sicherheit Teil 3)
12. Ein paar Anmerkungen zu Zugriffsrechten unter FreeBSD
13. Konfiguration von Windows XP Professional als Domänen-Mitglied
14. Maintenance des Servers
15. Schlusswort
1. Intro
Als ich das erste Mal FreeBSD und Samba installierte, suchte ich nach einer Step-by-Step Anleitung, wie man FreeBSD und Samba richtig installiert und konfiguriert. Ich fand zwar vieles im Web, das meiste war mir jedoch zu sehr auf Linux und Samba bezogen oder hatte mir nicht genug Tiefgang. Zudem war vieles auch noch auf Englisch. Ich hoffe mit diesem Howto diese Lücke ein wenig schliessen zu können.
Dieses Howto soll beschreiben, wie man einen standalone Server mit FreeBSD, Samba als PDC, DHCP und NTP für ein kleines Netzwerk installiert und konfiguriert
An wen richtet sich dieses Howto? Prinzipiell an alle, die sich gerne einmal mit FreeBSD beschäftigen möchten. Auch wenn man keine oder wenig Vorkenntnisse hat, sollte man mit diesem Howto einen Fileserver konfigurieren können. Jedoch sollte man auf jeden Fall wissen, welche Hardware (und zwar im Detail) im Rechner drinsteckt auf dem man FreeBSD installieren will. Ebenso muss man wissen, was eine Domäne ist, bzw. wie man ein Windows-Computer einer Domäne hinzufügen kann. Ein wenig Englischkenntnisse muss man schon besitzen und etwas geübt im Tastaturschreiben sollte man auch sein, weil man relativ viel tippen muss.
Jedoch muss ich sagen, dass dies hier nicht "mein" Howto ist, vielmehr habe ich diverse FreeBSD-Literatur genommen und ins Deutsche übersetzt. Darum hier auch gerade die Quellenangabe mit den Originalartikeln, auf die dieses Howto aufbaut:
FreeBSD Handbuch des FreeBSD German Documentation Project
http://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/index.html
Die englische Version des FreeBSD Handbuchs des FreeBSD Documentation Project
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html
Frequently Asked Questions for FreeBSD 2.X, 3.X and 4.X des FreeBSD Documentation Project
http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/index.html
FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi
Building a Fairly secure FreeBSD Mail server von soup4you2
http://screamingelectron.org/phpBB2/viewtopic.php?t=774
Using Samba, 2ed, O'Reilly & Associates
http://samba.epfl.ch/samba/docs/using_samba/toc.html
The Samba-HOWTO-Collection
http://samba.epfl.ch/samba/docs/man/Samba-HOWTO-Collection.html
IPFW und NATD von asg, marzl und anderen
http://www.bsdforen.de/forums/showthread.php?threadid=148
Die Dokumentation welche im Samba Web Administration Tool (SWAT) eingebaut ist
Das Buch: FreeBSD unleashed von Michael Urban / Brian Tiemann
Ich hoffe ich habe niemanden vergessen und wünsche viel Spass beim Lesen.
2. Gedanken zu Hardware und Software
2.1 Hardware
Die Prozessorleistung ist für einen Fileserver nicht das wichtigste, so tut es auch ein ausrangierter Pentium II für den Server. Wichtiger ist der Arbeitspeicher, hier sollten es mindestens 128MB sein. So richtig Spass machen tut es IMHO ab 256MB aufwärts. Vor allem interessant wird’s bei den Festplatten. Hier empfehle ich unbedingt ein RAID – Array zu bauen, schliesslich sollen die Daten auf dem Fileserver ja auch sicherer lagern als auf den Windows-Clients. Darum macht hier eine einzelne Festplatte wenig Sinn. RAID 0 (Striping) können wir auch gleich vergessen, da dort, wenn eine Platte abraucht, auch die Daten auf den anderen verloren sind. Also ist mindestens RAID 1 (Mirroring) angesagt. Dafür tut’s ein billiger RAID-Controller z.B. mit Highpoint 370 Chipsatz. RAID 5 wäre natürlich die Krönung nur kostet ein RAID 5 IDE-Controller schon eine Stange Geld, von SCSI ganz zu schweigen. Die Grafikkarte ist recht nebensächlich, da der Server ohnehin nur über die Kommandozeile eingerichtet wird. Ein Diskettenlaufwerk ist nicht zwingend notwendig, aber ein CD-ROM (alternativ kann man FreeBSD auch übers Netz installieren, wozu aber wieder ein Diskettenlaufwerk nötig ist, aber das beschreibe ich hier im Howto nicht) sollte der Server schon haben. Wichtig für dieses Howto ist auch eine gute Internetverbindung am besten ADSL über einen Router.
2.2 Software
Warum FreeBSD und nicht Net-/ OpenBSD oder Linux?
Bei Linux kann ich mit dem Distributionswirrwarr nicht viel anfangen und über NetBSD kann ich nichts sagen, weil ich es selber nie ausprobiert habe. OpenBSD wäre wohl noch eine Spur sicherer als FreeBSD, aber ich habe anno dazumal unter OpenBSD 2.5 versucht, Samba aus den Quellen zu kompilieren, mit sagen wir mal, sehr bescheidenem Erfolg. Für FreeBSD spricht, dass es IMHO am besten von den drei BSD’s auf die Intel x86 Plattform optimiert (Hardwareunterstützung) ist, und dass die Ports immer sehr aktuell sind.
Obwohl FreeBSD 5.1 auf der FreeBSD Homepage als New Technology Release gekennzeichnet ist, habe ich für mein Howto FreeBSD 5.1 verwendet, da es das neue UFS2 Dateisystem bietet. Dies ist in meinen Augen wichtig, da wenn man später auf neuere Versionen von FreeBSD updaten möchte, man seine Daten schon auf dem neuen UFS2 Dateisystem hat und nicht auf dem UFS Dateisystem von FreeBSD 4.X. Schliesslich hat nicht jedermann genügend Plattenspeicher um seine gesamten Daten vom Server zu kopieren, nur weil man die Platten im Server mit einem neuen Dateisystem versehen will.
Die weitere Software, die ich hier im Howto verwende, ist Samba 3.0.0, Webmin 1.121 und der isc-dhcp3 Server aus den FreeBSD Ports sowie Software, die als Abhängigkeiten der oben genannten drei Ports mitinstalliert wird.
3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk
Endziel: der Server soll als "Primary Domain Controller" für Windows XP, Windows 2000 und Windows NT dienen und somit auch für die Namensauflösung im Windows-Netz (WINS) zuständig sein.
Weiter soll er IP-Adressen an die Clients vergeben können (DHCP) und den Clients seine Zeiteinstellungen weitergeben, hierfür bezieht der Server seine Zeit aus dem Internet (NTP).
Namensgebung im Netzwerk
Einheitliche Namen scheinen mir wichtig in einem Netzwerk, hier eine Idee wie diese Namensgestaltung aussehen könnte:
sbsd0001 = S (Server) bsd (Betriebssystem) 0001 (Nummer des Servers)
wwxp0001 = W (Workstation) wxp (Windows XP) 0001 (Nummer der Workstation
phpq0001 = P (Printer) hpq (Hewlett-Packard) 0001 (Nummer des Printers)
u01 = U (User) 01 (Benutzer 01)
Sonderzeichen wie Trennstriche, Underscores usw. würde ich nicht verwenden.
4. Installation von FreeBSD 5.1
Ich installiere FreeBSD am liebsten von CD. Daher habe ich mir auch das 5.1 ISO-File von einem FreeBSD - Mirror gezogen. z.B. von ftp://ftp.de.FreeBSD.org/pub/FreeBSD/. Die ganze Mirrorliste ist zu finden unter: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html
4.1. Das ISO auf eine CD brennen, CD rein und let’s go!
4.2. sysinstall Main Menu -> Custom wählen
4.3. Choose Custom Installation Options -> Options -> Newfs Args wählen (mit Space anwählen) Parameter ändern auf -b 4096 -f 2048 Begründung: es macht zumindest mir keine Freude, wenn die MP3 - Sammlung auf dem Server doppelt so viel Speicher wie auf dem Windows-Client benötigt, nun das Menü wieder verlassen.
4.4 Choose Custom Installation Options -> Partition: Hier ist zu beachten, dass man bei mehreren Festplatten die richtige Platte partitioniert!
ad0 steht zum Beispiel für die Master IDE-Festplatte am primären IDE-Kontroller. sd0 ist demnach die erste SCSI-Platte. Speziell bei IDE Raid-Arrays mit den verbreiteten Kontrollern von Promise und Highpoint ist zu beachten, dass FreeBSD sowohl die einzelnen im Raid vorhandenen Platten als auch das Array als solches erkennt. Ein solches IDE-Raid hat die Bezeichnung ar0 und nur dieses ar0 sollte partitioniert werden. Wieder anders sieht es bei "richtigen" Hardware-Raid-Controllern (z.B der Promise Supertrak SX6000 oder SCSI-Raid-Controller von ICP-Vortex) aus, diese Arrays erscheinen dann als eigenständige Platte z.B als pst0 für den Promise Supertrak SX6000.
Allfällige vorhandene Partitionen löschen und mit Druck auf "A" die ganze Festplatte für FreeBSD verwenden. Partition nochmals anwählen und mit "S" bootfähig machen. "Q" zum verlassen des FDISK Partition Editors. Wenn wir gefragt werden nach dem Boot Manager, wählen wir BootMgr Install the FreeBSD Boot Manager.
4.5 Choose Custom Installation Options -> Label: wir erstellen durch drücken von "C" neue Slices. Dann werden wir nach der Grösse gefragt, wo wir 128M für 128MB eingeben. Dann wählen wir File System und zum Schluss geben wir den Mountpoint an. In diesem Falle ist der Mountpoint "/". Fertig ist das Root-Slice.
Analog erstellen wir folgende Slices
Regeln zur Grösse des Swapspeichers: Früher (als Rechner 4 MB RAM hatten) sagte man das Doppelte des Hauptspeichers, heute ist dies jedoch anders und es macht bei 512MB RAM nicht viel Sinn 1GB Swapspeicher zu kreieren. Bis 256MB RAM ist 256MB Swap auf jeden Fall eine gute Grösse.
256M swap kein
256M filesystem /var
256M filesystem /tmp
2048M filesystem /usr
Rest filesystem /home
Den FreeBSD Disklabel Editor wieder mit "Q" verlassen.
4.6 Choose Custom Installation Options -> Distributions -> Custom: Wir wählen base, crypto, man und ports Begründung: diese 4 Pakete reichen vollkommen aus für unseren Fileserver.
4.7 Choose Custom Installation Options -> Media: CD/DVD wählen.
4.8 Choose Custom Installation Options -> Commit wählen damit FreeBSD installiert wird.
4.9 Nachdem die Installation abgeschlossen wurde, werden wir gefragt, ob wir nochmals das General Confirmation Menü aufrufen wollen für letzte Änderungen, dort wählen wir "NO". Nun sind wir wieder im Choose Custom Installation Options Menü, das wir mit anwählen von Cancel verlassen und so wieder im sysinstall Main Menü sind.
4.10 sysinstall Main Menu -> Configure wählen
4.11 FreeBSD Configuration Menu -> Root Password. Begründung: Passwort des Superusers (Root) setzen. Das Passwort sollte nicht zu einfach sein, aber auch nicht so schwierig, dass man es vergisst.
4.12 FreeBSD Configuration Menu -> User Management -> User: Begründung, wir legen einen Unix Benutzer an, der später Root werden darf.
Login ID: highfish (na ja das kann irgendwas sein, highfish ist nur ein Beispiel)
UID: 1001
Group:
Password (irgendwas, das man nicht vergisst)
Full Name: Highfish (oder irgendwas anderes)
Member groups:
Home directory: /home/highfish
Login shell: /bin/sh
4.13 FreeBSD Configuration Menu -> User Management -> Group: Begründung, wir legen gerade noch ein paar Benutzergruppen an, die wir später wieder brauchen werden.
Group name: smb-users
GID: 1100
Group name: smb-admin
GID: 1150
und
Group name: smb-workstations
GID: 1200
4.14 FreeBSD Configuration Menu -> Time Zone. Wenn die Rechneruhr nach lokaler zeit läuft, wählen wir zuerst "NO". Dann wählen wir Europe und das Land in dem wir wohnen. Dann wir die jeweilige Zeitzonenbezeichnung angezeigt. CET zum Beispiel für Mitteleuropa.
4.15 FreeBSD Configuration Menu -> Networking -> Interfaces. Dort die Netzwerkkarte wählen. In meinem Falle ist dies rl0 für eine Realtek 8139 PCI Netzwerkkarte. IPv6 configuration -> "NO", DHCP configuration -> "NO". Damit können wir nun die Einstellungen der Netzwerkkarte manuell vornehmen.
Host: sbsd0001 (oder was auch immer)
Domain: highfish.info (oder was auch immer)
IPv4 Gateway: IP-Adresse des Internet-Gateways (DSL-Router)
Name Server: IP-Adresse des Name Servers des Internet Providers
IPv4 Address: IP-Adresse des Fileservers. Bei mir z.b. 192.168.1.5
Netmask: 255.255.255.0 (kommt aber automatisch)
Dann wird man gefragt, ob man das Interface rl0 aufstarten will, wo wir "YES" wählen.
4.16 FreeBSD Configuration Menu -> Networking -> TCP Extensions deaktivieren mit Druck auf Space.
4.17 FreeBSD Configuration Menu -> Startup -> usbd deaktivieren, wenn man wie ich keine USB – Geräte verwendet.
4.18 Das FreeBSD Configuration Menu verlassen
4.19 sysinstall Main Menu -> Keymap: das passende Keyboard-Layout installieren, bei mir wäre das Swiss German ISO
4.20 Nun die Installation durch verlassen des sysinstall Main Menu abschliessen. D.h. Exit install anwählen und alle Floppies, CD-ROMS usw. aus den Laufwerken nehmen und zusehen wie der PC neu startet.
5. FreeBSD Feintuning (Basissystem Sicherheit Teil 1)
Vormerkung: In diesem Abschnitt müssen diverse Konfigurationsdateien von FreeBSD an unsere Bedürfnisse angepasst werden. Ich benutze dazu den Editor VI. Dieser Editor ist standardmässig bei FreeBSD dabei und wenn man sich an seine Bedienung gewöhnt hat, kommt man schnell damit voran. In der Manpage des VI steht geschrieben, wie man ihn bedient. http://www.freebsd.org/cgi/man.cgi?...ion=0&manpath=FreeBSD+5.1-RELEASE&format=html
Nun Ist FreeBSD 5.1 also auf der Festplatte installiert und wir können uns ans Feintuning des Systems machen. Dafür loggen wir uns als Superuser (root) ins System ein. sbsd0001# steht für den Kommandozeilenpromt unseres BSD-Systems
sbsd0001# sockstat -4
Damit werden gestartete Daemons angezeigt und auf welchen Ports sie laufen
Wir sehen, dass sendmail defaultmässig läuft auf den Ports 25 und 587. Da wir das nicht brauchen stellen wir das gleich mal ab
sbsd0001# vi /etc/mail/sendmail.cf
So können wir das sendmail Konfigurationsfile editieren. Wir suchen im File nach der Zeile:
O DaemonPortOptions=Port=587, Name=MSA, M=E
Dort setzen wir ein Kommentarzeichen (#) davor um diese Zeile auszukommentieren.
Dann das File abspeichern und folgendes Kommando ausführen:
sbsd0001# killall –HUP sendmail
Somit wird der Sendmailprozess neu gestartet und liest seine Konfigurationsdatei neu ein. Wenn wir jetzt wieder sockstat -4 eingeben, ist der sendmail an Port 587 verschwunden.
Nun noch sendmail auf port 25 abstellen:
sbsd0001# vi /etc/rc.conf
In der nun geöffneten Konfigurationsdatei (die wir übrigens noch ein paar mal editieren werden) ergänzen wir folgendes:
sendmail_enable="NO"
Somit ist sendmail zwar nicht ganz abgestellt, aber es ist nicht mehr von aussen zugänglich, sondern nur noch auf unserem System am localhost (127.0.0.1:25).
sbsd0001# shutdown now
Dies fährt FreeBSD in den Single-User Modus um so die Startup-Dateien neu einzulesen. Um wieder aus dem Single-User Modus zu kommen, Enter drücken und exit eingeben.
Falls der Port 111 in unserem Output von sockstat -4 erscheint (was allerdings nicht der Fall ist, wenn man meine Anleitung bis hier Schritt für Schritt befolgt hat), haben wir Portmap auf unserem System laufen, was nur für NFS (und somit für unseren Samba Server überflüssig) notwendig ist. Also folgendes eintragen in /etc/rc.conf
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
Weiter ist noch Port 514 für syslogd offen, den schliessen wir aber nicht vollständig, sondern tragen in /etc/rc.conf folgendes ein:
sbsd0001# vi /etc/rc.conf
syslogd_enable="YES"
syslogd_flags="-ss"
Nach einem weiteren
sbsd0001# shutdown now
Und einem weiteren sockstat -4 ist nun auch der syslogd Port nicht mehr ersichtlich.
Last but not least setzen wir noch einen weiteren Parameter in /etc/rc.conf:
clear_tmp_enable="YES"
Dieser Parameter leert das Verzeichnis /tmp beim Aufstarten, IMHO eine gute Idee.
Wenn wir hier sowieso die Datei /etc/rc.conf editieren, schauen wir auch, ob die USB Unterstützung auch wirklich abgeschaltet ist (natürlich nur, wenn wir keine USB Geräte verwenden). Dafür checken wir, ob folgende Zeile drinsteht.
usbd_enable="NO"
Darunter darf keine weitere Zeile mit usbd_enable=“YES“ stehen, falls diese steht, diese löschen.
So nun raus aus /etc/rc.conf und rein in /etc/login.conf mit folgendem Kommando:
sbsd0001# vi /etc/login.conf
Dort ändern wir : passwd_format=md5:\ in
: passwd_format=blf:\ (beachten, dass in der Datei zwischen dem ersten Doppelpunkt und dem p kein Leerschlag sein darf!)
Damit der Blowfish-Verschlüsselungsalgorithmus und nicht der md5 Algorithmus verwendet wird.
Weiter bauen wir folgende Zeile ein (am besten unter der Zeile :ignoretime@:\ ).
:idletime=30:\
Damit werden inaktive User nach 30 Minuten wieder ausgeloggt.
Dann das File /etc/login.conf abspeichern und verlassen und Folgendes eingeben um die Login-Datenbank neu zu bauen:
sbsd0001# cap_mkdb /etc/login.conf
Danach müssen die Passwörter der Benutzer an den neuen Algorithmus angepasst werden. D.h. für den Benutzer highfish geben wir folgendes ein um neue Passwörter zu setzen.
sbsd0001# passwd highfish
Und für den Benutzer root
sbsd0001# passwd
Ob es funktioniert hat, überprüfen wir hiermit:
sbsd0001# more /etc/master.passwd
Nun sollten bei den beiden Usern die Passwörter mit $2 beginnen.
Nun müssen wir noch das adduser Tool an den neuen Blowfish-Algorithmus anpassen.
sbsd0001# vi /etc/auth.conf
Dort die #crypt_default = md5 des Linie ändern auf:
crypt_default=blf
Jetzt passen wir das optische Erscheinungsbild unserer Loginprozedur ein wenig an, in dem wir eine neue /etc/motd gestalten. Diese Message of the day (motd) wird angezeigt, nachdem ein Benutzer sich erfolgreich eingeloggt hat. Dort kann eigentlich stehen was will, es soll sich ja eh niemand auf dem System einloggen, ausser der Systemadministrator. Trotzdem kann man die motd anpassen durch editieren der Datei /etc/motd.
sbsd0001# vi /etc/motd
Dort könnte dann so etwas stehen:
Code:
* * * * * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * * * * *
THIS SYSTEM IS RESTRICTED TO AUTHORIZED USERS FOR AUTHORIZED USE ONLY.
UNAUTHORIZED ACCESS IS STRICTLY PROHIBITED.
IF NOT AUTHORIZED TO ACCESS THIS SYSTEM, DISCONNECT IMMEDIATELY!
* * * * * * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * * * * *
Nun die Copyright Information noch entfernen:
sbsd0001# touch /etc/COPYRIGHT
Viel interessanter finde ich den Text zu ändern, der vor dem login:-Prompt kommt.
Dazu muss man /etc/gettytab editieren.
sbsd0001# vi /etc/gettytab
Dort die Linie suchen die mit
:cb:ce:ck:lc:
beginnt. Dort zwischen dem ersten r und dem letzen Doppelpunkt dieser Zeile kann man reinschreiben was man will, als Pre-Login Message. Da mir ein schlichtes login: am besten gefällt, lösche ich alles zwischen dem r und dem oben besagten Doppelpunkt.
Nach diesen Änderungen ist wieder einmal kurz die Datei /etc/rc.conf dran:
sbsd0001# vi /etc/rc.conf
Dort die Linie
update_motd="NO"
ergänzen um zu vermeiden, dass FreeBSD selbständig Version und Kernel Information zu der /etc/motd packt. Damit diese Änderung wirksam wird, muss dass System neu gestartet werden. Zuerst würde ich jedoch noch auf einer weiteren Konsole überprüfen, ob die neue Loginprozedur funktioniert indem man sich nochmals einloggt.
sbsd0001# reboot
Oder:
sbsd0001# shutdown -r now
So nun weiter mit unserem Sicherheitsfeintuning. Prinzipiell sollte sich der User root gar NIE direkt einloggen. Dies stellen wir durch Modifikation von /etc/ttys sicher.
sbsd0001# vi /etc/ttys
In dieser Datei suchen wir mehrere Zeilen, die mit ttyv0 bis ttyv8 beginnen. In diesen Zeilen ersetzen wir das Wörtchen "secure" durch "insecure", damit sich root nicht mehr einloggen kann. Man kann bei diesen Linien auch "on" mit "off" ersetzen, um das jeweilige Terminal ganz zu deaktivieren, aber IMHO tuts der Wechsel auf "insecure" vollkommen
Nun suchen wir die Linie (ein kleiner Hint: die Linie steht gerade über den anderen)
console none unknown off secure
Und löschen das Wort "secure" vollständig. Somit wird verhindert, dass jemand das System in den Single-User Modus fahren kann und dann ohne Eingabe des root-Passworts am System arbeiten kann.
Weiter ändern wir auch bei den seriellen Terminals ttyd0 bis ttyd3 "secure" auf "insecure". Das hat zwar an sich kein Einfluss, da diese seriellen Terminals sowieso deaktiviert sind, aber der Vollständigkeit ändern wir das hier trotzdem. Nun speichern wir /etc/ttys und bearbeiten /etc/group
sbsd0001# vi /etc/group
Dort ergänzen wir die Linie wheel:*:0:root folgendermassen:
wheel:*:0:root,highfish
Wobei highfish der Benutzer ist, den wir ganz am Anfang dieser Installation im sysinstall Tool angelegt haben, sollte der Benutzer nicht highfish heissen, dementsprechend hier auch anpassen. Dies ist IMMINENT wichtig, da wir ohne diesen Zusatz nicht mehr root-Benutzer werden können. Was aber unabdingbar für das weitere Gelingen unserer Installation ist.
Sollte bei obiger Konfiguration doch etwas schiefgelaufen sein, und man kann sich nach einem Reboot nicht mehr als root einloggen oder zu root emporschwingen mit "su", hier der Weg wie man trotzdem wieder reinkommt.
1. ctrl-alt-del, Hardreset oder den Stecker des Fileservers ziehen
2. bei "Hit [Enter] to boot immediately, or any other key for command prompt." geben wir "boot -s ein, damit wir in den Single-User Modus kommen
3. Nun wird man nach dem Root-password gefragt für den Single-User Modus
4. Enter drücken, um eine Shell zu erhalten
5. mit "fsck" allfällige beschädigte Filesysteme checken (nur bei Hardreset oder Stecker raus)
6. mit "mount" die Filesysteme wieder einhängen
z.b. mount /dev/ad0s1a /
7. Sobald alle Filesysteme wieder eingehängt sind, ist auch der VI Editor wieder verfügbar, mit dem sich eventuelle Fehler in den Config-Dateien wieder glatt bügeln lassen
8. mit einem schnöden "exit" kommt man wieder in den Multiuser-Modus.
Ob alles funktioniert, testen wir mit einem weiteren
sbsd0001# shutdown now
Wenn wir nun wieder beim login:-Promt sind, müssen wir uns als der Benutzer anmelden, der wir während der Installation angelegt haben. Danach müssen wir den Befehl su eingeben und darauf das root-Passwort, um wieder den Superuser root zu werden.
Doch nun weiter mit dem Absichern unseres Systems.
sbsd0001# vi /etc/sysctl.conf
Zuerst kommen in der Datei /etc/sysctl.conf einige Kommentare, danach können wir mit unseren Ergänzungen loslegen. Wir kommentieren wir folgende Zeile aus (d.h. das # am Anfang der Zeile entfernen):
security.bsd.see_other_uids=0
Oder für FreeBSD 4.8
kern.ps_showallprocs=0
Dadurch werden den Benutzern nur diese Prozesse angezeigt, von denen sie auch Besitzer sind. Nur root sieht weiterhin alle Prozesse (na ja, irgendwie logisch).
Nun erstellen wir noch die Regeldatei für die IP-Firewall IPFW. Diese Regeln sind „dynamisch“ das heisst, wir können durch setzen von vier Variabeln die Firewall an unsere Anforderungen anpassen. Die vier Variabeln sind "interface", "dns_server", "open_tcpports" und "open_udpports“"(siehe weiter unten). Wir müssen nun unten in der Regeldatei interface="rl0" durch die Netzwerkkarte ersetzen, die tatsächlich im Rechner steckt sowie dns_server="193.192.227.3" durch den DNS-Server des eigenen Providers ersetzen. open_tcpports und open_udpports lassen wir wie unten, denn so werden nur die Ports geöffnet, die wir für unseren Fileserver benötigen. Dazu erstellen wir die Datei /etc/ipfwrules.
sbsd0001# vi /etc/ipfwrules
In die Datei tragen wir folgendes ein.
Code:
#!/bin/sh
#
#Mach "Quiet"
fwcmd="/sbin/ipfw -q"
#Erstmal alles saubermachen bevor wir anfangen
${fwcmd} -f flush
#Das setzen unserer eigenen Variabeln
interface="rl0" # ${interface} Netzwerkkarte
dns_server="193.192.227.3" # ${dns_server} DNS-Server
open_tcpports="22,67,68,80,139,10000" # ${open_tcpports} Offene TCP-Ports
open_udpports="22,67,68,123,137,138" # ${open_udpports} Offene UDP-Ports
#Erlaubt Loopbackverbindungen
${fwcmd} add allow ip from any to any via lo0
#Erlaubt Verbindungen welche von hier initiiert wurden
${fwcmd} add allow tcp from any to any out xmit ${interface} setup
${fwcmd} add allow udp from any to any out xmit ${interface} setup
#Erlaubt der Verbindung offen zu bleiben
${fwcmd} add allow tcp from any to any via ${interface} established
${fwcmd} add allow tcp from any to any via ${interface} established
#Erlaubte Dienste die aus dem Netzwerk erreicht werden duerfen
${fwcmd} add allow tcp from any to any ${open_tcpports} setup
${fwcmd} add allow udp from any to any ${open_udpports} setup
${fwcmd} add allow tcp from any to any ${open_tcpports} out xmit ${interface}
${fwcmd} add allow udp from any to any ${open_udpports} out xmit ${interface}
${fwcmd} add allow tcp from any to any ${open_tcpports} in recv ${interface}
${fwcmd} add allow udp from any to any ${open_udpports} in recv ${interface}
#Sendet RESET an alle ident Packete
${fwcmd} add reset tcp from any to any 113 in recv ${interface}
#Erlaubt ausgehende DNS-Anfragen NUR auf angegebenem DNS-Server
${fwcmd} add allow udp from any to ${dns_server} 53 out xmit ${interface}
${fwcmd} add allow tcp from any to ${dns_server} 53 out xmit ${interface}
${fwcmd} add allow udp from ${dns_server} 53 to any in recv ${interface}
${fwcmd} add allow tcp from ${dns_server} 53 to any in recv ${interface}
#Loggt ICMP Anfragen (echo und dest. unreachable)[/I]
${fwcmd} add allow log icmp from any to any in recv ${interface} icmptype 3
${fwcmd} add allow log icmp from any to any in recv ${interface} icmptype 8
#ICMP erlauben
${fwcmd} add allow icmp from any to any
#Alles andere verbieten (Wird nicht geloggt)
${fwcmd} add deny ip from any to any
Damit IPFW auch beim nächsten Systemstart gestartet wird, müssen wir einmal mehr /etc/rc.conf bearbeiten.
sbsd0001# vi /etc/rc.conf
Wir tragen folgendes ein:
firewall_enable="YES"
firewall_script="/etc/ipfwrules"
firewall_logging="YES"
Nun müssen wir /etc/syslog.conf bearbeiten, damit das Logging von abgelehnten Verbindungen auch richtig funktioniert.
sbsd0001# vi /etc/syslog.conf
Wo wir folgendes nachtragen:
# IPFW
!ipfw
*.* /var/log/ipfw.log
Nun legen wir die Logdatei ipfw.log noch an
sbsd0001# touch /var/log/ipfw.log
Zum Schluss müssen wir noch die Untersützung der Firewall in den Kernel einkompilieren. Wie das genau geschieht, beschreibe ich im nächsten Kapitel.
6. FreeBSD up to date halten
Um ein sicheres System zu erhalten, ist es extrem wichtig, dass zuerst einmal das Basissystem auf dem neuesten Stand ist und somit die bekannten Sicherheitslücken gestopft sind. Dies ist in FreeBSD sehr einfach via CVSUP zu realisieren, da eine der grossen Stärken von FreeBSD ist, das System durch updaten des ganzen Betriebssystem vom Source Code zu aktualisieren.
Dazu müssen wir zuerst CVSUP installieren. Da wir am Anfang der Installation die FreeBSD Ports auch installiert haben, schlage ich vor, installieren wir CVSUP über die Ports. Installieren von den Ports heisst, dass FreeBSD sich die Quellen auf vorgegeben Servern im Internet herunterlädt, kompiliert und für FreeBSD patcht. Dies macht die Ports zu einem so mächtigen Werkzeug.
sbsd0001# cd /usr/ports/net/cvsup-without-gui
sbsd0001# make install clean
Dies installiert CVSUP ohne grafische Benutzeroberfläche für X-Window. Diese grafische Benutzeroberfläche benötigen wir auch nicht, da wir X-Window ja nicht installiert haben.
Damit wir FreeBSD mit CVSUP updaten können, müssen wir zuerst eine Konfigurationsdatei erstellen, damit CVSUP weiss, was wir updaten wollen.
Diese Datei erstellen wir unter /root also dem Home-Directory vom Superuser root.
sbsd0001# vi /root/cvs-supfile
In diese Datei schreiben wir folgendes rein:
*default host=cvsup3.de.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default compress
src-all tag=RELENG_5_1
ports-all tag=.
Dies weist CVSUP an, die Sourcen von FreeBSD 5.1 (RELENG_5_1) vom CVSUP Server cvsup3.de.FreeBSD.org herunterzuladen. Hier empfiehlt es sich einen schnellen CVSUP Server zu nehmen. Z.B. in der Nacht einen Server in Deutschland (de) bzw. Europa, während am Tag auch ein CVSUP Server in Amerika (da im Amiland dann ja Nacht ist) recht schnell sein kann.
Nun führen wir folgenden Befehl als root (d.h. als root eingeloggt oder ein User, der mit su zu root wurde) aus:
sbsd0001# /usr/local/bin/cvsup /root/cvs-supfile
Damit werden die Sourcen heruntergeladen. Nachdem diese heruntergeladen wurden, müssen wir die Sourcen kompilieren und installieren. Man nennt dies „buildworld“.
sbsd0001# cd /usr/src
sbsd0001# make buildworld
Das kompilieren und installieren der Sourcen dauert je nach Rechenleistung des Systems deftig lange (mit AMD-1.2 GHz Athlon brauchte ich 70 Minuten).
Nachdem die Sourcen kompiliert und installiert sind, d.h. buildworld fertig ist. Gehen wir nun daran uns einen auf unser System massgeschneiderten Kernel zu backen.
sbsd0001# cd /usr/src/sys/i386/conf
sbsd0001# cp GENERIC MYKERNEL
wobei MYKERNEL für den neugebauten Kernel steht, man kann irgendwas nehmen, ich nehme als Kernelname gerne den Typ und die Megahertz des Prozessors z.B. P3-800 für einen Pentium 3 mit 800 MHz.
sbsd0001# vi MYKERNEL
Bevor wir nun in diesem Konfigurationsfile herumwüten, lohnt es sich, im FreeBSD Handbook ein wenig nachzulesen, welche Optionen einkompiliert werden müssen oder sollten. Für Wissbegierige sei auch noch das File /usr/src/sys/i386/conf/NOTES genannt, in dem alle für die jeweilige Version gültigen Kerneloptionen aufgeführt sind.
Hier jedoch, das Wichtigste, das man einkompilieren sollte:
options SC_DISABLE_DDBKEY
options SC_DISABLE_REBOOT
options CPU_ENABLE_SSE
options CPU_ATHLON_SSE_HACK
options IPSEC
options IPSTEALTH
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
Weiter empfehle ich, alle Gerätetreiber, die man nicht für seinen Rechner benötigt, auszukommentieren (mit einem # vor der jeweiligen Zeile). Schliesslich wird die Hardware bei einem Server nicht jeden zweiten Tag verändert, und wenn man etwas ändert, kann man schnell wieder einen neuen Kernel bauen.
Nun müssen wir auch den neuen Kernel noch kompilieren:
sbsd0001# cd /usr/src
sbsd0001# make buildkernel KERNCONF=MYKERNEL
Wenn der Kernel ohne Fehler kompiliert ist, können wir ihn installieren
sbsd0001# make installkernel KERNCONF=MYKERNEL
Nun ist der Kernel installiert und ein Neustart des Systems ist nötig um den neuen Kernel auch zu aktivieren.
sbsd0001# reboot oder shutdown -r now
Nachdem der Rechner neu gestartet ist, und wir wieder als root eingeloggt (d.h. wir loggen uns als User highfish ein, und werden dann mit dem Befehl su zum root-Benutzer) sind, können wir mit uname -a überprüfen, mit was für einem Kernel das System gerade läuft.
Bevor wir die zuvor mit "buildworld" kompilierten Dateien auf unserem System installieren, lassen wir mergemaster durchlaufen, ein Tool, das verschiedene Dateiversionen erkennt und korrigiert.
sbsd0001# mergemaster -p
Nun installieren wir die kompilierten Dateien. Dafür müssen wir das System in den Single-User-Modus fahren.
sbsd0001# shutdown now
Nun müssen wir noch das root-Passwort eingeben und wir sind im Single-Mode. Dort geben wir folgendes ein, um die kompilierten Binaries zu installieren:
sbsd0001# cd /usr/src
sbsd0001# make installworld
Bevor nun das Update vollständig ist, lassen wir nochmals das Mergemaster-Skript laufen
sbsd0001# mergemaster
Wir werden nun vom Skript gefragt, wie es mit gleichen Dateien unterschiedlichen Datums verfahren soll. Im Zweifelsfalle lassen wir Mergemaster nichts machen und sehen uns die Dateien mit VI einmal selber an.
Nun ist wieder ein Neustart fällig
sbsd0001# reboot oder shutdown -r now
7. FreeBSD Feintuning (Basissystem Sicherheit Teil 2)
Zuerst sichern wir das root-Homeverzeichnis /root ab, so dass nur der Superuser root Zugriff hat und Dateien darin verändern oder löschen kann.
sbsd0001# chmod 700 /root
Nun kommen die Laufwerke dran, die beim Start von FreeBSD ins System eingebunden (gemounted) werden. Dazu editieren wir die Datei /etc/fstab.
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen folgendermassen:
für /home rw,nosuid,nodev
für /tmp rw,nosuid,noexec,nodev
für /usr rw,nodev
für /var rw,nosuid,noexec,nodev
Was bedeutet das?
rw = readwrite, das Dateisystem kann sowohl gelesen als auch beschrieben werden
nosuid = keine Dateien können mit root-Rechten (su) ausgeführt werden
noexec = keine Dateien können ausgeführt werden
nodev = Dateien können keine Device-Treiber sein, d.h. werden unnötige Direktzugriffe auf die Hardware des Systems vermieden
Noch eine Anmerkung dazu: Wenn man nun im Multi-User-Modus ein "make installworld" durchführen möchte, kann dies durch obige Restriktionen zu Fehlern führen. D.h. sollte man vor einem "make installworld" immer das System in den Single-User-Modus fahren.
Nun zu den temporären Speicherplätzen im System. Da haben wir zum einen /var/tmp und zum anderen /tmp. Da wir eigens ein Slice für /tmp eingerichtet haben, ist es sinnvoll, alle temporären Dateien auch dort abzulegen. Deshalb kreieren wir für /var/tmp einen Symlink. Das heisst, Dateien, die von Anwendungen nach /var/tmp geschrieben werden, werden umgeleitet und abgespeichert unter /tmp.
sbsd0001# cd /var
sbsd0001# rm -R tmp
sbsd0001# ln -s /tmp /var/tmp
Bevor wir nun weiterfahren, unser System abzusichern, erachte ich es als sinnvoll, an dieser Stelle die für unseren Server benötigten Programme Samba (das Fileserverprogramm), Webmin 1.121 (Webkonfigurationstool) und isc-dhcp3 (der dhcp-Server) zu installieren und zu konfigurieren.
8. Installation und Konfiguration von Samba 3.0.0 und Webmin 1.121
Zuerst müssen wir die Samba-Suite auf unserem System installieren. Dies machen wir wie oben mit CVSUP über die Ports.
sbsd0001# cd /usr/ports/net/samba-devel
sbsd0001# make install clean
Wenn Samba fertig installiert ist, fahren wir das System schnell mal wieder in den Single-User Modus und zurück, damit die soeben installierten Programme der Samba Suite zur Verfügung stehen.
sbsd0001# shutdown now
Nun stellen wir als erstes FreeBSD so ein, dass Samba beim Starten des Systems mitgestartet wird.
sbsd0001# cd /usr/local/etc/rc.d
sbsd0001# cp samba.sh.sample samba.sh
Mit der Samba-Suite wird auch CUPS, das Common UNIX Printing System, mitinstalliert. Dieses benötigen wir, falls wir Drucker über Samba einrichten und benutzen wollen. Also stellen wir auch hier sicher, dass CUPS beim Aufstarten von FreeBSD gestartet wird.
sbsd0001# cp cups.sh.sample cups.sh
Bevor wir an die Konfiguration der Samba-Konfigurationsdatei /usr/local/etc/smb.conf gehen, legen wir die Benutzer auf dem FreeBSD System an. Die Benutzer, die sich später einmal an den Windows-Clients einloggen sollen, legen wir wiederum mit /stand/sysinstall an.
sbsd0001# /stand/sysinstall
FreeBSD Configuration Menu -> User Management -> User (siehe Kapitel 3. Was muss der Server können? Allgemeine Gedanken zum Netzwerk)
Login ID: u01
UID: 1002 (oder was das System gerade vorgibt)
Group: 1100 (die Gruppe smb-users, die wir bei der Installation angelegt haben)
Password (kein Passwort, da der Benutzer sich sowieso nicht am System anmelden kann)
Full Name: Fritz Muster (oder was weiss ich, dies wird jedoch in Windows auch verwendet, z.b. wenn der Client gelockt ist, wird angezeigt, was hier eingegeben wurde. Also: „Only SAMBA\u01 (Fritz Muster) or an administrator can unlock this computer“)
Member groups:
Home directory: /home/u01 (wird automatisch eingetragen)
Login shell: /sbin/nologin (somit kann sich der User nicht direkt am System anmelden)
Weitere Benutzer die sich an den Windows-Clients anmelden sollen, muss man analog zum obigen anlegen.
Wenn wir alle Benutzer angelegt haben, können wir sysinstall wieder verlassen.
Da wir ja ein „Primary Domain Controller“ PDC machen, müssen, wie in Windows NT, die Computer selbst auch ein Benutzerkonto auf der FreeBSD Maschine haben. Ein sogenannter Machine Account. Diesen legen wir auf der Kommandozeile mit dem Befehl pw an.
sbsd0001# pw useradd wwxp0001$ -g 1200 –c wwxp0001 –d “/nonexistent“ –s „/sbin/nologin”
Pw = Befehl (Programm) pw
Useradd = besagt dem Programm pw, dass es einen neuen Benutzer anlegen soll
wwxp0001$ = der anzulegende Benutzer. D.h. die Windows-Workstation wwxp0001 (dies muss identisch sein, mit dem Computername in Windows). Das $-Zeichen ist notwendig, dass Samba daraus ein Machine Account machen kann.
-g = Gruppe 1200 (smb-workstations Gruppe, die wir bei der Installation angelegt haben)
-c = Kommentar (ich wähle immer den Computername, d.h. wwxp0001)
-d „/nonexistent“ = Das Homedirectory ist „/nonexistent“, d.h. es wird kein Homedirectory angelegt
-s „/sbin/nologin“ = Der Benutzer bekommt keine Login-shell, kann sich also nicht am FreeBSD Server anmelden via Telnet oder SSH.
Nun zur zentralen Konfigurationsdatei /usr/local/etc/smb.conf. Wir legen diese Datei zuerst als leere Datei im Verzeichnis /usr/local/etc an.
sbsd0001# touch /usr/local/etc/smb.conf
Man kann diese Konfigurationsdatei von Hand anpassen, das ist klar. Jedoch stellt die Samba-Suite ein gutes Webtool namens SWAT zur Verfügung, das ich gerne für die Erstkonfiguration des Servers verwende. Durch zwei konzeptionelle Schwächen was die Sicherheit anbelangt, disqualifiziert sich jedoch SWAT als Administrationstool. Zum einen werden Passwörter im Klartext vom Browser zum Server gesendet (klar, das könnte man mit Stunnel noch verschlüsseln) und zum anderen muss man sich zur Administration des Servers via SWAT mit dem root Account (dem UNIX-root Account) und root Passwort anmelden.
Da wir nicht ganz auf SWAT verzichten wollen, installieren wir an dieser Stelle das Web-Konfigurationstool Webmin aus dem Ports, mit dem wir diverse Einstellungen unseres Servers ändern können und unter anderem (via SSL getunnelt) auf SWAT zur Samba-Konfiguration zurückgreifen können.
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make install clean
Nachdem Webmin aus dem Ports installiert wurde, startet automatisch ein Konfigurationsskript, mit dem wir Webmin an unsere Wünsche anpassen können.
Config file directory [/usr/local/etc/webmin]: enter drücken
Log file direcotry [/var/log/webmin]: enter drücken
Full path to perl (default /usr/bin/perl): enter drücken
Web server port (default 10000): enter drücken
Login name (default admin): highfish (oder was weiss ich)
Login password: Beliebiges Passwort, jedoch _NICHT_ das gleiche wie der Unix-Benutzer highfish hat!
Password again: Passwort wiederholen
Use SSL (y/n): y
Nun starten wir Webmin mit dem folgenden Befehl:
sbsd0001# sh /usr/local/etc/rc.d/webmin.sh-dist start
Dadurch wird Webmin gestartet und bleibt bis zum nächsten reboot oder shutdown now aktiv. Danach muss Webmin wieder mit obigem Befehl gestartet werden, Dies damit Webmin nicht immer läuft, sondern bei Bedarf zuerst von der Konsole oder SSH gestartet werden muss.
Nun können wir uns auf einem beliebigen PC mit Internet Explorer oder Netscape bei Webmin einloggen. Wir geben dazu in der Adresszeile des Browsers folgendes ein:
https://192.168.1.5:10000
Darauf zeigt uns der Browser ein Zertifikat, das wir annehmen. Nach der Eingabe von Username und Passwort landen wir im Obermenü Webmin wo wir Webmin an unsere Wünsche anpassen können.
Wir klicken auf „Change Language and Theme“ und wählen bei „Webmin UI language“ -> „Personal Choice“ die Sprache die uns am besten liegt. Mit einem Klick auf „Make Changes“ werden die Änderungen aktiv.
Als nächstes klicken wir auf „Webmin-Benutzer“ und dort auf dem Namen des bei der Installation von Webmin angelegten Benutzers. In meinem Falle war das highfish.
Webmin zeigt uns nun die Webmin-Benutzerzugriffsrechte. Bei den Modulen versehen wir nur Webmin-Benutzer und Windows Dateifreigabe mit einem Häkchen, alle anderen wählen wir nicht und klicken nun auf Speichern. Dadurch wird die Gefahr geringer, dass wir via Webmin versehentlich etwas am System verändern. Danach müssen wir diese Konfiguration noch speichern, in dem wir ganz unten auf speichern klicken.
Nun klicken wir oben links auf „Server“ und wählen dann „Windows-Dateifreigabe“. Darauf wählen wir auf der rechten Seite SWAT. Nun müssen wir uns mit dem Unix-root Account und Passwort anmelden und kommen nun endlich ins SWAT-Konfigurationstool, welches nun auch über SSL getunnelt ist.
Dort klicken wir zuerst auf die Schalfläche „Wizard“ wo wir die Grobkonfiguration von Samba machen können.
Server Type: Domain Controller
Configure WINS As: Server for client use
Expose Home Directories: yes
Danach klicken wir auf den “Commit“-Button.
Nun klicken wir auf die Schaltfläche „Globals“ wo wir die sogenannte [global]-Sektion von Samba konfigurieren können, d.h. alle Parameter, die für alle Benutzer, Drucker und Freigaben gelten sollen. Zuerst klicken wir auf dem „Advanced View“-Button, um alle Einstellungsmöglichkeiten zu sehen. Nun stellen wir folgende Parameter ein.
workgroup = SAMBA (oder wie die NT-Domäne heissen soll)
netbios name = SBSD0001 (oder wie der Name des Servers ist)
server string = analog zu netbios name
passdb backend = tdbsam
logon script = logon.cmd (oder wie auch immer, da komme ich später noch dazu)
logon path = \\%L\profiles\%U (dies wird für die Roaming Profiles benötigt)
logon drive = p: (Das Homedrive des Benutzers wird unter Windows an den Laufwerksbuchstaben p: gebunden)
logon home = \\%L\%U (dies wird benötigt, damit Samba weiss, welches das richtige Homeverzeichnis des Benutzers ist.)
os level = 65 (ich wähle 65 damit der Server gegen etwaige Windows-Server gewinnt was browsing anbelangt)
preferred master = yes (wird zusammen mit domain master benötigt, damit der Samba-Server der Master-Browser wird.)
domain master = yes (siehe Preferred master)
Wenn wir das eingestellt haben, klicken wir oben auf „Commit Changes“
Nun klicken wir auf die Schaltfläche „Shares“, um neue Freigaben zu erzeugen.
Wir geben Netlogon als Sharename ein und klicken auf „Create Share“
Weiter geben wir folgendes ein:
comment = Netlogon (Kommentar, der das Share beschreibt)
path = /usr/data/netlogon (Unix-Verzeichnis, wo Daten in diesem Share abgespeichert werden)
browseable = no (no damit dieses Share in der Netzwerkumgebung nicht erscheint)
Und können mit einem Klick auf „Commit Changes“ unser Netlogon-Share (das übrigens zwingend für unseren Server benötigt wird) erstellen.
Damit die roaming Profiles von Windows auch funktionieren, legen wir ein Share mit dem Namen Profiles an.
Wir geben Profiles als Sharename ein und klicken wieder auf „Create Share“.
Wir klicken auf „Advanced View“ und ändern folgende Parameter
comment = Profiles
path = /usr/data/profiles
read only = no (d.h. ist das Share auch zum Schreiben freigegeben)
create mask = 0600 (beschreibt, mit welchen Rechten eine Datei angelegt wird)
security mask = 0600 (wird benötigt, wenn ein Benutzer durch eine NT Dialogbox die Rechte einer Datei ändern will)
directory mask = 0700 (beschreibt, mit welchen Rechten ein Verzeichnis angelegt wird)
directory security mask = 0700 (wird benötigt, wenn ein Benutzer durch eine NT Dialogbox die Rechte eines Verzeichnisses ändern will)
browseable = no (no damit dieses Share in der Netzwerkumgebung nicht erscheint)
Nun kreieren wir eine Datenaustauschfreigabe, auf die alle Benutzer Lese und Schreibzugriff auf alle Files haben, auch wenn diese Dateien ursprünglich einem anderen Benutzer gehörten.
Wir geben z.b. Highfish als Sharename ein und klicken wieder auf „Create Share“.
Wir klicken auf „Advanced View“ und ändern folgende Parameter
comment = Highfish Group Drive
path = /usr/data/highfish
read only = no
create mask = 0777
directory mask = 0777
Nun erstellen wir noch ein Share mit dem Namen “Data”, auf das nur der Benutzer u01 schreiben darf, jedoch alle lesen dürfen.
Wieder auf „Advanced View“ klicken und folgendes ändern:
comment = Data
path = /usr/data/data
write list = u01 (dieser Benutzer hat Schreibrechte auf das Share)
security mask = 0744
directory security mask = 0755
Weiter müssen wir noch das “homes”-Share, das die Homeverzeichnisse zur Verfügung stellt, ein bisschen anpassen.
create mask = 0700
security mask = 0700
directory mask = 0700
directory security mask = 0700
veto files = /.*/ (Dateien mit einem Punkt vor dem Dateinamen werden unter Windows nicht angezeigt)
Ich habe Parameter, die bei den verschiedenen Shares gleich sind, nicht mehrmals beschrieben, um die Unterschiede der Shares hervorzuheben.
Nun müssen wir die Verzeichnisse noch unter FreeBSD erstellen
sbsd0001# cd /usr/data
sbsd0001# mkdir netlogon profiles highfish data
Nun müssen wir dazu auch noch die Zugriffsrechte auf diese Verzeichnisse setzen.
sbsd0001# chmod 777 netlogon profiles highfish data
Die Verzeichnisse für das [homes] share wurden bereits angelegt, als wir die jeweiligen Benutzer anlegten.
Nachdem wir weiter oben alle Benutzer und Machine Accounts auf der FreeBSD Seite angelegt haben, müssen wir die Benutzer nun noch auf der Samba-Seite anlegen. Dies machen wir mit dem Programm pdbedit.
sbsd0001# pdbedit –a –u root
Dies kreiert den Samba-Account für den Superuser root und fordert uns auf, ein smb-Passwort für root zu setzen. Ich empfehle, hier NICHT das gleiche Passwort zu verwenden, wie wir bei der Installation in Kapitel 4 für root gesetzt haben. Wir benötigen diesen Benutzer nur, wenn wir Computer in die Windows-Domäne aufnehmen wollen. Der Benutzer root sollte sich auch über Samba nicht am Fileserver anmelden.
Nun fügen wir wie oben die anderen Benutzer hinzu. Jedoch nur die Benutzer, die sich später über Windows am Server anmelden sollen, nicht die Machine-Accounts.
sbsd0001# pdbedit –a –u u01
Jetzt fügen wir mit folgendem Befehl die Machine-Accounts hinzu:
sbsd0001# pdbedit –a –m –u wwxp0001
Das $-Zeichen hinter dem eigentlichen Computernamen ist hier nicht mehr nötig.
Jetzt verknüpfen wir die von Samba automatisch angelegten NT-Domänen-Benutzergruppen mit den entsprechenden Benutzergruppen von FreeBSD
sbsd0001# net groupmap add ntgroup=“Domain Admins” UNIXgroup=smb-admin
sbsd0001# net groupmap add ntgroup=“Domain Users” UNIXgroup=smb-users
Nun noch zur Windows-Batchdatei logon.cmd (man kann sie auch logon.bat taufen). Diese Datei wird von Windows ausgeführt, wenn sich ein Benutzer an unserem Server anmeldet. Daher muss diese Datei auch im Windows-Textdateiformat vorliegen und nicht als Unix-Textdatei. Ich empfehle deshalb, diese Datei auf einem Windows-Rechner zu erstellen.
Man kann in mit dieser Datei zum Beispiel Netzlaufwerke automatisch verbinden lassen oder die Zeit mit unserem FreeBSD Server synchronisieren
NET USE * \\SBSD0001\DATA (verbindet das Netzlaufwerk SBSD0001\DATA mit dem nächsten freien Laufwerksbuchstaben unter Windows)
NET TIME \\SBSD0001 /SET /Y(synchronisiert die Zeit mit unserem FreeBSD Server)
9. Installation und Konfiguration des DHCP Servers ISC-DHCP3
Wie schon oben in Kapitel 3 erwähnt, ist der ISC-DHCP3 des Internet Software Consortiums dazu da, TCP/IP Adressen automatisch an Clients zu vergeben. Dabei spielt es keine Rolle, ob diese Clients Windows, Unix oder was weiss ich für Clients sind.
Wichtig 29.06.2004: den ISC-DHCP3 unbedingt auf Version 3.0.1rc14 updaten, da in den älteren Versionen zwei Sicherheitslücken enthalten sind!
Den ISC-DHCP3 installieren wir wieder über die Ports.
sbsd0001# cd /usr/ports/net/isc-dhcp3-server
sbsd0001# make install clean
Wie bei Samba und CUPS müssen wir wieder dafür sorgen, dass der ISC-DHCP3 beim Start des Systems gestartet wird.
sbsd0001# cd /usr/local/etc/rc.d
sbsd0001# cp isc-dhcpd.sh.sample isc-dhcpd.sh
Damit der ISC-DHCP3 auch mit den richtigen Parametern gestartet wird, müssen wir wieder die /etc/rc.conf bearbeiten.
sbsd0001# vi /etc/rc.conf
Dort tragen wir folgendes ein:
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces=""
dhcpd_umask="022"
dhcpd_chuser_enable="YES"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chroot_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"
Nun müssen wir einen Benutzer dhcpd und eine Gruppe dhcpd anlegen. wir machen das wieder über das Tool /stand/sysinstall.
sbsd0001# /stand/sysinstall
FreeBSD Configuration Menu -> User Management -> Group
Group name: dhcpd
GID: 1201
FreeBSD Configuration Menu -> User Management -> User
Login ID: dhcpd
UID: 1010 (egal, einfach das was gerade angezeigt wird)
Group: 1201
Password: keines, da sich Benutzer nicht am System anmelden soll
Full Name: dhcpd
Member groups:
Home directory: /nonexistent
Login shell: /sbin/nologin
Nun müssen wir noch das Konfigurationsfile dhcpd.conf des ISC-DHCP3 an unsere Bedürfnisse anpassen. Da wir jedoch nicht die Original Konfigurationsdatei verändern wollen, kopieren wir diese zuerst.
sbsd0001# cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf
Nun öffnen wir sie mit VI.
sbsd0001# vi /usr/local/etc/dhcpd.conf
In dieser Datei ändern wir folgendes, bzw. fügen folgende Zeilen ein.
option domain-name „highfish.info“;
option domain-name-servers 193.192.227.3 , 195.141.56.5;
Die obigen Linien sind allgemein gültig fürs ganze Netzwerk, und geben den Domain Name bzw. die Domain Name Server vor. 193.192.227.3 und 195.141.56.5 sind die primären bzw. sekundären DNS-Server von Sunrise (www.sunrise.ch), bitte durch die DNS-Server des jeweiligen Providers ersetzen.
default-lease-time 600; (eine per DHCP bezogene Adresse, ist normal 10 Minuten gültig)
max-lease-time 7200;
authoritative; (da unser DHCP-Server der offizielle DHCP-Server in unserem Netz ist)
ddns-update-style none;
log-facility local7;
Die nun folgenden Zeilen beschreiben das Subnetz 192.168.1.0.
subnet 192.168.1.0 netmask 255.255.255.0 { (Subnetz bzw. Subnetzmaske)
range 192.168.1.12 192.168.1.100; (im Bereich 192.168.1.12 – 192.168.1.100 werden IP-Adressen per DHCP verteilt)
option routers 192.168.1.1; (der Router den die Clients für ins Internet nehmen)
option netbios-name-servers 192.168.1.5; (WINS-Server im Netz, logischerweise unsere FreeBSD Samba Maschine)
option ntp-servers 192.168.1.5; (NTP-Server im Netz, ebenfalls der FreeBSD-Rechner)
}
Die nun folgenden Zeilen werden benötigt, wenn man einem bestimmten PC immer die gleiche IP-Adresse per DHCP zuteilen möchte
host wwxp0001 { (Name des Hosts)
hardware Ethernet 00:3C:F0:FF:23:03; (MAC-Adresse der Ethernetkarte, kann z.b. unter Windows mit ipconfig /all ermittelt werden)
fixed-address 192.168.1.10; (die fixe Adresse die der Rechner bekommen soll)
}
Alle anderen Zeilen in der Datei /usr/local/etc/dhcpd.conf müssen mit einem # auskommentiert werden.
Nun können wir mit shutdown now und anschliessendem hochfahren in den Multi-User-Modus den DHCP-Server in betrieb nehmen.
sbsd0001# shutdown now
10. Konfiguration des NTP (Network Time Protocol) Servers von FreeBSD
Der NTP-Server ntpd wird standardmässig mit FreeBSD installiert, wir müssen nur noch sicherstellen dass der NTP Server beim Aufstarten des Systems gestartet wird: Dazu editieren wir wieder die /etc/rc.conf:
sbsd0001# vi /etc/rc.conf
Dann fügen wir folgende Zeile ein und speichern die /etc/rc.conf danach.
xntpd_enable="YES"
Nun müssen wir noch die NTP-Konfigurationsdatei erstellen:
sbsd0001# vi /etc/ntp.conf
Dort fügen wir folgendes ein:
server ntp1.fau.de prefer
server swisstime.ethz.ch
driftfile /var/db/ntp.drift
Ich habe ntp1.fau.de als bevorzugten NTP Server genommen, weil er laut Beschreibung NTP V3 unterstützt, was der Server swisstime.ethz.ch scheinbar nicht tut. Weitere NTP Server sind auf folgenden Sites aufgeführt:
Primäre: http://www.eecis.udel.edu/~mills/ntp/clock1a.html
Sekundäre: http://www.eecis.udel.edu/~mills/ntp/clock2a.html
11. FreeBSD Feintuning (Basissystem Sicherheit Teil 3)
Nachdem wir nun alle unsere benötigten Programme installiert und konfiguriert haben, können wir weiter daran gehen, unser System abzusichern. Dafür verwenden wir das Kommando chflags um Dateien zu schützen, die nie modifiziert werden sollen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
Damit sichern wir ebenfalls unseren Kernel. Jedoch gilt zu beachten, dass wenn wir einen neuen Kernel bauen und installieren, dieses Flag wieder neu setzen müssen.
sbsd0001# chflags schg /boot/kernel
Nun legen wir die Datei /boot.config an, mit Hilfe derer man beim Aufstarten des Systems den Kernel ändern kann. Um dies zu verhindern setzen wir bei dieser Datei ebenfalls das schg Flag.
sbsd0001# touch /boot.config
sbsd0001# chflags schg /boot.config
Nun setzen wir auch andere Zugriffsrechte auf unsere Logdateien unter /var/log
sbsd0001# cd /var/log
sbsd0001# chmod 600 *
Ebenso auf diverse andere Systemverzeichnisse und Systemdateien
sbsd0001# chmod 600 /etc/crontab
sbsd0001# chmod 700 /root
sbsd0001# chmod 700 /home/*
sbsd0001# chmod 650 /etc/rc.*
sbsd0001# chmod 600 /etc/master.passwd
Nun müssen wir noch unseren Remote-Zugang via SSH konfigurieren.
sbsd0001# vi /etc/ssh/sshd_config
Dort fügen wir folgendes ein:
Code:
Port 22
Protocol 2
PermitRootLogin no
X11Forwarding no
PrintMotd yes
PrintLastLog yes
KeepAlive yes
PermitEmptyPasswords no
PasswordAuthentication yes
ReverseMappingCheck no
GatewayPorts no
AllowTcpForwarding yes
AllowGroups ssh
Banner /etc/issue
MaxStartups 10
Mit den obigen Einstellungen erlauben wir nur Benutzern in der Gruppe ssh Zugang via SSH. Also müssen wir eine neue Gruppe ssh anlegen und unseren Benutzer highfish (oder eben den Benutzer, den wir ganz zu Beginn bei der Installation angelegt haben) zu dieser Gruppe hinzufügen.
sbsd0001# echo “ssh:*:1010:highfish” >> /etc/group
Um von Windows aus via SSH auf unseren Server zugreifen zu können, benötigen wir einen SSH Client für Windows. Ich nehme dazu immer PuTTY. Es ist ein Freeware Tool und kann z.B. hier heruntergeladen werden: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Nocheinmal editieren wir /etc/rc.conf
sbsd0001# vi /etc/rc.conf
Zuerst die RFC1323 extensions für TCP/IP abschalten
tcp_extensions="NO"
Last but no least schauen wir noch, ob die folgenden beiden Parameter gesetzt sind.
kern_securelevel_enable=“YES“
kern_securelevel=”0“
Nun können wir einmal eine Sicherheitskopie von /etc anlegen, wo die meisten unserer Konfigurationsdateien abgelegt sind.
sbsd0001# tar –cvvpzf /root/etc.tar.gz /etc
sbsd0001# chmod 600 /root/etc.tar.gz
Nun verschlüsseln wir die soeben angelegte Datei mit dem Blowfish-Algorithmus
sbsd0001# openssl enc –blowfish –in /root/etc.tar.gz –out /root/etc.tgz.bf
Das gleiche machen wir mit den Dateien unter /usr/local/etc wo die Konfigurationsdateien und Startupskripte von Samba und Webmin lagern.
sbsd0001# tar –cvvpzf /root/usr.local.etc.tar.gz /usr/local/etc
sbsd0001# chmod 600 /root/usr.local.etc.tar.gz
Auch diese verschlüsseln wir natürlich.
sbsd0001# openssl enc –blowfish –in /root/usr.local.etc.tar.gz –out /root/usr.local.etc.tgz.bf
Zum entschlüsseln von /etc verwenden wir folgenden Befehl:
openssl enc –d –blowfish < /root/etc.tgz.bf | tar –xzf –
Beziehungsweise für /usr/local/etc
openssl enc –d –blowfish < /root/usr.local.etc.tgz.bf | tar –xzf –
Nun können wir die zuerst angelegten *.tar.gz Dateien wieder löschen
sbsd0001# rm /root/etc.tar.gz
sbsd0001# rm /root/usr.local.etc.tar.gz
12. Ein paar Anmerkungen zu Zugriffsrechten unter FreeBSD
Zugriffsrechte
Um die verschiedenen möglichen Zugriffsrechte zu demonstrieren machen wir z.B. unter /root ein ls –la
sbsd0001# cd /root
sbsd0001# ls –la
Nun kommt unter anderem etwas im folgenden Stil heraus
-r-xr-xr-x 1 root wheel 186 Oct 17 18:08 cvs-supfile
Das heisst aufgeschlüsselt folgendes
-r-xr-xr-x = Zugriffsrechte
1 = Anzahl Links
root = Dateibesitzer
wheel = Benutzergruppe
186 = Dateigrösse
Oct 17 18:08 = Zeit wenn die Datei das letzte Mal geändert wurde
cvs-supfile = Name der Datei
Doch nun zu den Zugriffsrechten in diesem Falle –r-xr-xr-x. Diese können wir in vier Teile unterteilen:
- r-x r-x r-x
Dateityp Rechte Dateibesitzer Rechte Benutzergruppe Rechte Dritte
Mögliche Dateitypen:
- = normale Datei
d = Verzeichnis
l = Link
s = Socket)
Mögliche Rechte:
r = read (lesen
w = write (schreiben)
x = execute (ausführen)
Man kann ein solches r-x nun auch im Binärformat als 101 verstehen. Wenn wir dies nun ins Oktalsystem konvertieren kommt 5 dabei heraus (Einfach nachzuvollziehen mit dem Rechner von Windows). Das heisst obiges File cvs-supfile hat im Oktalsystem die Rechte 555 (binär: 101101101). Für unsere drei Rechte read, write und execute gilt daher folgendes:
Read: binär 100 -> Oktal 4
Write binär 010 -> Oktal 2
Execute binär 001 -> Oktal 1
Natürlich können wir dies nun auch kombinieren:
Oktal für rwx: 4 + 2 + 1 = 7
Oktal für rw-: 4 + 2 + 0 = 6
Oktal für r-w: 4 + 0 + 1 = 5
Oktal für ---: 0 + 0 + 0 = 0
Mit diesen Oktalwerten operieren wir auch, wenn wir die Zugriffsrechte einer Datei ändern wollen. Dafür nehmen wir das Kommando chmod. Wenn wir jetzt folgendes eingeben: chmod 755 cvs-supfile hat die Datei nachher die Rechte –rwxr-xr-x.
Hier ein paar Beispiele über gängige Rechte, die mit dem Befehl chmod angewendet werden können:
Dateityp Rechte Dateibesitzer Rechte Benutzergruppe Rechte Dritte
chmod 777 = rwx rwx rwx
chmod 755 rwx r-x r-x
chmod 744 rwx r-- r—
chmod 650 rw r-x ---
chmod 600 rw --- ---
Datei- und Verzeichnisflags
Das chflags Kommando ist sehr nützlich, wenn wir die Sicherheit unseres Systems optimieren. Mit diesem Kommando kann man diverse Restriktionen auf eine Datei setzen, übergeordnet den eigentlichen Zugriffsrechten.
Sappnd – setzt das system append-only flag (nur root)
Es kann nur gesetzt oder entfernt werden von root. In Dateien, die mit diesem Flag ausgeschmückt sind, kann nur hinzugefügt werden. Jedoch können sie weder gelöscht noch sonstwie editiert werden.
Schg – setzt das system unveränderlich flag (nur root)
Auch das kann nur von root gesetzt oder entfernt werden. Solche Dateien können weder geändert, noch verschoben oder gelöscht werden. Der Kernel verhindert, dass diese Dateien in irgend einer Art verändert werden können.
Um diese Flags von einer Datei zu entfernen müssen wir nur ein „no“ vor das Flag setzen. Also nosappnd bzw. noschg. Jedoch kann ein solches Flag nicht entfernt werden, wenn das System mit securelevel 1 oder höher arbeitet.
13. Konfiguration von Windows XP Professional als Domänen-Mitglied
Windows XP ist insofern ein Spezialfall, da wir noch einen Wert in der Registry ändern müssen, damit wir uns an unserem FreeBSD Server anmelden können.
Also Start – Ausführen klicken. Dann bei Öffnen regedit eingeben für den Registrierungseditor. Im Editor mit Ctrl-F nach dem Schlüssel requiresignorseal suchen. Danach den Wert von 1 auf 0 setzen.
Falls wir die Zeit unserer Clients mit dem Server abgleichen wollen, müssen wir in der lokalen Sicherheitsrichtlinie auch noch eine Änderung machen. Diese ist zu finden unter Systemsteuerung – Verwaltung – Lokale Sicherheitsrichtlinie – Lokale Richtlinien – Zuweisen von Benutzerrechten – Ändern der Systemzeit
Dort wählen wir Benutzer oder Gruppe hinzufügen und klicken dann auf erweitert. Nun ein Klick auf Objekttypen und ein Hacken bei Gruppen setzen. Danach auf Ok und auf „Jetzt suchen“ klicken. Danach erscheint eine Login-Maske, wo wir uns mit einem Benutzerkonto der Domäne z.B. u01 (oder was auch immer) anmelden müssen. Danach wählen wir unten die Gruppe Domain-Users aus und bestätigen alles mit OK. Nun wird bei jedem Login am Windows XP Client die Uhrzeit mit dem Server synchronisiert, wenn wir ein entsprechendes Logon-Skript geschrieben haben.
14. Maintenance des Servers
Mit der zunehmenden Laufzeit des Servers muss dieser auch unterhalten werden, so müssen beispielsweise Security Patches eingespielt werden, neue Versionen von FreeBSD erscheinen oder neue Versionen der verwendeten Ports sind verfügbar und man möchte seinen Server daher updaten.
14.1 Vorbereitungen für das Update
Wenn man nicht nur das FreeBSD Basissystem updaten möchte, sondern auch noch gleich die neuesten Programmversionen der verwendeten Programme Samba, Webmin und ISC-DHCP einspielen möchte, empfehle ich die jeweiligen Programme zuerst über die Ports zu deinstallieren. Hierbei ist es vorteilhaft dass man die Konfigurationsdateien dieser Programme sicherheitshalber nach /root kopiert, man kann ja nie wissen…
Beispielsweise smb.conf
sbsd0001# cp /usr/local/etc/smb.conf /root/smb.conf
Dies erstellt eine Kopie der smb.conf im Verzeichnis /root.
sbsd0001# cd /usr/ports/net/samba-devel
sbsd0001# make deinstall clean
Dies deinstalliert das in der ursprünglichen Version dieses Howtos verwendete Samba 3.0.0. Neuere Versionen von Samba 3.0.X sind neu unter /usr/ports/net/samba3 zu finden
sbsd0001# cd /usr/ports/net/isc-dhcp3
sbsd0001# make deinstall clean
Deinstalliert den im ursprünglichen Howto verwendeten ISC-DHCP3. Der neue ist nun unter /usr/ports/net/isc-dhcp3-server zu finden.
Ebenso für webmin
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make deinstall clean
14.2 Updaten des FreeBSD Basissystems
Eigentlich wird dies bereits mehr oder weniger im Kapitel 6. „FreeBSD up to date halten“ beschrieben. Da man sich daran jedoch ganz dolle die Finger verbrennen kann und unter Umständen seinen Server total neu aufsetzen muss beschreibe ich es hier noch einmal.
Zuerst müssen Sicherheitseinstellungen wieder rückgängig gemacht werden, um das System updaten zu können.
Das heisst zuerst ist wieder die /etc/fstab dran.
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen folgendermassen:
für /home rw
für /tmp rw
für /usr rw
für /var rw
Ebenfalls rückgäng machen müssen wir das Setzen von ein paar schg-Flags.
sbsd0001# chflags noschg /bin/*
sbsd0001# chflags noschg /sbin/*
sbsd0001# chflags noschg /usr/sbin/*
sbsd0001# chflags noschg /boot/kernel
Nun wieder das cvs-supfile editieren mit VI.
sbsd0001# vi /root/cvs-supfile
Dort ist vor allem folgende Zeile wichtig.
src-all tag=RELENG_5_1
Denn diese Zeile besagt, auf welche Version wir updaten wollen, bzw. für welche Version Sicherheitspatches eingespielt werden müssen. Falls man noch FreeBSD 5.1 installiert hat, würde ich hier mal raten, ganz auf das aktuelle FreeBSD 5.2.1 umzustellen. Also
src-all tag=RELENG_5_2
Wichtig: Bei Updates auf unterschiedliche Versionen (also hier 5.1 und 5.2.1) unbedingt die Release Notes und den Early Adopter’s Guide auf der FreeBSD Homepage www.freebsd.org lesen! Sonst kann man beim Upgrade deftig ins Messer laufen!
Nachdem wir /root/cvs-supfile angepasst haben, lassen wir wieder CVSUP durchlaufen.
sbsd0001# /usr/local/bin/cvsup /root/cvs-supfile
Nun kommt wieder der „buildworld“.
sbsd0001# cd /usr/src
sbsd0001# make buildworld
Nun wieder einen Kernel bauen. Falls man nur Sicherheitspatches eingespielt hat, oder man sicher ist, dass man bei einem Versionswechel nichts Neues im Kernel haben will, kann man wieder die alte MYKERNEL (siehe Kapitel 6) Datei kompilieren.
sbsd0001# cd /usr/src
sbsd0001# make buildkernel KERNCONF=MYKERNEL
Neugebackenen Kernel installieren.
sbsd0001# make installkernel KERNCONF=MYKERNEL
Neustarten.
sbsd0001# reboot oder shutdown -r now
System in den Single-User-Modus fahren.
sbsd0001# shutdown now
Nun müssen wir noch das root-Passwort eingeben und wir sind im Single-Mode.
Mergemaster durchführen.
sbsd0001# mergemaster -p
Kompilierte Binaries installieren:
sbsd0001# cd /usr/src
sbsd0001# make installworld
Mergemaster Teil 2 durchführen.
sbsd0001# mergemaster
Nun ist wieder ein Neustart fällig.
sbsd0001# reboot oder shutdown -r now
Somit ist das Basissystem inkl. Ports wieder up to date und wir können die Securityeinstellungen nach dem Neustart wieder vornehmen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
sbsd0001# chflags schg /boot/kernel
sbsd0001# vi /etc/fstab
Dort ändern wir die Optionen wieder wie folgt:
für /home rw,nosuid,nodev
für /tmp rw,nosuid,noexec,nodev
für /usr rw,nodev
für /var rw,nosuid,noexec,nodev
14.3 Updaten der Programme Samba, Webmin und ISC-DHCP3
Eigentlich ist das Updaten der Programme simpel. Nachdem Updaten des Basissystems inkl Ports einfach die Programme wieder aus den Ports einspielen.
Samba 3.0.X
sbsd0001# cd /usr/ports/net/samba3
sbsd0001# make install clean
ISC-DHCP3
sbsd0001# cd /usr/ports/net/isc-dhcp3-server
sbsd0001# make install clean
Webmin
sbsd0001# cd /usr/ports/sysutils/webmin
sbsd0001# make install clean
Jedoch gilt zu beachten, dass die Programme mit neuen Versionen auch neue Funktionen enthalten können bzw. dass alte nicht mehr vorhanden sind. Somit läuft unser Fileserver nach dem Upgrade auch evtl. nicht mehr. Leider würde es den Umfang dieses Howtos sprengen, immer wieder auf neue Programmversionen einzugehen.
Ich kann jedoch sagen, dass ich ein Upgrade von FreeBSD 5.1 auf FreeBSD 5.2.1 und den neuesten Versionen von Samba, Webmin und dem ISC-DHCP3 ohne unlösbare Probleme überstanden habe. Vor allem habe ich festgestellt, dass die Startupskripte der verschiedenen Programme gerne geändert werden. So musste ich beispielsweise die Datei /usr/local/etc/rc.d/samba.sh nochmals neu erstellen durch überschreiben mit der Datei /usr/local/etc/rc.d/samba.sh.sample. Weiter musste ich das Setupskript von Webmin nochmals ausführen und neuerdings startet sich der Webmin 1.150 mit /usr/local/etc/webmin/start bzw. stoppt sich mit /usr/local/etc/webmin/stop und nicht mehr über das webmin-Skript in /usr/local/etc/rc.d.
Wichtig ist zum Abschluss des Updates, dass wir nochmals die schg-Flags setzen.
sbsd0001# chflags schg /bin/*
sbsd0001# chflags schg /sbin/*
sbsd0001# chflags schg /usr/sbin/*
sbsd0001# chflags schg /boot/kernel
15. Schlusswort
Wenn ihr bis hier gelesen habt, erstmal Gratulation! Schliesslich besteht mein Howto aus etwas mehr als 25 A4-Seiten. Ich hoffe, ihr hab euch nun einen FreeBSD Fileserver konfigurieren können. Falls ihr Konfigurationsfehler, Unzulänglichkeiten oder auch Rechtschreibfehler findet, bitte ich euch, die hier mitzuteilen, damit ich meine Anleitung anpassen kann.
Ich versuche auch, das Howto zu erweitern, so habe ich vor, noch etwas über die Konfiguration von CUPS und evtl. auch etwas über FreeBSD, Samba und OpenLDAP zu schreiben.
-Highfish-
Zuletzt bearbeitet: