BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

System per Skript automatisch härten

Besitzt man viele Mehrbenutzersysteme, die man immer auf die gleiche Weise härten möchte, empfiehlt es sich einen Blick auf lockdown zu werfen. lockdown findet man im Portsbaum unter security/lockdown.

# cd /usr/ports/security/lockdown && make install clean 

Nun wird ein Shellskript unter /usr/local/bin/lockdown installiert. Dieses kann nun den eigenen Wünschen angepasst werden. Dazu erstellt man eine Kopie des Skriptes:

# cp /usr/local/bin/lockdown /usr/local/bin/lockdown.custom
lockdown passt folgende Dateien den eigenen Wünschen an:
  • /etc/ssh/sshd_config
  • /etc/rc.conf
  • /etc/auth.conf
  • /etc/sysctl.conf
  • Kernelkonfiguration

Ausserdem werden die Rechte von Programmen angepasst oder ganz entfernt, so dass normale Benutzer diese Programme nicht mehr benutzen können.

Zuerst muss die kern-Variable gesetzte werden, so dass sie auf die verwendete Kernelkonfiguration zeigt:

kern="/usr/local/bin/editkernel /usr/src/sys/i386/conf/<Kernelname>"

In der Section Mounting options werden die Optionen von Mountpunkten angepasst. In Build a debug kernel können Kerneloptionen der aktuellen Kernelkonfiguration hinzugefügt werden. Der Kernel muss danach allerdings manuell neu gebaut werden. Danach werden die verschiedenen Konfigurationsdateien der Maschine angepasst. Im letzten Abschnitt werden dann die Rechte von verschiedenen Programmen angepasst.

Hat man das Skript einmal seinen Wünschen angepasst, kann es ausgeführt werden:

# lockdown

Möchte man nun das Skript auf einem anderen Server ausführen, kann man einfach lockdown aus den Ports installieren, das selber angepasste Skript auf diesen Server kopieren und ausführen. So können mehrere Systeme innert kürzester Zeit identisch abgesichert werden.

 Permalink

Meldungen an syslog schicken

Mit logger(1) lassen sich Meldungen an syslog schicken. Dies kann vor allem bei Skripten, die unbeaufsichtigt laufen, wie cron-Jobs, von Vorteil sein. Eine solche Meldung lässt sich wie folgt erzeugen:

# logger -p <Facility>.<Priorität> -t <Bezeichnung> <Meldung>

Die Facility und Priorität welche von syslog aufgezeichnet werden, findet man in der /etc/syslog.conf heraus. Als Bezeichnung kann ein Wort genommen werden, mit dem alle Einträge gekennzeichnet werden, zum Beispiel den Skriptnamen.

Führt man folgenden Befehl aus:

# logger -p user.notice -t test "Das ist ein Test"

So findet man in der /var/log/message folgende Zeile:

Apr 14 08:21:17 daedalus test: Das ist ein Test

Die Meldung kann mit der -f Option auch aus einer Datei ausgelesen werden. Wird logger mit der -s Option aufgerufen, so wird die Meldung zusätzlich auch noch auf der Standardausgabe angezeigt. logger findet man sowohl auf FreeBSD als auch auf OpenBSD in Basissystem. Mehr Informationen findet man in der Manpage logger(1).

 Permalink

Neue Einträge einer Logdatei anzeigen

Mit tail(1) lassen sich die letzten 10 Zeilen einer Datei anzeigen. Benutzt man tail mit der Option -f, so werden zwar auch die letzten 10 Zeilen angezeigt, jedoch wird die Datei nicht geschlossen.

# tail -f <Logdatei>

Werden nun in diese Datei neue Einträge geschrieben, so werden diese von tail -f automatisch angezeigt. tail ist sowohl auf FreeBSD als auch auf OpenBSD im Basissystem vorhanden. tail auf FreeBSD besitzt allerdings noch eine Besonderheit. Benutzt man tail mit der -F Option, so werden wie bei -f fortlaufend die neuen Einträge angezeigt. Wird jetzt aber die Logdatei, die man betrachtet, rotiert, das heisst die Datei wird weggesichert und eine neue leere Datei an derselben Stelle erstellt, so würde tail -f immer noch von der alten Datei lesen, in die allerdings keine Einträge mehr geschrieben werden. tail -F dagegen erkennt, dass die Datei rotiert wurde und liest automatisch von der neuen Datei weiter. tail -f wird durch Ctrl + c beendet.

 Permalink

Partitionen per Label mounten

Besitzt man zum Beispiel eine USB-Festplatte, welche mit UFS formatiert ist und an verschiedenen FreeBSD Rechnern benutzt wird, so kann man sich das Mounten der Festplatte vereinfachen, indem man Labels benutzt. Damit man ein Label auf einer Partition erstellen kann, muss die Festplatte mit einem FreeBSD Rechner verbunden, jedoch nicht gemountet sein. Auch muss man zuerst das geom_label-Kernelmodul laden:

# kldload geom_label.ko

Nun kann das Label mit Hilfe von tunefs(8) auf die Partition geschrieben werden:

# tunefs -L <Label> <Partition>

Zum Beispiel:

# tunefs -L usbdisk /dev/da0s3c

Will man nun auf einem FreeBSD Rechner die Festplatte mounten, so muss, falls dies noch nicht geschehen ist, das geom_label-Kernelmodul geladen werden. Möchte man das Modul dauerhaft laden, so trägt man folgende Zeile in der /boot/loader.conf ein:

geom_label_load="YES"

Sobald man nun die Festplatte mit dem System verbindet, wird folgende Meldung auf der Konsole ausgegeben:

GEOM_LABEL: Label for provider da0s3 is ufs/usbdisk.

Nun lässt sich die Festplatte auf jedem FreeBSD System immer gleich mounten:

mount /dev/ufs/usbdisk /mnt/usb/

Mehr Informationen zu den Labels findet man in der Manpage glabel(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
Comments (3)  Permalink

portsopt Version 1.4 erschienen

Die Version 1.4 von portsopt ist erschienen. Folgende Änderungen wurden vorgenommen:

  • Kommentare, welche WITH(OUT)-Optionen beinhalten, werden nicht angezeigt
  • WITH(OUT)-Optionen, welche in Dateien wie Makefiles.dep (zum Beispiel bei security/courier-authlib) definiert sind, werden nun auch angezeigt. Vielen Dank an Bachi, welcher dieses Problem gemeldet hat.

portsopt durchsucht FreeBSD-Port-Makefiles nach WITH- und WITHOUT-Optionen und gibt diese aus. Auch lassen sich die Optionen der Abhängigkeiten eines Ports anzeigen.

portsopt findet man in den FreeBSD-Ports unter ports-mgmt/portsopt:

# cd /usr/ports/ports-mgmt/portsopt && make install clean
 Permalink

Detaillierte Hardwaredaten auslesen

Mit dmidecode lassen sich detaillierte Informationen, wie Hersteller, Modellname, Seriennummer und BIOS Version des Rechners, auslesen. Je nach Hersteller findet man auch Informationen über den Prozessor, die RAM-Bausteine und unter Umständen sogar die Slotbelegung von RAM oder Erweiterungskarten.

dmidecode findet man auf FreeBSD und OpenBSD unter sysutils/dmidecode im Portbaum. Zur Ausführung benötigt dmidecode root-Rechte. Wird es ohne Optionen aufgerufen, so werden alle vorhanden Informationen angezeigt:

# dmidecode

Mehr Informationen findet man in der Mapage dmidecode(8).

Comments (2)  Permalink

Fortschritt eines Programmes beobachten

Muss der Fortschritt eines Prozesses immer durch die Eingabe eines Befehls nachgeschaut werden, so kann man dies mit cmdwatch(1) automatisieren. Übergibt man cmdwatch nur den Befehl, den man ausführen möchte, so wird dieser alle 2 Sekunden ausgeführt und die Ausgabe angezeigt:

# cmdwatch "<Befehl>"

Möchte man zum Beispiel den Fortschritt beim Wiederherstellen eines RAID1-Arrays beobachten, kann man cmdwatch wie folgt benutzen:

# cmdwatch "atacontrol status ar0"

Every 2s: atacontrol status ar0 Fri Mar 16 19:44:07 2007

ar0: ATA RAID1 subdisks: ad3 ad2 status: REBUILDING 59% completed

Soll das Zeitintervall verändern werden, so kann der -n Option die Anzahl Sekunden übergeben werden, nach denen der Befehl wieder ausgeführt wird. Möchte man zum Beispiel alle 5 Sekunden einen df -k ausführen um zuzusehen wie sich die Partitionsbenutzung verändert, so kann man cmdwatch wie folgt verwenden:

# cmdwatch -n 5 "df -k"

Every 5s: df -k Sat Mar 17 12:21:28 2007

Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 507630 110396 356624 24% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 507630 18 467002 0% /tmp
/dev/ad0s1f 42645860 29636174 9598018 76% /usr
/dev/ad0s1e 1012974 94138 837800 10% /var
linprocfs 4 4 0 100% /usr/compat/linux/proc

Verwendet man zusätzlich die -d Option, so werden die Änderungen markiert.

cmdwatch findet man in den FreeBSD-Ports unter sysutils/cmdwatch und kann wie folgt installiert werden:

# cd /usr/ports/sysutils/cmdwatch/ && make install clean

cmdwatch beendet man mit Ctrl + c.

Comments (2)  Permalink

Dateinamen aus Pfad extrahieren

In einem Shellskript kann es vorkommen, dass man einen vollständigen Pfad zu einer Datei besitzt und man nur den Dateinamen verwenden möchte. Dazu gibt es basename(1). Man übergibt einfach den vollständigen Pfad an basename und kriegt den Dateinamen zurück:

# basename /usr/local/sbin/portsopt
portsopt

Umgekehrt kriegt man mit dirname(1) das Verzeichnis zurück, in dem sich die Datei befindet:

# dirname /usr/local/sbin/portsopt
/usr/local/sbin

Sowohl basename als auch dirname findet man in FreeBSD und OpenBSD im Basissystem.

 Permalink

OpenBSD in FreeBSD mit QEMU installieren

Mit QEMU lassen sich nicht nur ISO-Images testen, sondern auch ganze Betriebssysteme installieren. Dazu muss zuerst QEMU installiert werden:

# cd /usr/ports/emulators/qemu && make install clean

Nun kann eine Datei erstellt werden, in die ein Betriebssystem installiert werden soll:

# qemu-img create <Dateiname> <Grösse>

Möchte man zum Beispiel OpenBSD 4.0 in einer 2 GB grossen Datei installieren, so erstellt man diese Datei wie folgt:

# qemu-img create OPENBSD.img 2GB
Formating 'OPENBSD.img', fmt=raw, size=2097152 kB

Nun kann man das OpenBSD cd40.iso Image starten (welches sich auf der OpenBSD-CD befindet oder man im Internet herunterladen kann), um das System zu installieren:

# qemu -hda <Datei in die das System installiert werden soll> -cdrom <Installations ISO Image> -boot d

In diesem Fall zum Beispiel:

# qemu -hda OPENBSD.img -cdrom /cdrom/4.0/i386/cd40.iso -boot d

Sollte das Starten mit folgender Fehlermeldung fehlschlagen,

# qemu -hda OPENBSD.img -cdrom /cdrom/4.0/i386/cd40.iso -boot d
Falscher Systemaufruf(core dumped)

so muss das aio Kernelmodul nachgeladen werden:

# kldload aio

Hat man das KQEMU-Kernelmodul geladen, so hängt QEMU während des Startens von OpenBSD. Also muss das KQEMU Kernelmodul entladen werden:

# kldunload kqemu.ko

Nun startet OpenBSD und kann installiert werden. Konfiguriert man die erkennte Netzwerkkarte mit DHCP, so wird in QEMU automatisch eine IP-Adresse vergeben, mit welcher man auch aus QEMU heraus ins Internet kann, solange der Rechner mit dem Internet verbunden ist. Als Installationsquelle kann danach ftp ausgewählt werden und ein FTP-Server, zum Beispiel mirror.switch.ch, angegeben werden, von welchem die Dateisets heruntergeladen und installiert werden.

Ist die Installation beendet, so kann man OpenBSD in der QEMU herunterfahren und danach das frisch installierte System wie folgt starten:

# qemu -hda OPENBSD.img

Mit QEMU lässt sich nicht nur OpenBSD installieren, sondern auch zum Beispiel NetBSD, Linux oder Windows.

Comments (1)  Permalink

Festplattenbenutzung anzeigen

Ähnlich wie top(1) den Ressourcenverbrauch von Prozessen anzeigt, zeigt gstat(8) die Auslastung von Festplatten, Partitionen, RAID Arrays und virtuellen Laufwerken wie RAM-Disks an. Damit gstat ausgeführt werden kann, muss man root-Rechte besitzen. Die Anzeige wird automatisch regelmässig aktualisiert. Im folgenden Beispiel sieht man einen Ausschnitt während ein make clean in /usr/src ausgeführt wird:

# gstat
L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
0 0 0 0 0.0 0 0 0.0 0.0| fd0
0 0 0 0 0.0 0 0 0.0 0.0| acd0
0 0 0 0 0.0 0 0 0.0 0.0| ad4
0 0 0 0 0.0 0 0 0.0 0.0| ad6
32 559 0 0 0.0 559 1238 509.4 98.8| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
32 559 0 0 0.0 559 1238 511.5 98.8| ar0s1
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1f
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1f
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1a
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1b
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1c
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1d
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1e
32 559 0 0 0.0 559 1238 520.8 98.8| ar0s1f

Die Spalten bedeuten folgendes:

L(q) = Länge der Queue

ops/s, r/s, w/s = Operationen, Leseoperatationen und Schreiboperationen pro Sekunde

kBps = kiloBytes pro Sekunde

ms/r, ms/w = Millisekunden pro Lese- und Schreiboperation

%busy = % der Zeit mit mindestens einem Eintrag in der Queue

Man sollte sich allerdings nicht zu fest auf die %busy Spalte konzentrieren, da auch Werte über 100% auftreten können:

 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
[...]
5 261 0 0 0.0 261 31965 31.8 119.6| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
5 261 0 0 0.0 261 31965 31.8 119.6| ar0s1
[...]
5 261 0 0 0.0 261 31965 32.0 119.7| ar0s1

gstat verlässt man wie top indem man q drückt. Mehr Informationen findet man in der Manpage gstat(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink
Prev Next61-70/84