FreeBSD

Aus Wiki.hidden.ch
Wechseln zu: Navigation, Suche

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.


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.


dos-attacken http://www.onlamp.com/pub/a/bsd/2004/06/24/anti_dos.html


Weblinks

Allgemein

Ports


Apache