Free BSD Template

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

!!!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.

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