Free BSD Template
!!!Bitte setzt alle Punkte um, es ist wichtig wenn ich später hilfe brauche!!!
Anleitung für das Erstellen einer Vorlage für ein einfaches FreeBSD-System
- Für VMs als Server empfiehlt es sich eine Vorlage zu erstellen, die schon minimal konfiguriert ist
- Der Nutzer root soll das Passwort radler haben
- Ein Benutzer kit mit dem Passwort kit soll angelegt werden
- Die Vorlage soll keine graphische Oberfläche haben (Bei der Installation nicht auswählen)
- Ein SSH-Server soll aber für die Remoteverwaltung aktiviert werden
Mindestvoraussetzungen für Hardware
- Daten
- 1 CPU
- 2 GB RAM
- 20 GB Festplattenspeicher
- Layout
- ZFS (Auto-ZFS bei der Installation)
- Weitere Einstellungen
- Hostname: freebsd-template.it.int
- Netzwerk: Netzwerkbrücke br0 oder das externe Interface des Hosts (Schnittstelle meist em0, vtnet0 oder vmx0)
Benutzer
- user: kit
- pass: kit
- admin: root
- pass: radler
Installationsoptionen
- SSH (sshd) und ntpd sollten bei den Startdiensten angekreuzt werden
- Systemkomponenten wie src oder ports werden für ein schlankes Template nicht zwingend benötigt
Einrichtung
Wir bringen das System auf den neusten Stand
- su -
- pkg bootstrap (falls pkg noch nicht initialisiert ist)
- pkg update
- pkg upgrade
Diese Pakete sollte man nachinstallieren, um auf der Kommandozeile arbeiten zu können
- pkg install bash vim sudo git curl tcpdump nmap
Falls ein Benutzer passwortlos zum root-Nutzer werden darf, muss dieser in der wheel-Gruppe sein und die /usr/local/etc/sudoers-Datei angepasst werden
- pw groupmod wheel -m kit
- sicheres Bearbeiten der sudoers-Datei (Achtung: liegt unter FreeBSD in /usr/local/etc/)
- visudo
# %wheel ALL=(ALL) ALL # Neuer Eintrag (Kommentarzeichen entfernen und NOPASSWD ergänzen) %wheel ALL=(ALL) NOPASSWD: ALL
Automatische SSH-Hostschlüssel nur auf dem Template erzeugen
Damit nicht alle Klone des Templates dieselben SSH-Hostschlüssel verwenden, sollen die Schlüssel nur dann neu erzeugt werden, wenn der Hostname -template enthält. Dies wird beim Start automatisch über ein rc.d-Skript vor dem sshd.service erledigt.
Skript zur Erzeugung der Schlüssel
Ordner erstellen:
- mkdir -p /usr/local/etc/rc.d/
Datei: /usr/local/etc/rc.d/ssh_template_keys
#!/bin/sh
#
# PROVIDE: ssh_template_keys
# REQUIRE: FILESYSTEMS
# BEFORE: sshd
# KEYWORD: nojail
. /etc/rc.subr
name="ssh_template_keys"
rcvar="ssh_template_keys_enable"
start_cmd="ssh_template_keys_start"
ssh_template_keys_start()
{
current_host=$(hostname -s)
case "$current_host" in
*-template)
echo "Template erkannt – SSH-Hostschlüssel werden neu erzeugt."
rm -f /etc/ssh/ssh_host_*
/usr/bin/ssh-keygen -A
;;
*)
echo "Nicht das Template – keine Änderung."
;;
esac
}
load_rc_config $name
run_rc_command "$1"
- chmod +x /usr/local/etc/rc.d/ssh_template_keys
rc.d-Dienst aktivieren
Anstatt systemd nutzen wir sysrc, um den Dienst in der /etc/rc.conf zu aktivieren:
- sysrc ssh_template_keys_enable="YES"
CA ziehen und einbinden
FreeBSD nutzt certctl anstelle von update-ca-certificates.
- mkdir -p /usr/local/etc/ssl/certs
- fetch https://web.samogo.de/certs/kit-ca.crt
- cp kit-ca.crt /usr/local/etc/ssl/certs/
- certctl rehash
Skript zur automatischen Netzwerkkonfiguration (Setup-Skript)
Damit nach dem Klonen das Netzwerk schnell eingerichtet ist, hinterlegen wir unser Setup-Skript.
Datei: /usr/local/sbin/freebsd-setup.sh
#!/usr/local/bin/bash
# Standardwerte setzen
FQDN=""
ADDR=""
GW=""
NS=""
USE_DHCP=0
IFACE="em0" # Hier dein Interface anpassen!
# Optionen mit getopts parsen
while getopts "f:a:g:n:d" opt; do
case $opt in
f) FQDN="$OPTARG" ;;
a) ADDR="$OPTARG" ;;
g) GW="$OPTARG" ;;
n) NS="$OPTARG" ;;
d) USE_DHCP=1 ;;
*) echo "Ungueltige Option" >&2; exit 1 ;;
esac
done
if [[ -z "$FQDN" ]]; then
echo "Fehlender FQDN! Nutzung: $0 -f <FQDN> [-d | -a <IP/CIDR> -g <GW> -n <NS>]"
exit 1
fi
echo "Setze Hostname auf: $FQDN"
sysrc hostname="$FQDN"
if (( USE_DHCP == 1 )); then
sysrc ifconfig_${IFACE}="DHCP"
sysrc -x defaultrouter
else
sysrc ifconfig_${IFACE}="inet $ADDR"
sysrc defaultrouter="$GW"
DOMAIN="${FQDN#*.}"
echo "search $DOMAIN" > /etc/resolv.conf
echo "nameserver $NS" >> /etc/resolv.conf
fi
echo "Aenderungen aktivieren mit: service netif restart ${IFACE} && service routing restart"
- chmod +x /usr/local/sbin/freebsd-setup.sh
Anpassen eines Rechners - Beispiel (Manuell ohne Skript)
| Parameter | Wert | Erläuterung |
|---|---|---|
| Netzwerk (NIC) | Externe Schnittstelle | Interface-Zuweisung in VirtualBox (em0) |
| IP | 10.88.213.21 | Statische IP |
| CIDR | 24 | Classless Inter-Domain Routing Präfixlänge |
| GW | 10.88.213.1 | GATEWAY |
| NS | 192.168.16.88 | Resolver |
| FQDN | freebsd.it.int | Fully Qualified Domain Name |
| SHORT | freebsd | Short Name |
| DOM | it.int | Domain Name |
Hostname
- sysrc hostname="FQDN"
Netzwerk
Bearbeitet wird unter FreeBSD alles zentral über sysrc oder direkt in der /etc/rc.conf.
Statische IP:
- sysrc ifconfig_em0="inet IP/CIDR"
- sysrc defaultrouter="GW"
DNS (In /etc/resolv.conf eintragen): search DOM nameserver NS
Management
- Netzwerkkarte und Routing neustarten (Anwenden der Änderungen)
- service netif restart em0 && service routing restart
- Gesamtes Netzwerk runterfahren
- service netif stop
- Gesamtes Netzwerk hochfahren
- service netif start
Reboot
- reboot
Kontrolle
- Stimmt die IP?
- ifconfig em0
- Stimmt die Route?
- netstat -rn
- Stimmt der Nameserver und die Search Domain?
- cat /etc/resolv.conf
- Konnektivitäts-Test
- ping -c 1 9.9.9.9
- Funktioniert unser Resolver (Damit ist der eingetragene Nameserver gemeint)?
- host heise.de