NetBSD Administration Cheat Sheet

NetBSD 9.x / 10.x · pkgsrc · RAIDframe · npf · Xen
Keine Treffer – Suchbegriff anpassen.

💻System-Informationen

uname -a / uname -m -p -rVollständige Kennung / Maschine, Prozessor, Release
sysctl kern.versionGenaue Kernel-Version inkl. Bau-Datum und Konfigurationsname
sysctl hw.model hw.ncpu hw.physmem64CPU-Modell, CPU-Anzahl, physischer Speicher
sysctl -a | lessAlle Kernel-Variablen
dmesg | less bzw. cat /var/run/dmesg.bootKernel-Meldungen aktuell / vom letzten Boot
pcictl pci0 listPCI-Geräte am Bus 0 mit Hersteller und Modell
drvctl -l / drvctl -p wd0Gerätebaum / Eigenschaften eines Geräts
cpuctl identify 0Detaillierte CPU-Eigenschaften und Features
envstat -d / envstat -rSensoren: Temperatur, Lüfter, Spannungen
df -h / df -hiBelegung der Dateisysteme / Inode-Belegung
swapctl -l -kSwap-Geräte und Auslastung in KB
uptime / w / who -bLaufzeit und Load / Sitzungen / Bootzeitpunkt
sysctl machdep.dmi.system-productModellbezeichnung – erkennt auch VMware, KVM, VirtualBox
sysctl kern.boottimeExakter Zeitpunkt des letzten Systemstarts
sysctl kern.osrelease kern.osrevisionRelease-Nummer für Skripte
Bestandsaufnahme vor jedem Change: uname -a; sysctl kern.version; df -h; disklabel -r wd0; ifconfig -a; pkgin list | wc -l – Ausgabe in eine Datei umlenken und dem Ticket beilegen.

⏻Boot & Bootloader

shutdown -r now / rebootSauberer Neustart
shutdown -p now / poweroffHerunterfahren und ausschalten
shutdown -r +10 "Wartung"Neustart in 10 Minuten mit Meldung
shutdown nowIn den Single-User-Modus wechseln
/boot.cfgBootmenü: Einträge, Timeout, Konsole (x86)
boot netbsd -sAm Boot-Prompt Single-User starten
boot netbsd.oldAlten Kernel starten, wenn der neue nicht bootet
boot -aBeim Start nach dem Root-Gerät fragen lassen
installboot -v -o timeout=5 /dev/rwd0a /usr/mdec/bootxx_ffsv2Bootblock neu schreiben (Dateisystemtyp beachten)
/usr/mdec/ · gpt biosboot -i 1 wd0Bootcode-Vorlagen / GPT-Boot-Flag setzen
sysctl machdep.booted_kernelWelcher Kernel läuft gerade?
/etc/rc.conf: rc_configured=YESMuss gesetzt sein, sonst bleibt das System im Single-User

Root-Passwort zurücksetzen

Am Bootprompt:  boot netbsd -s
Enter bei der Shell-Abfrage
fsck -y /                       # Dateisystem pruefen
mount -u /                      # Root beschreibbar mounten
mount -a                        # restliche Dateisysteme
passwd root
reboot
Zugang absichern: In /etc/ttys die Konsole auf insecure setzen – dann verlangt der Single-User-Modus das Root-Passwort. Physischer Zugriff bleibt aber immer ein Risiko.

⚙Dienste & rc.d

/etc/rc.d/sshd statusZustand eines Dienstes
/etc/rc.d/sshd start | stop | restartDienst steuern (NetBSD hat kein service-Kommando)
/etc/rc.d/sshd reloadKonfiguration neu einlesen, sofern unterstützt
/etc/rc.d/sshd onestartStarten, obwohl in rc.conf nicht aktiviert
/etc/rc.conf: sshd=YESDienst dauerhaft aktivieren
/etc/defaults/rc.confAlle Vorgabewerte mit Kommentaren – nur lesen
/etc/rc.conf.d/<dienst>Getrennte Konfiguration je Dienst (Flags, Umgebung)
/etc/rc.d/ · /usr/pkg/etc/rc.d/Skripte des Basis-Systems / aus pkgsrc
rcorder /etc/rc.d/*Startreihenfolge berechnen – zeigt Abhängigkeiten
/etc/rc.localEigene Befehle am Ende des Bootvorgangs
/etc/rc.conf: rc_rcorder_flags="-s xen"Bestimmte Dienstgruppen beim Start überspringen
cp /usr/pkg/share/examples/rc.d/nginx /etc/rc.d/pkgsrc-Startskript ins System übernehmen
/etc/rc.conf: nginx=YES nginx_flags="-c /pfad"Dienst mit eigenen Startparametern
Unterschied zu FreeBSD: Es gibt kein sysrc und kein service. Die rc.conf wird direkt editiert, Dienste werden über ihren vollen Skriptpfad in /etc/rc.d/ gesteuert.

📦pkgsrc & Pakete

pkgin updatePaketkatalog aktualisieren
pkgin search nginx / pkgin availSuchen / alle verfügbaren Pakete
pkgin install nginxBinärpaket samt Abhängigkeiten installieren
pkgin list / pkgin exportInstallierte Pakete / Liste zum Wiederherstellen
pkgin remove nginx / pkgin autoremoveEntfernen / verwaiste Abhängigkeiten aufräumen
pkgin full-upgradeAlle Pakete aktualisieren
pkgin -n full-upgradeTrockenlauf – erst ansehen, was passieren würde
pkgin cleanHeruntergeladene Pakete aus dem Cache entfernen
pkg_info / pkg_info -L nginxInstallierte Pakete / alle Dateien eines Pakets
pkg_info -F /usr/pkg/sbin/nginxZu welchem Paket gehört diese Datei?
pkg_info -r nginx / pkg_info -R nginxBenötigte Abhängigkeiten / wer hängt davon ab
pkg_add -u nginx-1.26.tgzEinzelnes Paket aus Datei aktualisieren
pkg_delete -f nginxEntfernen, auch wenn Abhängigkeiten bestehen
pkg_admin check / pkg_admin rebuildPrüfsummen prüfen / Paketdatenbank neu aufbauen
pkg_admin audit / pkg_admin fetch-pkg-vulnerabilitiesSicherheitslücken prüfen / Liste holen
cd /usr/pkgsrc/www/nginx && make install cleanAus Quellen bauen und installieren
make show-options / make show-dependsBuild-Optionen / Abhängigkeiten eines Pakets
/etc/mk.conf: PKG_OPTIONS.nginx=+sslBuild-Optionen dauerhaft festlegen
/usr/pkg/etc/pkgin/repositories.confRepository-Adresse (Release und Architektur müssen passen)
pkgsrc ist portabel: derselbe Baum läuft auf NetBSD, Linux, Solaris, macOS. Alles landet unter /usr/pkg, Konfiguration unter /usr/pkg/etc – sauber getrennt vom Basis-System unter /etc.

🔧System-Updates & build.sh

cd /usr/src && ./build.sh -O ../obj -T ../tools -U -j4 toolsCross-Werkzeuge bauen (einmalig, unprivilegiert möglich)
./build.sh -O ../obj -T ../tools -U -j4 distributionKomplettes Userland bauen
./build.sh -O ../obj -T ../tools -U kernel=GENERICKernel bauen – Ergebnis unter obj/sys/arch/…/compile/GENERIC
./build.sh -O ../obj -T ../tools -U -j4 releaseVollständige Release-Sets erzeugen
./build.sh -O ../obj -T ../tools install=/Gebautes Userland ins laufende System installieren
cp netbsd /netbsd.new && mv /netbsd /netbsd.old && mv /netbsd.new /netbsdKernel tauschen – alten immer aufheben
etcupdate -s /usr/src/etc -s /usr/src/distrib/setsDateien unter /etc mit der neuen Version abgleichen
postinstall -s /usr/src/etc checkPrüfen, was nach dem Update noch angepasst werden muss
postinstall -s /usr/src/etc fixErkannte Abweichungen automatisch korrigieren
sysinstInstallations- und Upgrade-Werkzeug (auch von Installationsmedium)
cd / && tar -xzpf base.tar.xzRelease-Sets manuell entpacken (Upgrade-Weg ohne sysinst)
cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r netbsd-10 srcQuellen des Stable-Zweigs beziehen
/usr/src/UPDATING · /usr/pkgsrc/doc/CHANGESVor jedem Update lesen – Sonderfälle stehen dort
Reihenfolge einhalten: Erst neuen Kernel installieren und booten, dann Userland (install=/), danach etcupdate und postinstall fix. Wer Userland vor Kernel installiert, riskiert ein nicht mehr startfähiges System.

🧩Kernel, Module & sysctl

modstat / modstat -n tmpfsGeladene Module / ein bestimmtes Modul
modload tmpfsModul zur Laufzeit laden
modunload tmpfsModul entladen (nur wenn nicht in Benutzung)
/etc/modules.confModule, die beim Boot geladen werden
/stand/<arch>/<version>/modules/Ablageort der Kernel-Module
sysctl kern.maxfiles / sysctl -w kern.maxfiles=16384Variable lesen / zur Laufzeit setzen
/etc/sysctl.confDauerhafte sysctl-Werte
sysctl -d kern.maxprocBeschreibung einer Variable
sysctl ddb.onpanic=0Bei Panik nicht in den Debugger, sondern Dump und Reboot
cd /usr/src/sys/arch/amd64/conf && cp GENERIC MYKERNEigene Kernel-Konfiguration ableiten
config MYKERN && cd ../compile/MYKERN && make depend && makeKlassischer Kernel-Bau ohne build.sh
sysctl security.curtain=1Benutzer sehen nur eigene Prozesse und Sockets
sysctl kern.securelevelSicherheitsstufe – lässt sich nur erhöhen, nie senken
veriexecctl load / veriexecSignaturprüfung ausführbarer Dateien (Konfiguration /etc/signatures)
Modul oder fest eingebaut? modstat zeigt in der Spalte Source, ob ein Modul geladen (filesys) oder fest im Kernel enthalten (builtin) ist. Builtin-Module lassen sich nicht entladen.

🔧Geräte & Datenträger

dmesg | grep -E '^(wd|sd|cd|ld)[0-9]'Erkannte Datenträger mit Größe und Anschluss
sysctl hw.disknamesNamen aller Platten in einer Zeile
iostat -x 5Gerätestatistik im Intervall
drvctl -l / drvctl -r -a scsibus scsibus0Geräte auflisten / Bus neu abtasten (neue LUNs)
drvctl -d sd3 / drvctl -Q sd3Gerät abmelden / Eigenschaften abfragen
scsictl /dev/rsd0c identifySCSI-Gerät identifizieren
atactl /dev/rwd0 identifyATA-Gerät: Firmware, Features, Seriennummer
atactl /dev/rwd0 smart statusSMART-Zustand ohne Zusatzpaket
smartctl -a /dev/rwd0Ausführliche SMART-Werte (Paket smartmontools)
usbdevs -v / usbdevs -dUSB-Geräte / mit Treiberzuordnung
dkctl wd0 listwedgesAlle Wedges (GPT-Partitionen als eigene Geräte) einer Platte
dkctl wd0 makewedgesWedges aus der GPT neu erzeugen
dkctl dk0 getwedgeinfoZu welcher Platte und welchem Bereich gehört der Wedge?
envstat -d / powerdSensorwerte / Reaktion auf Ereignisse wie Temperatur, Deckel
Gerätenamen: wd* = ATA/SATA, sd* = SCSI/SAS/USB, ld* = logische Laufwerke (RAID-Controller, VirtIO), dk* = Wedges, raid* = RAIDframe. Der Rohzugriff geht immer über /dev/r… (z. B. /dev/rwd0a), gepufferte Zugriffe über /dev/wd0a.

💾Disklabel, GPT & Wedges

disklabel wd0 / disklabel -r wd0Partitionstabelle aus dem Kernel / direkt vom Datenträger
disklabel -e wd0Label im Editor bearbeiten
disklabel -i wd0Interaktiv bearbeiten – führt durch die Felder
disklabel -w -r wd0 autoNeues Label mit Standardgeometrie schreiben
disklabel wd0 > /root/wd0.labelLabel sichern – vor jeder Änderung machen
disklabel -R -r wd0 /root/wd0.labelGesichertes Label zurückschreiben
fdisk wd0 / fdisk -u wd0MBR anzeigen / bearbeiten (x86)
gpt show wd0 / gpt show -l wd0GPT-Einträge / mit Labels
gpt create wd1Neue GPT anlegen
gpt add -t ffs -l data1 -s 200G wd1Partition mit Typ, Label und Größe anlegen
gpt add -t swap -s 8G wd1Swap-Partition anlegen
gpt remove -i 3 wd1 / gpt destroy wd1Eintrag entfernen / gesamte Tabelle löschen
gpt resize -i 3 -s 400G wd1Partition vergrößern
gpt recover wd1Beschädigte GPT-Sicherungskopie wiederherstellen
gpt biosboot -i 1 wd0Boot-Partition markieren
dkctl wd1 addwedge data1 2048 419430400 ffsWedge von Hand anlegen (Name, Start, Länge, Typ)
dkctl wd1 delwedge dk3Wedge entfernen
Partition ‘c’ nicht anfassen: Im Disklabel bezeichnet c die gesamte NetBSD-Partition und d (auf x86) die ganze Platte. Beide sind keine Datenpartitionen. Nutzdaten gehören nach a, e, f und folgende.

🗃RAIDframe & Verschlüsselung

raidctl -s raid0Zustand des RAID-Sets, Komponenten und Rekonstruktion
raidctl -C /etc/raid0.conf raid0RAID erstmalig konfigurieren (erzwungen, ohne Paritätsprüfung)
raidctl -I 20260818 raid0Seriennummer setzen – markiert die Komponenten als zusammengehörig
raidctl -iv raid0Parität initialisieren (dauert, läuft im Hintergrund)
raidctl -A yes raid0 / raidctl -A root raid0Automatisch konfigurieren / als Root-Gerät markieren
raidctl -f /dev/wd1a raid0Komponente als ausgefallen markieren
raidctl -r /dev/wd1a raid0Komponente entfernen (aus dem Set lösen)
raidctl -a /dev/wd2a raid0Hot Spare hinzufügen
raidctl -R /dev/wd2a raid0Rekonstruktion auf die genannte Komponente starten
raidctl -P raid0 / raidctl -p raid0Parität neu berechnen / Status der Parität abfragen
raidctl -u raid0RAID-Set abbauen (unkonfigurieren)
/etc/rc.conf: raidframe=YESRAID-Sets beim Boot automatisch konfigurieren
cgdconfig -g -V disklabel -o /etc/cgd/wd1e aes-cbc 256Parameterdatei für verschlüsselte Platte erzeugen
cgdconfig cgd0 /dev/wd1eVerschlüsseltes Gerät öffnen (fragt nach Passwort)
cgdconfig -u cgd0Verschlüsseltes Gerät schließen
/etc/cgd/cgd.conf · cgdconfig -CAlle konfigurierten cgd-Geräte beim Boot öffnen

Beispiel /etc/raid0.conf (Spiegel)

START array
1 2 0

START disks
/dev/wd0a
/dev/wd1a

START layout
128 1 1 1

START queue
fifo 100
Nach Plattentausch: erst mit disklabel das Layout der gesunden Platte auf die neue übertragen, dann raidctl -R. Der Bootblock muss auf beiden Platten liegen – sonst startet das System nach dem Ausfall der ersten nicht.

📂Dateisysteme & Mounts

newfs -O2 /dev/rwd1aFFSv2 anlegen (Standard für größere Dateisysteme)
newfs -O2 -b 32768 -f 4096 /dev/rwd1aMit angepasster Block- und Fragmentgröße
newfs_lfs /dev/rwd1aLog-strukturiertes Dateisystem anlegen
newfs_msdos /dev/rsd1eFAT-Dateisystem (z. B. EFI-Partition)
tunefs -p /dev/rwd1aParameter des Dateisystems anzeigen
tunefs -l 1 /dev/rwd1aWAPBL-Journaling aktivieren (Dateisystem ungemountet)
mount / mount -v / mount -pEingehängte Dateisysteme, ausführlich bzw. im fstab-Format
mount -o log /dev/wd1a /dataMit Journaling einhängen (WAPBL – deutlich schnellerer Neustart)
mount -u -o rw /Root im laufenden Betrieb beschreibbar machen
mount -o noatime,nodev,nosuid /dev/wd1a /dataHärtende Mount-Optionen für Datenpartitionen
umount /data / umount -f /dataAushängen / erzwingen
fstat /data / fuser -c /dataWer blockiert das Aushängen?
fsck -y /dev/rwd1a / fsck -pPrüfen und reparieren / bevorzugter Modus beim Boot
fsck_ffs -b 32 /dev/rwd1aAlternativen Superblock verwenden, wenn der erste defekt ist
resize_ffs -s 400G /dev/rwd1aFFS vergrößern oder verkleinern (ungemountet)
dump -0auf /backup/data.dump /dataSicherung eines FFS-Dateisystems
mount_null /srv/orig /srv/kopieVerzeichnis an zweiter Stelle einblenden
mount_tmpfs -s 2G tmpfs /tmpRAM-Dateisystem einhängen
vnconfig vnd0 image.iso && mount -t cd9660 /dev/vnd0a /mntImage-Datei als Gerät einbinden
vnconfig -u vnd0Image-Gerät wieder freigeben
df -hi / du -h -d1 /var | sort -hInodes prüfen / größte Verzeichnisse finden
/etc/fstabDauerhafte Mounts – Gerät auch als NAME=label möglich
WAPBL empfohlen: Ohne Journaling dauert fsck nach einem Absturz bei großen Dateisystemen sehr lange. Mit -o log in der fstab ist das System in Sekunden wieder verfügbar.

🔄Swap & Speicher

swapctl -l -kSwap-Geräte mit Größe und Belegung
swapctl -a /dev/wd0bSwap-Partition aktivieren
swapctl -d /dev/wd0bDeaktivieren – RAM muss den Inhalt aufnehmen können
swapctl -A -t noblkAlle Einträge aus /etc/fstab aktivieren
/dev/wd0b none swap sw 0 0Typischer fstab-Eintrag (Partition b ist traditionell Swap)
swapctl -a -p 1 /swapfileSwap-Datei mit Priorität aktivieren
dd if=/dev/zero of=/swapfile bs=1m count=4096Swap-Datei anlegen (vorher, dann chmod 600)
vmstat -s | head -25Kumulierte Speicher- und Paging-Statistik
sysctl vm.uvmexp2Detaillierte Werte des virtuellen Speichersystems
top -o size / top -o resProzesse nach virtuellem bzw. residentem Speicher sortieren
sysctl kern.maxvnodesObergrenze für zwischengespeicherte Dateiobjekte
sysctl vm.filemin vm.filemax vm.anonminAufteilung des Speichers zwischen Dateicache und Anwendungen
/etc/rc.conf: dumpdev=/dev/wd0b · savecore -vCrash-Dump-Gerät / Dump nach Reboot sichern
Faustregel: Swap sollte mindestens so groß wie der RAM sein, wenn Crash-Dumps geschrieben werden sollen – sonst passt der Dump nicht hinein und savecore findet nach dem Absturz nichts vor.

⚙Prozesse & Jobs

ps auxww / ps -laxwwAlle Prozesse mit vollständiger Kommandozeile
ps -axo pid,ppid,%cpu,%mem,rss,state,commandEigene Spaltenauswahl
pgrep -lf nginx / pkill -f nginxProzesse per Muster finden / beenden
kill -TERM 1234 / kill -9 1234Sauber beenden / hart abschießen
kill -HUP 1234Konfiguration neu einlesen
fstat -p 1234 / fstat -u wwwOffene Dateien eines Prozesses / Benutzers
ktrace -di -p 1234 && kdump -f ktrace.out | lessSystemaufrufe aufzeichnen und auswerten
ktruss -p 1234Systemaufrufe direkt lesbar mitschneiden
gdb -p 1234 / pstack 1234Aufrufstapel eines hängenden Prozesses
renice 10 -p 1234 / nice -n 10 befehlPriorität senken
psrset / schedctl -A 0-3 -p 1234Prozessor-Zuordnung (Affinität) steuern
ulimit -a / limitsGrenzwerte der aktuellen Sitzung
/etc/login.conf · cap_mkdb /etc/login.confDauerhafte Limits je Login-Klasse
crontab -l -u www / crontab -eCron-Jobs anzeigen / bearbeiten
/etc/crontab · /etc/daily · /etc/securitySystem-Cron und die täglichen Prüfläufe
/etc/daily.conf · /etc/security.confSteuert, was die täglichen Berichte prüfen
Tägliche Mails ernst nehmen: NetBSD schickt an root täglich einen Bericht über geänderte setuid-Dateien, Plattenbelegung und Konfigurationsänderungen. Wer die Mails weiterleitet (/etc/mail/aliases), merkt Probleme oft vor den Anwendern.

📈Performance-Analyse

top -b -d1 / top -o cpuMomentaufnahme für Skripte / nach CPU sortiert
vmstat 5CPU, Paging, Interrupts – erste Zeile ist Durchschnitt seit Boot
vmstat -iInterrupts je Gerät – findet störende Hardware
iostat -x 5 / iostat -DI 5Gerätestatistik mit Durchsatz und Auslastung
systat vmstat / systat iostat / systat netstatKompakte Live-Übersichten auf einem Bildschirm
netstat -i 1 / netstat -w 1Paket- bzw. Byte-Raten pro Sekunde
netstat -mmbuf-Verbrauch – Engpass bei hoher Netzlast
fstat | wc -l ; sysctl kern.maxfilesOffene Dateien gegen die Obergrenze prüfen
pmcstat / lockstat sleep 10Hardware-Zähler / Kernel-Sperren als Engpass erkennen
sysctl kern.cp_timeRohwerte der CPU-Zeitverteilung
envstat -d / sysctl machdep.cpu_brandTemperaturen / CPU-Bezeichnung bei Drosselverdacht
sysctl machdep.est.frequency.availableMögliche Taktstufen (Intel SpeedStep)
sysctl machdep.est.frequency.target=2400Takt fest vorgeben – auf Servern oft sinnvoll
time befehl / /usr/bin/time -l befehlLaufzeit / zusätzlich Speicher- und I/O-Werte
Vorgehen bei "Server ist langsam": top (CPU oder Speicher?) → iostat -x 5 (Platte am Limit?) → netstat -w 1 (Netz?) → vmstat -i (Interrupt-Flut?). lockstat erst, wenn die vier unauffällig sind.

🌐Netzwerk

ifconfig -a / ifconfig wm0Alle Schnittstellen / eine bestimmte
ifconfig wm0 inet 10.0.0.5/24 upIP-Adresse zur Laufzeit setzen
ifconfig wm0 inet 10.0.0.6/32 aliasZweite Adresse auf derselben Schnittstelle
ifconfig wm0 mtu 9000Jumbo Frames setzen (Switch muss mitspielen)
ifconfig wm0 media / ifconfig -m wm0Aktuelle Verbindung / alle unterstützten Medientypen
/etc/ifconfig.wm0Dauerhafte Konfiguration je Schnittstelle (eine Zeile je Befehl)
/etc/rc.conf: ifconfig_wm0="inet 10.0.0.5/24"Alternative dauerhafte Konfiguration
/etc/rc.conf: dhcpcd=YES · /etc/mygateDHCP aktivieren / Standard-Gateway hinterlegen
netstat -rn / netstat -rn -f inet6Routing-Tabelle IPv4 / IPv6
route add -net 192.168.9.0/24 10.0.0.254Statische Route zur Laufzeit
route show / route -n get defaultRouten anzeigen / Details zur Standardroute
/etc/rc.conf: static_routes="db" route_db="…"Statische Routen dauerhaft
netstat -an -f inet | grep LISTENLauschende Ports
sockstat -l (pkgsrc) bzw. fstat | grep internetOffene Ports mit zugehörigem Prozess
arp -an / ndp -anARP- bzw. IPv6-Nachbar-Tabelle
ping -c4 host / ping6 -c4 hostErreichbarkeit prüfen
traceroute host / tcpdump -ni wm0 port 443Pfad verfolgen / Verkehr mitlesen
ifconfig agr0 create && ifconfig agr0 agrport wm0 agrport wm1Link-Aggregation (LACP) einrichten
ifconfig vlan10 create vlan 10 vlanif wm0VLAN-Schnittstelle anlegen
brconfig bridge0 add wm0 add tap0 upBridge einrichten (NetBSD 9); ab 10 auch ifconfig bridge0
sysctl -w net.inet.ip.forwarding=1Routing aktivieren (dauerhaft in /etc/sysctl.conf)
Zwei Wege, ein Ziel: NetBSD akzeptiert sowohl /etc/ifconfig.<if> als auch ifconfig_<if> in der rc.conf. Im Team auf eine Variante einigen – sonst sucht der nächste Kollege die Konfiguration an der falschen Stelle.

🔒Firewall (npf & pf)

/etc/rc.conf: npf=YESnpf beim Boot starten
npfctl validate /etc/npf.confRegelwerk prüfen, ohne es zu laden – immer zuerst!
npfctl reload / npfctl start / npfctl stopRegeln laden / Filter aktivieren / deaktivieren
npfctl show / npfctl rule "block-in" listAktive Konfiguration / eine dynamische Regelgruppe
npfctl statsZähler: passiert, blockiert, Zustandstabelle
npfctl table "badhosts" add 1.2.3.4Adresse zur Tabelle hinzufügen
npfctl table "badhosts" list / del 1.2.3.4Tabelle anzeigen / Eintrag entfernen
npfctl save / npfctl loadZustandstabelle über einen Neustart hinweg retten
tcpdump -n -i npflog0Protokollierte Pakete live mitlesen
/etc/rc.conf: pf=YES pflogd=YESAlternative: pf verwenden (in NetBSD ebenfalls enthalten)
pfctl -nf /etc/pf.conf && pfctl -f /etc/pf.confpf-Regeln prüfen und laden
pfctl -sr -v / pfctl -ss / pfctl -siRegeln mit Zählern / Zustände / Statistik
ipf -f /etc/ipf.conf ; ipfstat -hioÄltere Systeme: IPFilter mit Regel-Trefferzählern

Minimales /etc/npf.conf

$ext_if = "wm0"
table <badhosts> type ipset

alg "icmp"

group "external" on $ext_if {
    pass stateful out final all
    pass stateful in final proto tcp to $ext_if port ssh
    pass stateful in final proto tcp to $ext_if port { http, https }
    pass in final proto icmp icmp-type echo all
    block in all
}
group default {
    pass final on lo0 all
    block all
}
Sperr dich nicht aus: Bei Fernwartung vor dem Laden einen Notausstieg setzen: echo "npfctl stop" | at now + 5 minutes. Nach erfolgreichem Test mit atq und atrm wieder entfernen.

📡Netzwerkdienste

/etc/rc.conf: sshd=YES · /etc/rc.d/sshd reloadSSH aktivieren / Konfiguration neu laden
/etc/ssh/sshd_config · sshd -tSSH-Konfiguration / Syntaxprüfung vor dem Reload
/etc/rc.conf: nfs_server=YES rpcbind=YES mountd=YESNFS-Server aktivieren
/etc/exports · /etc/rc.d/mountd reloadFreigaben definieren / neu einlesen
showmount -e localhost / nfsstat -sFreigaben prüfen / Serverstatistik
mount_nfs srv:/export /mntNFS-Freigabe einhängen
/etc/rc.conf: ntpd=YES ntpd_flags="-g"Zeitdienst aktivieren, große Abweichung beim Start korrigieren
ntpq -pn / ntpdate -q zeitserverSynchronisation prüfen / Abweichung messen
/etc/resolv.conf · /etc/hosts · /etc/nsswitch.confNamensauflösung und deren Reihenfolge
host example.com / dig example.com (pkgsrc)DNS-Abfragen
/etc/inetd.conf · /etc/rc.d/inetd reloadEinfache Dienste über inetd bereitstellen
/etc/rc.conf: sendmail=NO postfix=YESMTA umstellen (Postfix aus pkgsrc)
/etc/mail/aliases · newaliasesRoot-Mails weiterleiten – unbedingt einrichten
iscsictl / iscsid (pkgsrc)iSCSI-Initiator verwalten
Dienst prüfen in drei Schritten: /etc/rc.d/<name> status (läuft er?) → netstat -an | grep <port> (lauscht er?) → tail -50 /var/log/messages (was meldet er?).

👤Benutzer, Gruppen & Rechte

useradd -m -c "Max Muster" -G wheel -s /bin/sh maxBenutzer mit Homeverzeichnis und Gruppe anlegen
usermod -G wheel,operator maxZusatzgruppen setzen (ersetzt die bisherigen!)
usermod -G $(id -Gn max | tr ' ' ',') ,neue maxGruppe ergänzen, ohne bestehende zu verlieren
userdel -r maxBenutzer samt Homeverzeichnis entfernen
groupadd projekt / groupdel projektGruppe anlegen / entfernen
usermod -e 20261231 maxAblaufdatum des Kontos setzen
usermod -C yes max / usermod -C no maxKonto sperren / entsperren
passwd max / chpass maxPasswort ändern / Benutzereintrag bearbeiten
vipw · pwd_mkdb -p /etc/master.passwdBenutzerdatenbank sicher bearbeiten / neu erzeugen
/etc/master.passwd · /etc/passwd · /etc/groupBenutzerdatenbank
/etc/usermgmt.confVorgaben für useradd: Shell, Basisverzeichnis, Skel
/etc/login.conf · cap_mkdb /etc/login.confLogin-Klassen mit Ressourcen-Limits
id max / groups max / last maxKennungen / Gruppen / Anmeldehistorie
su - / doas (pkgsrc) / sudo (pkgsrc)Root werden – su setzt Mitgliedschaft in wheel voraus
chmod 640 datei / chown max:staff dateiRechte / Eigentümer setzen
chflags schg datei / chflags noschg dateiDatei unveränderbar machen / wieder freigeben
ls -lo dateiDateiflags anzeigen
getfacl datei / setfacl -m u:max:rwx dateiACLs (FFS mit Option acls mounten)
securelevel beachten: Ab kern.securelevel=1 lassen sich schg-Flags im laufenden Betrieb nicht mehr entfernen und Rohzugriffe auf gemountete Platten sind gesperrt. Rücknahme nur im Single-User-Modus.

🖥Xen & Virtualisierung

/boot.cfg: menu=Xen:load /netbsd-XEN3_DOM0 …Dom0-Kernel im Bootmenü eintragen
/etc/rc.conf: xencommons=YES xendomains="dom1 dom2"Xen-Dienste und automatisch startende Domänen
xl list / xl list -l dom1Laufende Domänen / Details einer Domäne
xl create /etc/xen/dom1.confDomäne starten
xl shutdown dom1 / xl destroy dom1Sauber herunterfahren / hart beenden
xl console dom1Auf die Konsole schalten (Strg+] zum Verlassen)
xl top / xl uptimeRessourcenverbrauch aller Domänen / Laufzeiten
xl mem-set dom1 2048Speicher zur Laufzeit anpassen
xl vcpu-set dom1 4 / xl vcpu-listVirtuelle CPUs zuweisen / anzeigen
xl save dom1 /var/xen/dom1.save / xl restore …Zustand sichern und später fortsetzen
xl info / xl dmesgHypervisor-Informationen / dessen Meldungen
nvmm (NetBSD 9+) · qemu-system-x86_64 -accel nvmmEigener Hypervisor von NetBSD, von QEMU genutzt
modload nvmm ; nvmmctl identifyNVMM laden und Unterstützung prüfen
Zwei Wege: Xen ist der klassische Weg mit Dom0/DomU-Trennung. NVMM ist neuer, schlanker und arbeitet mit QEMU zusammen – ohne eigenen Dom0-Kernel. Für einzelne Gastsysteme auf einem normalen Server ist NVMM meist der einfachere Weg.

💾Backup & Wiederherstellung

dump -0auf /backup/root.dump /Vollsicherung eines FFS-Dateisystems
dump -1auf /backup/root.inc /Inkrementell seit der letzten Sicherung niedrigerer Stufe
dump -0auf - / | gzip > /backup/root.dump.gzKomprimiert wegschreiben
restore -rf /backup/root.dumpKomplett in ein leeres Dateisystem zurückspielen
restore -if /backup/root.dumpInteraktiv einzelne Dateien wählen (add, extract)
restore -tf /backup/root.dump | lessInhalt ansehen, ohne zurückzuspielen
tar -czpf /backup/etc.tgz -C / etc usr/pkg/etcKonfiguration schnell sichern
pax -rw -pe /srv /backup/srvVerzeichnisbaum mit allen Attributen kopieren
rsync -aHAX --delete /srv/ bkp:/srv/ (pkgsrc)Abgleich über das Netz
disklabel wd0 > /backup/wd0.labelPartitionslayout sichern – oft vergessen
gpt show wd0 > /backup/wd0.gptGPT-Layout dokumentieren
pkgin export > /backup/pkglist.txtPaketliste für den Wiederaufbau sichern
pkgin import /backup/pkglist.txtPakete auf einem neuen System wiederherstellen
dd if=/dev/rwd0 of=/backup/mbr.bin bs=512 count=1Bootsektor sichern
installboot -v /dev/rwd0a /usr/mdec/bootxx_ffsv2Bootblock nach Wiederherstellung neu schreiben
amanda / bacula / restic (pkgsrc)Zentrale Backup-Lösungen aus pkgsrc
Wiederherstellung üben: Ein dump ohne getesteten restore ist kein Backup. Mindestens einmal jährlich auf einem Testsystem durchspielen – inklusive Bootblock und Disklabel.

📜Logs & Fehlersuche

tail -f /var/log/messagesWichtigstes System-Log live verfolgen
/var/log/messages · authlog · secure · cronSystem, Anmeldungen, Sicherheit, Cron
/var/run/dmesg.bootKernel-Meldungen vom letzten Boot
/etc/syslog.conf · /etc/rc.d/syslogd reloadProtokollregeln / nach Änderung neu laden
logger -t test -p daemon.notice "Testmeldung"Eigene Meldung erzeugen und die Konfiguration prüfen
/etc/newsyslog.conf · newsyslog -nvRotation konfigurieren / Trockenlauf
/etc/daily.conf · sh /etc/dailyTäglichen Prüfbericht konfigurieren / manuell ausführen
grep -iE 'error|panic|fail' /var/log/messages | tail -50Schneller Blick auf Fehler
dmesg | grep -iE 'error|timeout|retry'Hardware-Probleme im Kernel-Log
atactl /dev/rwd0 smart status ; raidctl -s raid0Platten- und RAID-Zustand prüfen
savecore -v ; ls -l /var/crashKernel-Dump sichern und prüfen
gdb /netbsd /var/crash/netbsd.0.coreDump analysieren (Kernel mit Debug-Symbolen nötig)
sysctl ddb.onpanic=1 · ddb: bt, ps, show registersIn-Kernel-Debugger bei Panik – bt liefert den Aufrufstapel
/etc/rc.conf: savecore=YES dumpdev=/dev/wd0bVoraussetzung dafür, dass überhaupt ein Dump entsteht
Bei Panik zuerst: Bildschirmfoto oder Abschrift der Panik-Meldung samt bt-Ausgabe. Ohne diese Zeilen ist ein Dump später nur halb so viel wert.

📄Wichtige Dateien & Pfade

/etc/rc.conf · /etc/rc.conf.d/Zentrale Systemkonfiguration bzw. je Dienst
/etc/defaults/rc.confAlle Vorgabewerte mit Kommentaren – beste Referenz
/boot.cfgBootmenü, Timeout, Konsolenauswahl
/etc/fstab · /etc/sysctl.confMounts und Swap / dauerhafte Kernel-Variablen
/etc/modules.confBeim Boot zu ladende Kernel-Module
/etc/ifconfig.<if> · /etc/mygate · /etc/mynameNetzwerk: Schnittstelle, Gateway, Hostname
/etc/npf.conf · /etc/pf.confFirewall-Regelwerke
/etc/raid0.conf · /etc/cgd/RAIDframe-Definitionen / Verschlüsselungsparameter
/etc/exports · /etc/inetd.confNFS-Freigaben / inetd-Dienste
/etc/daily.conf · /etc/security.conf · /etc/newsyslog.confTägliche Berichte, Sicherheitsprüfungen, Rotation
/etc/login.conf · /etc/usermgmt.conf · /etc/ttysLogin-Klassen, Benutzer-Vorgaben, Konsolen
/etc/mk.confBau-Optionen für Basis-System und pkgsrc
/usr/pkg/etc/ · /usr/pkg/share/examples/rc.d/pkgsrc-Konfiguration / mitgelieferte Startskripte
/var/db/pkg/ · /usr/pkgsrc/Paketdatenbank / Quellbaum
/usr/share/examples/Beispielkonfigurationen für fast alles im Basis-System
/etc/mail/aliases · newaliasesRoot-Mails weiterleiten
Dokumentation: man afterboot listet Schritt für Schritt auf, was nach einer Neuinstallation zu prüfen ist. Dazu man rc.conf, man 5 npf.conf, man raidctl und man hier (Verzeichnisstruktur).

🛠Praxis-Workflows

Neue Platte einbinden (GPT + Wedge + FFS)

drvctl -r -a scsibus scsibus0        # Bus neu abtasten
dmesg | tail                          # neuen Geraetenamen ablesen
gpt create wd1
gpt add -t ffs -l data1 wd1           # nutzt den gesamten freien Platz
dkctl wd1 listwedges                  # Wedge-Name merken, z.B. dk3
newfs -O2 /dev/rdk3
mkdir -p /data
mount -o log /dev/dk3 /data
echo "NAME=data1 /data ffs rw,log 1 2" >> /etc/fstab
df -h /data

Defekte Platte im RAID-Spiegel ersetzen

raidctl -s raid0                      # welche Komponente ist failed?
raidctl -f /dev/wd1a raid0            # falls noch nicht als failed markiert
# --- Platte physisch tauschen ---
disklabel wd0 > /tmp/label            # Layout der gesunden Platte
disklabel -R -r wd1 /tmp/label        # auf die neue uebertragen
raidctl -R /dev/wd1a raid0            # Rekonstruktion starten
raidctl -S raid0                      # Fortschritt beobachten
installboot -v /dev/rwd1a /usr/mdec/bootxx_ffsv2   # Bootblock nicht vergessen
raidctl -P raid0                      # Paritaet abschliessend pruefen

Dateisystem vergrößern

gpt show wd1                          # ist hinter der Partition Platz frei?
umount /data                          # resize_ffs braucht ungemountet
gpt resize -i 1 wd1                   # Partition auf Maximum ausdehnen
dkctl wd1 makewedges                  # Wedge-Groesse aktualisieren
fsck -y /dev/rdk3                     # Pflicht vor dem Vergroessern
resize_ffs -y /dev/rdk3
mount -o log /dev/dk3 /data
df -h /data

Dateisystem voll – systematisch vorgehen

df -h ; df -hi                        # Platz oder Inodes erschoepft?
du -h -d1 /var | sort -h | tail       # groesste Verzeichnisse
find /var -type f -size +100M -ls     # einzelne grosse Dateien
fstat | awk '$5=="-"' | head          # geloeschte, noch offene Dateien
ls -l /var/crash                      # alter Kernel-Dump?
newsyslog -nv                         # rotiert die Rotation ueberhaupt?

Sicheres Update des Basis-Systems

uname -a ; sysctl kern.version        # Ausgangslage dokumentieren
cp /netbsd /netbsd.old                # alten Kernel sichern
dump -0auf /backup/root.dump /        # vollstaendige Sicherung
cd /usr/src && ./build.sh -O ../obj -T ../tools -U kernel=GENERIC
cp ../obj/sys/arch/amd64/compile/GENERIC/netbsd /netbsd
shutdown -r now                       # zuerst nur den Kernel testen
# nach erfolgreichem Boot:
./build.sh -O ../obj -T ../tools -U install=/
etcupdate -s /usr/src/etc
postinstall -s /usr/src/etc check     # dann gezielt fix
shutdown -r now

Dienst startet nicht – Fehlersuche

/etc/rc.d/nginx status                # laeuft er ueberhaupt?
grep nginx /etc/rc.conf               # ist er aktiviert?
sh -x /etc/rc.d/nginx start           # Startskript mit Ablaufprotokoll
tail -100 /var/log/messages           # was meldet das System?
netstat -an | grep '\.80'             # belegt jemand anderes den Port?
npfctl stats                          # blockiert die Firewall?
rcorder /etc/rc.d/* | grep -n nginx   # startet er zu frueh?