FreeBSD
FreeBSD ist ein modernes Betriebssystem für x86 kompatible (einschließlich Pentium® und Athlon™), amd64 kompatible (einschließlich Opteron™, Athlon 64 und EM64T), Alpha/AXP, IA-64, PC-98 und UltraSPARC®-Architekturen. Für weitere Infos schaut man am Besten auf der FreeBSD-Homepage.
Meine Empfehlungen beziehen sich auf den FreeBSD 5.x release - sind aber meist ohne Anpassungen auch auf 4.x anwendbar.
Inhaltsverzeichnis
|
Grundinstallation
CD & Installation vorbereiten
Zunächst muss einmal ein lauffähiges ISO erstellt werden. Am besten sucht man sich einen nahegelegenen Mirror.
Schweizer profitieren von der schnellen Anbindung bei Switch.
Folgende Punkte sind empfehlenswert zu beachten während der Installation:
- Minimal-Distribution bei der Installation wählen
- Ports grad mitinstallieren von Anfang an ("The FreeBSD Ports collection")
- Netzwerkkonfiguration schon durchführen
- Sourcen für einen späteren Kernel-Eigenbau schon mitkopieren lassen
- Einen zusätzlichen User anlegen - dieser muss in der Gruppe wheel sein, um mittels su root-Rechte zu erlangen
Als Grundlage wird davon ausgegangen, dass der Server Zugang zum Internet hat.
Disklayout
Bei der installation sollte man darauf achten, dass genügend Platz für /var sowie /tmp verfügbar ist. /tmp wird zu einem späteren Zeitpunt als "noexec" (sprich: man kann nichts ausführen darauf) gemounted.
Bei Erstellung des Swap-Space gilt folgende Faustregel: Swap = 2x Memory. Das heisst, wenn der Server 1Gb RAM hat, dass man 2Gb Swap zur verfügung stellt.
Beim Disklayout halte ich mich immer so an etwa folgendes Schema:
/dev/ar0s1a 7.7G 51M 7.1G 1% / devfs 1.0K 1.0K 0B 100% /dev /dev/ar0s1e 3.9G 36K 3.6G 0% /tmp /dev/ar0s1f 157G 1.6G 143G 1% /usr /dev/ar0s1d 7.7G 26M 7.1G 0% /var
Datenverzeichnisse
Ich persönlich mache mir immer ein Datenverzeichnis, wo ich alle meine wichtigen Sachen speichere: Das sieht etwa so aus:
/usr/data Datenverzeichnis /usr/data/www WWW Daten /usr/data/www/server Serverdaten /usr/data/www/databases MySQL Daten /usr/data/www/server/bin Binary tools /www -> /usr/data/www Softlink
-su-2.05b# mkdir -p /usr/data/www -su-2.05b# ln -s /usr/data/www /www
Netzwerk Konfiguration
Einfach kann man via sysinstall die Netzwerkkonfiguration machen. Man sollte auf jedenfall wissen, wie das Interface heisst, dass man benötigt.
Dazu kann man entweder den Bootvorgang beachten (oder dmesg ausführen):
-bash-2.05b$ dmesg | less .... fxp0: <Intel 82551 Pro/100 Ethernet> port 0xcc00-0xcc3f mem 0xfe6a0000-0xfe6bffff,0xfe6fe000-0xfe6fefff irq 17 at device 1.0 on pci3 miibus0: <MII bus> on fxp0 inphy0: <i82555 10/100 media interface> on miibus0 inphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto fxp0: Ethernet address: 00:04:23:b3:6d:6f ...
Um die Einstellung dauerhaft in der Konfiguration zu speichern, muss man dies entsprechend im /etc/rc.conf abspeichern (ist beim nächsten Neustart aktiv):
# Network defaultrouter="10.10.1.1" hostname="temp.mrmouse.ch" ifconfig_fxp0="inet 10.10.1.25 netmask 255.255.255.0"
Natürlich kann man jederzeit im laufenden Betrieb die Parameter abändern:
-bash-2.05b# ifconfig fxp0 10.10.1.25 netmask 255.255.255.0 up
-bash-2.05b# ifconfig fxp0
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 10.10.1.25 netmask 0xfffffff8 broadcast 10.10.1.255
ether 00:04:23:b3:6d:6f
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
Für das Routing lässt sich das Standard-Gateway wie folgt hinzufügen:
-su-2.05b# route add default gw 10.10.1.1 add net default: gateway gw
Mittels netstat -rn kann man auch die Routing-Tabelle kontrollieren.
Anpassungen an /etc/resolv.conf
In der Regel packt FreeBSD während der Installation nur einen DNS Server rein. Dies holt man am Besten nach der Installation nach und editiert /etc/resolv.conf:
domain mrmouse.ch nameserver 81.94.97.92 nameserver 81.94.97.91
Natürlich passt man diese Angaben gemäss den Angaben seines Providers / seiner Nameserver-Infrastruktur an.
Allgemeine Anpassungen an /etc/rc.conf
Im /etc/rc.conf werden Startoptionen definiert. Falls die Datei noch nicht existiert, kann man sie ruhig erstellen - wird aber mit Sicherheit schon existent sein:
# where to get randomseed rand_irqs="11 5 10" # Defaults sshd_enable="YES" usbd_enable="NO"
Allgemeine Anpassungen an /etc/make.conf
Diverse optimerungen würde ich von Anfang an ins /etc/make.conf reinpacken. Falls die Datei noch nicht existiert, kann man sie ruhig erstellen.
# Divert USA_RESIDENT=NO MAKE_IDEA=YES WITHOUT_IPV6=yes # Wer IPv6 einsetzen will, lässt dies weg NO_GUI=yes # Man will kein X # Compiler CFLAGS= -O -pipe COPTFLAGS= -O -pipe
Allgemeine Anpassungen an /boot/loader.conf
Diverse optimerungen würde ich von Anfang an ins /etc/loader.conf reinpacken:
autoboot_delay="2" # Delay in seconds before autobooting load_agp="YES" # ist nicht schlecht... :) kann nicht schaden loader_color="YES" # color output
Ports Collection
Am einfachsten ist es, die Ports-Collection via sysinstall zu installieren. Ansonsten gibt es im FreeBSD-Handbook eine Anleitung.
Ports suchen ...
Am einfachsten sucht man in den ports nach dem Namen oder einem Keyword. Dazu muss man im Verzeichnis /usr/ports befinden.
Die Syntax ist:
make search key="<keyword>"
oder
make search name="<keyword>"
Wie zum Beispiel:
-su-2.05b# cd /usr/ports/ -su-2.05b# make search name=cacti Port: cacti-0.8.6d Path: /usr/ports/net/cacti Info: Web-driven graphing interface for RRDTool Maint: sem@FreeBSD.org B-deps: mysql-client-4.1.11_1 R-deps: apache-1.3.33_1 expat-1.95.8_1 mysql-client-4.1.11_1 net-snmp-5.2.1_2 perl-5.8.6_2 php4-4.3.11 php4-mysql-4.3.11 php4-pcre-4.3.11 php4-session-4.3.11 php4-xml-4.3.11 rrdtool-1.0.49 WWW: http://www.cacti.net
... und installieren
Entweder wechselt man in das entsprechende Verzeichnis und gibt make install clean ein:
-su-2.05b# cd /usr/ports/net/cacti -su-2.05b# make install clean
Oder man installiert die Ports mit portinstall (wird mit dem portupgrade-paket mitinstalliert):
portinstall net/cati
Anschliessend werden in der Regel die Konfigurationsfiles im /usr/local/etc/ abgelegt. Einfach Outputs und Readme's beachten.
CVSUP Konfigurieren
FreeBSD lässt sich gut und einfach updaten. am besten packt man folgendes ins /etc/make.conf rein:
# CVSUP Informations SUP_UPDATE = yes SUP = /usr/local/bin/cvsup SUPFLAGS = -g -L 2 SUPHOST = cvsup.ch.FreeBSD.org SUPFILE = /usr/share/examples/cvsup/stable-supfile #SUPFILE = /usr/share/examples/cvsup/standard-supfile PORTSSUPFILE = /usr/share/examples/cvsup/ports-supfile DOCSUPFILE = /usr/share/examples/cvsup/doc-supfile
Anstelle des cvsup.ch.FreeBSD.org könnt ist es am klügsten, wenn man den nächstgelegensten Mirror nimmt.
anschliessend installiert man cvsup-without-gui.
-su-2.05b# cd /usr/ports/net/cvsup-without-gui -su-2.05b# make install clean
Ein supfile sieht etwa so aus:
*default host=cvsup.ch.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_5 *default delete use-rel-suffix *default compress src-all
Portupgrade
Installieren
Zunächst installiert man den entsprechenden Port:
-su-2.05b# cd /usr/ports/sysutils/portupgrade/ -su-2.05b# make install clean
oder man nutzt portsnap:
-su-2.05b# portsnap fetch extract Looking up portsnap.FreeBSD.org mirrors... 4 mirrors found. Fetching public key from portsnap3.FreeBSD.org... done. Fetching snapshot tag from portsnap3.FreeBSD.org... done. Fetching snapshot metadata... done. Fetching snapshot generated at Tue Oct 9 03:03:16 CEST 2007: 784c15b80b6a2357191b7403ca622e9cb1c2c097ea3fd0100% of 49 MB 2119 kBps 00m00s Extracting snapshot... done. Verifying snapshot integrity... done. ....
Ports-DB updaten
Und anschliessend führt man ein Update durch:
-su-2.05b# cd /usr/ports/ -su-2.05b# make update
anschliessend dauert es eine Zeitlang, bis die Daten aktualisiert sind:
-------------------------------------------------------------- >>> Running /usr/local/bin/cvsup -------------------------------------------------------------- Parsing supfile "/usr/share/examples/cvsup/ports-supfile" Connecting to cvsup.ch.FreeBSD.org Connected to cvsup.ch.FreeBSD.org Server software version: SNAP_16_1h Negotiating file attribute support Exchanging collection information Establishing multiplexed-mode data connection Running Updating collection ports-all/cvs Edit ports/LEGAL Add delta 1.405 2005.05.07.09.55.42 linimon Edit ports/dns/nsd/scripts/configure.nsd Add delta 1.2 2005.05.06.11.50.25 novel Edit ports/editors/code-browser/Makefile Add delta 1.6 2005.05.08.20.22.33 jylefort Edit ports/editors/code-browser/distinfo .... Shutting down connection to server Finished successfully
Ich habe zudem folgende Zeilen in der Datei /etc/daily.local. Damit werden täglich (oder besser nächtlich) die Betriebssystem- und Ports-Sourcen upgedated:
/usr/local/bin/cvsup -g -L 2 /usr/share/examples/cvsup/stable-supfile /usr/local/bin/cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile
als schnellere Alternative kann man auch mit portsnap arbeiten:
-su-2.05b# portsnap fetch update
Versionen prüfen
Um anschliessend sämtliche Ports anzuschauen (inkl. Versionsinformation) kann man folgendes eingeben:
-su-2.05b# pkg_version -v
Upgraden von einzelnen Ports
Nachdem Sie die Ports-Collection auf den neusten Stand gebracht haben, lesen Sie bitte /usr/ports/UPDATING (Link zur aktuellsten Version) bevor Sie einen Port aktualisieren. In dieser Datei werden Probleme und zusätzlich durchzuführende Schritte bei der Aktualisierung einzelner Ports beschrieben.
Und das Upgraden der Ports geht wie folgt:
-su-2.05b# portupgrade -a -i
-i = interaktiv; vor jedem Port wird nachgefragt, ob man Upgrade möchte.
-a = alle installierten Ports
noch nützlich: -rR = mit Abhängigkeiten rekursiv ab- und aufwärts
alternativ können auch manuell ports geupgraded werden:
-su-2.05b# pkg_version -v ... netpbm-10.26.6 < needs updating (port has 10.26.8) ... -su-2.05b# portupgrade netpbm-10.26.6
Und eine Liste derjenigen Ports, die einen Upgrade benötigen gibts mit:
-su-2.05b# pkg_version -vl "<" linux-sun-jdk-1.4.2.06_1 < needs updating (port has 1.4.2.08_1) openoffice-1.1.3_1 < needs updating (port has 1.1.4_2)
Sicherheit der Ports (Portaudit)
Für die Sicherheit zu den Ports wurde eine eigene Datebank ähnlich zur Ports Collection entwickelt. Dies heisst Portaudit.
Bash
Ich brauche einfach eine normale Bash, um arbeiten zu können ;-)
-su-2.05b# cd /usr/ports/shells/bash/ -su-2.05b# make install clean
Während der Installation wird die neue Bash in die Liste der erlaubten Shells eingetragen:
-su-2.05b# cat /etc/shells # $FreeBSD: src/etc/shells,v 1.5 2000/04/27 21:58:46 ache Exp $ # # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/sh /bin/csh /bin/tcsh /usr/local/bin/bash
Anschliessend muss man nur noch bei den entsprechenden Usern die Bash ändern (und allfällige andere Infos):
-su-2.05b# chsh steven #Changing user information for steven. Login: steven Password: $1$<gehteuchnixan> Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/steven Shell: /usr/local/bin/bash Full Name: Steven Glogger Office Location: Office Phone: Home Phone: Other information:
Einfach dann mit :x <enter> den Editor schliessen (alternativ: :w <enter> :q <enter>, alternativ: ZZ).
Kernel & World
Der Kernel ist das zentrale Kernstück des FreeBSD Betriebssystems. Er ist unter anderem für die Speicherverwaltung, die Sicherheit, das Netzwerk, die Festplatte, etc. verantwortlich. Ein optimaler Kernel ermöglicht optimalste Ergebnisse. Im weiterführenden Link findet man, wie man den Kernel unter FreeBSD selber machen kann.
NTP Synchronisierung
Um die Genauigkeit der Logs und des Systems zu gewährleisten will man die Zeit mit einem NTP-Server (Network Time Protocol) synchronisieren. Im Internet findet man vielerorts eine Liste der frei benutzbaren NTP-Server [1]. Ich selbst bevorzuge den Timeserver der ETH Zürich: swisstime.ethz.ch.
Einrichten der Synchronisierung
Details sind im FreeBSD-Handbuch beschrieben.
zunächst trägt man im /etc/rc.conf ein:
# NTP Server ntpdate_enable="YES" ntpdate_flags="-b" ntpd_enable="YES"
anschliessend konfiguriert man den entsprechenden Time-Server im /etc/ntp.conf:
server swisstime.ethz.ch restrict default ignore driftfile /var/db/ntp.drift
Anschliessend bootet man den Server um die Änderung aktiv werden zu lassen oder führt folgenden Befehl aus:
-su-2.05b# /etc/rc.d/ntpd start
Perl
Man sagt eigentlich, dass man Perl immer in der Base-Installation nutzen soll. Ich packe aber nie Perl grad von Anfang an mit sondern installiere Perl aus den Ports. Zumal eigentlich Perl ab FreeBSD 5.x nicht mehr im Base System dabei ist.
-su-2.05b# cd /usr/ports/lang/perl5.8/ -su-2.05b# make install clean
Sollte Perl doch noch rumgeistern aus der Base-Installation muss man unbedingt noch ausführen:
-su-2.05b# use.perl port
Sicherlich sollte am Schluss /etc/make.conf folgende Zeilen vorfinden:
# added by use.perl 2005-04-29 01:02:07 PERL_VER=5.8.6 PERL_VERSION=5.8.6
Nach einem Perl upgrade (ab Perl 5.8.7)
Nach einem Perl-Upgrade gibts ab und zu dumme Abhängigkeiten. Eigentlich müsste man dann alle Ports neu installieren oder linken, damit das ganze wieder stimmt. Aber es geht auch einfacher mit perl-after-upgrade. Ohne die Option -f wird das ganze zunächst simuliert:
-su-2.05b# perl-after-upgrade amavisd-0.1_3,1: 0 moved, 0 modified, 0 adjusted ... p5-IO-Zlib-1.04_1: 3 moved, 0 modified, 7 adjusted p5-Mail-Tools-1.66: 41 moved, 0 modified, 58 adjusted p5-MIME-Base64-3.05: 7 moved, 0 modified, 12 adjusted ... portupgrade-20041226_5: 0 moved, 0 modified, 0 adjusted \ --- Fixed 16 packages (223 files moved, 2 files modified) Skipped 54 packages **** In addition, please pay attention to the following: The /usr/local/sbin/snmpd binary would be modified, make sure it works The /usr/local/sbin/snmptrapd binary would be modified, make sure it works --- Repeating summary: Fixed 16 packages (223 files moved, 2 files modified) Skipped 54 packages
Jetzt kann man das ganze richtig machen:
-su-2.05b# perl-after-upgrade -f
MySQL
Da dies doch relativ viel Platz einnimmt, habe ich dem ein eigenes Kapitel gewidet.
Netzwerkdienste
snmpd
Log/Syslog abschalten:
snmpd_flags="-Lf /dev/null"
Apache
Siehe Kapital das separate Kapitel über Apache.
PHP
Siehe das Kapitel PHP.
ProFTPD
Für ausführliche Infos wie man ProFTPD & MySQL-Backend unter FreeBSD hinkriegt, der sollte unter dem Separaten Kapitel nachschauen.
DNS (Bind)
Standardmässig ist der Bind DNS Server in der Version 9 installiert. Um ihn zu aktivieren muss man folgendes ins /etc/rc.conf eintragen:
# DNS Server named_enable="YES"
Anschliessend muss man nur noch den Server neu starten oder den DNS Service:
-su-2.05b# /etc/rc.d/named start
Sollte man Probleme haben, so findet man in den Bind9 Manual Pages einige Unterstützung.
E-Mail Server
Postfix
Postfix installieren von den Ports
-bash-2.05b$ cd /usr/mail/postfix -bash-2.05b$ make install clean
Normalerweise sollte das Install-Script den User fragen ob man Postix als Sendmail-Ersatz installiert haben will. Diese Frage beantwortet man mit 'y'. Sollte diese Frage nicht erscheinen muss man von Hand das File /etc/mail/mailer.conf anpassen dass es folgenden Inhalt hat:
# # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail # sendmail /usr/local/sbin/sendmail send-mail /usr/local/sbin/sendmail mailq /usr/local/sbin/sendmail newaliases /usr/local/sbin/sendmail
Danach muss der Sendmail des Base-Systems abgeschaltet werden. Um dies zu erreichen müssen einige Files angepasst werden.
/etc/rc.conf:
sendmail_enable="YES" sendmail_flags="-bd" sendmail_pidfile="/var/spool/postfix/pid/master.pid" sendmail_procname="/usr/local/libexec/postfix/master" sendmail_outbound_enable="NO" sendmail_submit_enable="NO" sendmail_msp_queue_enable="NO"
/etc/periodic.conf:
daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO"
Cyrus Imapd
Siehe Cyrus Imapd
Sendmail
Siehe das Kapitel Sendmail.
Spamassassin
Im folgenden Link gibt es Details zur Installation von SpamAssassin mit MySQL Backend.
Antivirus
Unter Sendmail wurde dieses Howto in das entsprechende Unterkapitel publiziert.
Firewall (ipfw)
Siehe xyz
Diverse Hinweise / Notizen
Hier eine kleine Sammlung von nützlichen Hinweisen, Notizen und Bemerkungen zu diversen Tools, Ports, etc.
- SSH
- Sicherheit der installierten Ports
- Beispiels /etc/make.conf
- Beispiels /etc/rc.conf
dos-attacken
http://www.onlamp.com/pub/a/bsd/2004/06/24/anti_dos.html
Weblinks
Allgemein
- Die offizielle FreeBSD Homepage
- Das BSD Foren Wiki mit vielen Tips
- Das deutsche BSD Forum
- O'Reillys BSD Forum
- Gute BSD Guides
Ports