Installation eines FreeBSD 6.1 Systems

Betrifft OS:
FreeBSD

Das hier vorgestellte Verfahren ist als Grundlage für einen FreeBSD Server auf der Basis einer x86 Hardware. Da ich nur mit älterer Hardware oder mit MiniITX Boards BSD nutze kann ich für moderne Prozessoren keine Aussage treffen. Bitte beachten, dass ich eigentlich alles was hier steht bei anderen abgeschrieben habe. Ich bedanke mich ausdrücklich und hoffe keinerlei Rechte zu verletzen.

Installation des Betriebssystems von CD

  1. Falls das Laufwerk nicht erkannt wird, so sollte der LBA Modus im BIOS eingestellt werden um auch größere Platten anzusprechen. Die BIOS Einstellungen der Platte sollten dann bei der Angabe der Disk Geometrie angegeben werden.
  2. Falls die Netzwerkkarten Probleme machen, so sollte ausprobiert werden den ACPI Modus im BIOS abzuschalten. Das hat bei mir immer dann geholfen, wenn die Netzwerkkarten immer einen Watchdog Timeout gemeldet haben.
  3. Das Portsystem muss installiert werden. Am besten gleich mit der Basisinstallation von CD.

Das Netzwerk muss eingerichtet werden

  1. Entweder DHCP nutzen oder die Adressen fest einstellen.
  2. Bei festen Adressen müssen die Daten in der /etc/rc.conf und in /etc/resolv.conf stimmen.
  3. Wenn hinter einem Proxy gearbeitet wird, so muss der Proxy angegeben werden. Dazu die Datei /root/.cshrc editieren. Beim nächsten Anmelden sollte es dann gehen. Zur Not ansehen ob die Umgebung gesetzt wurde (env).
# setenv HTTP_PROXY http://<Name des Servers>:<Port des Servers>
# setenv FTP_PROXY $HTTP_PROXY
# setenv ftp_proxy $HTTP_PROXY
# setenv http_proxy $HTTP_PROXY
# setenv FTP_PASSIVE 1

Die Ports müssen auf den neuesten Stand gebracht werden

  1. Bei FreeBSD 6.1 ist portsnap schon mit installiert
  2. Bei FreeBSD 5.4 folgendes machen
# cd /usr/ports/sysutil/portsnap
# make install clean

Das dauert dann bis alles übersetzt und empfangen wurde. Es muss eine Internetverbindung vorhanden sein. Danach wird die Konfiguration eingestellt.

# cd /usr/local/etc
# cp portsnap.conf.sample portsnap.conf

Jetzt kann der neueste Stand der Ports abgerufen werden.

# cd /usr/ports
# /usr/local/sbin/portsnap fetch

Das dauert einige Zeit. Es werden etwa 50MB aus dem Internet geladen. Danach wird das System ausgepackt.

# /usr/local/sbin/portsnap update

Wenn das nicht geht, dass sollte das folgende Kommando ausgeführt werden

# /usr/local/sbin/portsnap extract

Danach muss portupgrade installiert werden.

# cd /usr/ports/sysutils/portupgrade
# make install clean

Das dauert eine ganze Weile und installiert auch Ruby und anderes. Jetzt können die Ports auf den neuesten Stand gebracht werden

# portupgrade -a

Das sollte nur beim ersten mal direkt nach der Installation so gemacht werden. Später muss man sich die Ports ansehen, die verändert werden sollen. Den Status der Ports nach einem Update des Portsystems kann mit folgendem Kommando ermittelt werden.

# pkg_version -v

Updates auf Ports sollten dann mit

# portupgrade -R <Port Name>

durchgeführt werden um alle Ports mit zu verändern, zu denen der Port eine Abhängigkeit hat. ACHTUNG! Die Ports, die von diesem abhängig sind werden damit nicht verändert.

Installiere Portaudit

# cd /usr/ports/security/portaudit
# make install clean

Das folgende Kommando zeigt installierte Ports mit Sicherheitsproblemen an

 # portaudit -Fda
 Die angegebenen Ports sollten dann aktualisiert werden, nach dem nächsten %%portsnap%% Kommando.

Installiere Bash (optional)

# cd /usr/ports/shells/bash
# make install clean

Syslog so abschalten, dass es nur lokal verfügbar ist

Ermitteln, ob Syslog auf Port 514 lauscht.

# sockstat -4

Editiere die Datei /etc/rc.conf. Damit wird sichergestellt, dass Syslog läuft und keine Meldungen von außen annimmt.

syslogd_enable="YES"
syslogd_flags="-ss"

Starte den Syslog Daemon neu, um die Einstellung zu aktivieren

# /etc/rc.d/syslogd restart

Sicherstellen, dass /tmp beim Systemstart gelöscht wird Editiere /etc/rc.conf

clear_tmp_enable="YES"

Unterdrücke ICMP redirect Pakete und starte Logging für diese Pakete. Diese Pakete erlauben es einem Angreifer den gesamten Verkehr des Hosts mitzuhören. Editiere /etc/rc.conf

icmp_drop_redirect="YES"
icmp_log_redirect="YES"

Ändere folgende Einstellungen in /etc/rc.conf

# Do not turn on RFC1323 extensions
tcp_extensions="YES"
# Disable probing of idle TCP connections to verify the peer is up and reachable
tcp_keepalive="YES"
# Do not respond to broadcast ping packets
icmp_bmcastecho="NO"
# ICMP error response bandwith limiting. Helps protect against DoS attacks.
icmp_bandlim="YES"

Die Passwortverschlüsselung von MD5 auf Blowfish ändern

Editiere die Datei /etc/login.conf

  :passwd_format=md5:\

abändern in

  :passwd_format=blf:\

Die Login Datenbank neu aufbauen

# cap_mkdb /etc/login.conf

Ändere die Passwörter der existierenden User Für root

# passwd

Für andere Benutzer

# passwd <User>

Prüfe, ob es geklappt hat

# vi /etc/master.passwd

Die Passwörter müssen jetzt mit $2 beginnen. Jetzt ändere die Konfiguration für adduser Editiere die Datei /etc/auth.conf

crypt_default=blf

Begrenzen der inaktiven Login Zeit

Die Loginzeit auf der Konsole beschränken, wenn keine Eingaben erfolgen. Passwortlänge und Verfallzeit angeben. (Das macht aber nicht immer Sinn.) Editiere die Datei /etc/login.conf Suche den Eintrag

  :ignoretime@:\

Addiere darunter die Zeile

  :idletime=30:\]
  :passwordtime=90d:\
  :mixpasswordcase=true:\
  :minpasswordlen=10:\

Baue die Login Datenbank neu

# cap_mkdb /etc/login.conf

Damit beim Schliessen der (t)csh die gemachten Bildschirmausgaben gelöscht werden, muss in der Konfigurationsdatei /etc/csh.logout die Zeile:

clear

hinzugefügt werden.

Login

Auch den Text vor dem „login:“-Prompt ist veränderbar. Dazu muss man die Konfigurationsdatei /etc/gettytab editieren. Suche die Zeile für die Default-Werte, 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.

Andere Prozesse ansehen

Um zu verhindern, dass Benutzer mit „top“ die Prozesse von anderen Benutzern sehen muss /etc/sysctl.conf geändert werden

security.bsd.see_other_uids=0

Dadurch werden den Benutzern nur die Prozesse angezeigt, von denen sie auch Besitzer sind. Nur root sieht weiterhin alle Prozesse.

SSH einrichten

Um per su root Rechte zu bekommen muss der Benutzer in der Gruppe wheel sein. Editiere /etc/group Trage den gewünschten Benutzer als Mitglied der Gruppe wheel ein.

wheel:*:root,<meinUser>

Wenn root per SSH einloggen soll, so ist folgendes zu tun

  1. Editiere die Datei /etc/ssh/sshd_config
  2. Ändere den Parameter PermitRootLogin auf yes
  3. Das will aber doch keiner, ODER???

Nur das sichere SSH Protokoll verwenden

  1. Editiere die Datei /etc/ssh/sshd_config
  2. Ändere den Parameter Protocol auf 2.

Rechte setzen

root Login auf den terminals verhindern

  1. Editiere die Datei /etc/ttys
  2. Suche die Zeilen, die mit ttyv0 bis ttyv8 beginnen und ersetze das Wort secure durch insecure.
  3. Vehindere, dass jemand das System in den Single-User Moduy fahren kann.
console none unknown off secure

Lösche das Wort secure und speichere die Datei. Setze Benutzerrechte, sodass nicht jeder alles sehen kann.

  1. Rechte für /root Verzeichnis setzen
    # chmod 700 /root
  2. Ändere die Benutzerrechte der suid und sgid Binaries. suid Binaries erlauben es einem Benutzer ein Programm als ein anderer Benutzer auszuführen. sgid erlaubt es einem Benutzer ein Programm in einer anderen Gruppe auszuführen.
  3. Finde alle suid Programme: # find / -perm -4000
  4. Finde alle sgid Programme: # find / -perm -2000
  5. Entscheide, ob die Dateien die Rechte brauchen und entferne die Rechte gegebenenfalls.
  6. Wenn das System fertig ist, so sollten folgende Verzeichnisse und Dateien gegen Änderungen geschützt werden:
# chflags schg /bin/*
# chflags schg /sbin/*
# chflags schg /usr/sbin/*

Das kann mit dem Kommando chflags noschg ... wieder zurückgesetzt werden, wenn updates gemacht werden. Der securitylevel sollte aber 0 sein.

Ändere die Rechte des %%/var/log%% Verzeichnisses