FreeBSD Samba PDC Howto

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:

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! :D 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:
Sehr sehr ausführliches und gutes Tutorial,

klappt auch alles ohne Probleme.

Alle User haben innerhalb der Domäne dann "nur" Benutzerrechte auf dem lokalen Computer. Natürlich kann man das auf jedem Rechner lokal einstellen. Wenn ich aber 150 Rechner habe ist das schlecht. Wie kann ich die Rechte denn direkt mit über Samba vergeben, oder geht das nicht?

MFG

CAT
 
das howto ist einfach nur super


gibts das auch als schönes pdf oder ähnlichem?
 
Zuletzt bearbeitet von einem Moderator:
hallo highfish !

danke für dein super samba how to ! wirklich genial !!!!

allerdings kommt bei mir folgender fehler ..und ich habe alles so gemacht, wie du geschr hast..hat soweit auch alles geklappt...

Code:
server# pdbedit -a -u root

nach der eingabe kommt bei mir folgendes:

Code:
Conversion from UCS-2LE to CP850 not supported
Conversion from UTF8 to CP850 not supported
Conversion from ASCII to CP850 not supported
Conversion from CP850 to UCS-2LE not supported
Conversion from CP850 to UTF8 not supported
Conversion from CP850 to ASCII not supported
Conversion from CP850 to UTF8 not supported
Conversion from UTF8 to CP850 not supported
tdbsam not compiled in!
pdb backend tdbsam did not correctly init (error was NT_STATUS_UNSUCCESSFUL)
Loading tdbsam failed!
Can't initialize passdb backend.

würde mich wirklich sehr über ne antwort von dir freuen !!!!
 
hobby schrieb:
hallo highfish !


nach der eingabe kommt bei mir folgendes:

Code:
Conversion from UCS-2LE to CP850 not supported
Conversion from UTF8 to CP850 not supported
Conversion from ASCII to CP850 not supported
Conversion from CP850 to UCS-2LE not supported
Conversion from CP850 to UTF8 not supported
Conversion from CP850 to ASCII not supported
Conversion from CP850 to UTF8 not supported
Conversion from UTF8 to CP850 not supported
[FONT=Arial Black]tdbsam not compiled in![/FONT]
pdb backend tdbsam did not correctly init (error was NT_STATUS_UNSUCCESSFUL)
Loading tdbsam failed!
Can't initialize passdb backend.

Du hast wohl was vergessen oder nicht einkompiliert. Hast das Samba aus den Ports installiert?
 
ja habe es aus den ports installiert....
muss ich also nur tdbsam aus den ports installieren ???

aber eines macht mich eh noch stuzig..anpingen kann ich meinen server...wemin geht auch übers netz usw...aber ich sehe meinen server nicht inna netzwerkumgebung und kann mich auch bisher nicht auf der domäne VERSUCHEN anzumelden..das sollte aber eigentlich schon gehn hmm?

:(
:(
danke für deine schnelle antw cat1510 !
:)
 
Also wenn du nochmal in den Port net/samba-devel und dort make config eintippst sollte ein grosses Fenster kommen.

Schmeiss alles raus, was Du nicht brauchst.Muss mal schauen, was ich drin habe.
Ich habe nur ACL Support, Syslog, UTMP, MSDFS mit kompiliert.

Wichtig ist, dass Du in Deiner /usr/local/etc/smb.conf stehen hast:

[global]
workgroup = BYTEWORKER
netbios name = GATEWAY
server string = GATEWAY
security = DOMAIN
passdb backend = tdbsam
log file = /var/log/samba/log.%m
max log size = 50
load printers = No
logon script = scripts\%U.cmd
logon path = \\%L\profiles\%U
domain logons = Yes
os level = 65
hosts allow = 10.0.0.
interfaces = fxp0
bind interfaces only = yes
preferred master = Yes
domain master = Yes
wins support = Yes

So als Auszug. wenn alles nicht klappt poste mal bitte Deine smb.conf. ok?

Schnell?!?! Da stehen wir doch drauf....
 
hmm...sollte ich dann über das make config den tdbsam mit installieren / komp ja ?
jedenfalls kommt bei der eingabe (leider) folgendes:

Code:
server# pwd
/usr/ports/net/samba-devel
server# make config
make: don't know how to make config. Stop

mit smb.conf schau ich mir ma gschwind an...

wenn das teil läuft mach ich 3 kreuze !!!!
;)
 
so..jetzt meine global einstellungen:
Code:
[global]
        workgroup = HOBBYLAN
        netbios name = SERVER
        server string = Server
        interfaces = rl0
        bind interfaces only = Yes
        security = DOMAIN
        map to guest = Bad User
        passdb backend = tdbsam
        log file = /var/log/samba/log.%m
        max log size = 50
        load printers = No
        logon script = logon.cmd
        logon path = \\%L\profiles\%U
        logon drive = p:
        logon home = \\%L\%U
        domain logons = Yes
        os level = 65
        preferred master = True
        domain master = True
        hosts allow = 192.168.1.

und hier noch kurz die testparm meldung:

Code:
Load smb config files from /usr/local/etc/smb.conf
Processing section "[tinypub]"
Processing section "[homes]"
Processing section "[Netlogon]"
Processing section "[Profiles]"
Processing section "[hobby]"
Conversion from UCS-2LE to CP850 not supported
Conversion from UTF8 to CP850 not supported
Conversion from ASCII to CP850 not supported
Conversion from CP850 to UCS-2LE not supported
Conversion from CP850 to UTF8 not supported
Conversion from CP850 to ASCII not supported
Conversion from CP850 to UTF8 not supported
Conversion from UTF8 to CP850 not supported
Loaded services file OK.


weiß jemand, um mir vielleicht helfen zu können ???

danke im vorraus !
:-)

bye
 
ist ganz einfach normalerweise.

Hast Du die ports ausgecheckt bevor Du samba-devel installiert hast?
 
erm..wie..die prots ausgecheckt ????

ich habe mal einen smb server unter suse erfolgreich hinbekommen...

aber was meinst du mit welchen ports auschecken ??

sorry, bin ein bsd greenhorn *schäm*
:/
 
ohhh

also BSD Rechner kann online gehen ok?
Schau mal nach ob in /usr/ports schon was drinsteht

Wenn nicht:

# pkg_add -rv cvsup-without-gui

wenn fertig
#cd /etc
#fetch http://www.byteworker.com/freebsd/script/supfile
#rehash
#cvsup -L2 /etc/supfile

dann roedelt der ein bisschen. solltest dem die Leitung auf jeden Fall frei machen.
Wenn DU ISDN hast solltest das nicht machen, sondern Dich erst wieder melden.
 
hey cat1510,

den ersten befehl kam ne meldung das ich es schon wohl installiert habe..
und der batch da der hat ja EWIG (!!!!!!!) gedauert (aDSL)..aber jetzt ist er fertig

Code:
Finished successfully

:-)


habe ich jetzt so ziemlich alle ports installiert die es gibt oder wie ?

bin ja gesapnnt, was als nächstes kommt..wäre einfac super wenn das bald laufen würde !!!

Finds total nett hier, dass sie so leute wie du zB um einen kümmern !
Werde der community auch treuheit schwören !!
:)))
 
danke fuer die Blumen. andere haben mir auch geholfen, als ich gefragt habe. Nun kann ich auch mal helfen oder?

geh mal nach
# cd /usr/ports/net/samba-devel
#make deinstall
#make config

Dann waehlst alles aus, was Du brauchst.
# make install
und dann baut der alles nochmal zusammen. Zumindest Samba.
Wenn der fertig ist sollte es einwandfrei klappen.
Viel Spass.

Wennst nicht weiterkommst weisst ja wohin schreiben. ;o)
 
erm..ok, mach ich,

also kann ich dann u.a. auch TDBSAM auswählen, richtig ?

und dann noch ne frage...ich habe ja jetzt alles wie oben geändert..zB auch die verschl. auf blowfish usw...

das is aber schon korrekt ne ?

und dann noch...
ne das heißt ich porbier dann erstmal---und wenn ich den server dann immernoch net inna netzwerkumgebung sehe bzw die domöne zum anmelden noch net ma bereitsteht *schrei* ich einfach wieder !!
:)


ne wirklich super hier...
ich denke das is auch nen vorteil bei einem exoten wie zB BSD...bei den "0815" dingen is alles nicht so familiär wie hier..naja du weißt sicherlich was ich meine ;)

also bis später sicherlich :))
 
erm...das folgende scheint ja nur um man´szu gen, oder is das wichtig ?
Code:
===>  Installing for expat-1.95.7
===>   Generating temporary packing list
===>  Checking if textproc/expat2 already installed
===>   An older version of textproc/expat2 is already installed (expat-1.95.6_1)
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of textproc/expat2
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1

Stop in /usr/ports/textproc/expat2.
*** Error code 1

Stop in /usr/ports/devel/gettext.
*** Error code 1

Stop in /usr/ports/devel/gettext.
*** Error code 1

Stop in /usr/ports/devel/p5-Locale-gettext.
*** Error code 1

Stop in /usr/ports/misc/help2man.
*** Error code 1

Stop in /usr/ports/devel/autoconf.
*** Error code 1

Stop in /usr/ports/net/samba-devel.
server#

sorry, falls ich ein wenig "nerve"...aber ich möchte einfach diesmal, dass es läuft ;)

ich werde jetzt wie im tut hier beschr. die punkte zu SMB so ausführen...
 
die tdbsam ist gehoert zu der SambaEdition dazu. Die wird installiert, ob Du willst oder nicht.

Das was Highfish alles geaendert hat am System hat mit dem Samba so nix zu tun.
Aber wie sicher der das gemacht hat ist schon der Hammer oder? *g Paranoid.

Alles klar, dann viel Spass. FBSD ist kein Exot sondern ein ServerOS. ;)

Wusstest Du, dass zum Beispiel yahoo komplett auf BSD basiert?
 
ja ich lass das jetzt laufen und geh dann mal in die kiste...

aber du sage mal...im ernst...wäre es nicht vielleicht sinnvoller wenn ich mein system nochma GANZ platt mache =? wg der ganzen smb hin und her und mit webmin findet er die module nicht usw..

wäre es am cleversten wenn ich das system neu aufsetz und dann deine zwei schriutte durchführe (1)dieses sup-script von deinem server und dann 2)protupgrade

möchte das bloß planen :)

dann mach ich das morgen alles nochma von ganz vorne
:))

gute nacht!

wenn das alles läuft lade ich dich sicherlich mal auf nen bier ein ;-))))
aber natürlich nur auf ein NORDISCH frisches flensburger :-P
 
ach ja mein system:

Microsoft Windows XP Professional (5.1 - 2600) CPU: 1-AMD , 1145MHz, 256KB Uptime: 2hrs 58secs HD Space Free (C: 1589.45MB) (D: 4337.61MB) (E: 0MB) (F: 0MB) (G: 0MB) Installed for 1791wks 6days 20hrs 41mins 38secs Time 22:41:38 @ Wednesday 5 May 2004 RAM Usage: 261/512MB (50.98%) Res.(1280x1024) .


allerdings nervt mich das olle XP wieder so das es für die nächsten 6monate mind wieder reicht und ich mein weniger verhasstes win2k aufbügel...

gN8
 
Wenn Du das neubuegelst, dann machen wir das ganz anders.
Hast ein BSD Image? Welche Vers?
Und dann schick mir ein PM oder ICQ steht alles da.
Dann zeig ich Dir gern mal was man machen kann....
Ciao

CAT
 
Problem

Hallo, ich habe alles soweit eingerichtet und funktioniert auch.


Nu kann ich kein Serverprofil mit XP Home einrichten gibt es da eine Möglichkeit?



Viele Grüße
 
XP Workstation

onegroup schrieb:
Hallo, ich habe alles soweit eingerichtet und funktioniert auch.


Nu kann ich kein Serverprofil mit XP Home einrichten gibt es da eine Möglichkeit?


Diese Frage habe ich auch, hate vor Monaten auch Samba drauf und konnte mich nicht mit XP an der Sambadomäne anmelden??????? Wäre mal interesant, da ich nach einigen Wochen aufgegeben habe!
 
Problem 2

Naja das tolle ist ich habe keine Umlaute mehr mist.


Hab als tastatur keymap="german.cp850"
und in samba probiert geht aber nichts.


#character set = ISO8859-1
#unix charset = ISO8859-1
dos charset = 850#unicode = yes
#display charset = ISO-8859-15
#dos charset = 850
#unix charset = ISO-8859-15
character set = ISO8859-1
client code page = 850

hat jemand ein Tip?
 
@djscheff

Aehm WinXP Home Edition kann sich nicht an einer Domain anmelden. Darum ist es auch nur das billige Home Edition.

@onegroup
Dann macht es auch keinen Sinn serverbasierte Profiles zu haben oder?

Mit den Umlauten verstehe ich Dein Problem nicht?
Im Samba wuerde ich nichts umstellen, denn es unterstuetzt von Hause aus Umlaute.
Wichtig ist die Reihenfolge, in der Du Dateien kopierst. Das soll heissen, zuerst ein share einrichten und dann von Windoof darauf schreiben, dann klappt es auch mit den Umlauten.

CAT
 
Zurück
Oben