BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

SSH nur mit Public Key Authentifizierung erlauben

Aus Sicherheitsgründen kann man das Einloggen per SSH nur noch mit Public-Key Authentifizierung erlauben. Dazu muss zuerst ein Schlüsselpaar erzeugt werden:

# ssh-keygen -t rsa

Es empfiehlt sich eine Passphrase für den Schlüssel zu setzen. Danach kann der Public-Key auf den Rechner geladen werden:

# cd ~/.ssh && cat id_rsa.pub | ssh <Benutzer>@<Rechner> "cat >> .ssh/authorized_keys"

Nun muss die sshd.conf angepasst werden. Diese befindet sich sowohl auf FreeBSD, als auch auf OpenBSD unter /etc/ssh/sshd_config.

# echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
# echo "PasswordAuthentication no" >> /etc/ssh/sshd_config

Nun muss der SSH-Daemon neu gestartet werden. Auf FreeBSD wird dies wie folgt gemacht:

# /etc/rc.d/sshd restart

Auf OpenBSD kann dies so gemacht werden:

# kill -HUP `ps -ax | grep sbin/sshd | grep -v grep | awk '{print $1}'`

Nun kann man sich nur noch mit der Public-Key Authentifizierung anmelden. Sollte man allerdings seinen Private-Key verlieren, so hat man sich per SSH aus dem Rechner ausgesperrt. Es lohnt sich also eine Sicherheitskopie von seinem Private-Key (~/.ssh/id_rsa) an einem sicheren Ort aufzubewahren.

Comments (3)  Permalink

ISO-Image erstellen

Möchte man Daten auf eine CD brennen, so muss zuerst ein ISO-Image erstellt werden. Ein ISO-Image kann mit mkisofs(8) erstellt werden. mkisofs befindet sich im sysutils/cdrtools Port. Zuerst müssen alle Daten, die später im Image vorhanden sein sollen, in ein Verzeichnis kopiert werden. Danach kann aus diesem Verzeichnis ein Image erstellt werden:

# mkisofs -o <Name des Images> <Pfad zu Verzeichnis mit Daten>

Wird die CD später mit einem unixoiden Betriebssystem verwendet, so empfiehlt es sich noch die -r Option zu verwenden, damit die Rock Ridge Erweiterung aktiviert wird, und die Dateirechte und der Besitzer auf vernünftige Werte gesetzt werden.

Soll die CD mit Windows verwendet werden, so sollte die Joliet Erweiterung mit der -J Option aktiviert werden. Werden Dateinamen die länger als 64 Zeichern sind verwendet, so kann die -joliet-long Option zusätzlich verwendet werden.

Im folgenden Beispiel wird der Inhalt von /var/backups in ein Image namens backup.iso gepackt und die Rock Ridge Erweiterung wird aktiviert:

# mkisofs -r -o backup.iso /var/backups

Möchte man danach den Inhalt des Images nochmals ansehen, so kann das Image wie folgt gemountet werden:

# mdconfig -a -t vnode -f <Pfad zu Image> -u 0
# mount -t cd9660 /dev/md0 /mnt/

Nun ist der Inhalt unter /mnt sichtbar. Das Image kann nun wie folgt wieder geunmountet werden:

# umount /mnt/
# mdconfig -d -u 0

Jetzt kann das ISO-Image mit burncd(8) gebrannt werden.

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

NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found

Befinden sich in /var/log/debug.log und /var/log/cron folgende Fehlermeldungen:

Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, group_compat, setgrent, not found
Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found
Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, passwd_compat, endpwent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, group_compat, setgrent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, passwd_compat, endpwent, not found

So kann der Inhalt der /etc/nsswitch.conf in Folgenden geändert werden, damit diese Meldungen verschwinden:

group: files
hosts: files dns
networks: files
passwd: files
shells: files
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

Festplatte auf Fehler überprüfen

Möchte man eine Festplatte überprüfen, zum Beispiel weil sie komische Geräusche von sich gibt oder man Einträge in den Logdateien findet, die auf ein Problem mit der Festplatte hin deuten, so helfen einem die smartmontools weiter.

Auf FreeBSD und OpenBSD findet man die smartmontools in den Ports unter sysutils/smartmontools.

Um die Festplatte zu prüfen, braucht man die device-Bezeichnung der Festplatte. Diese findet man zum Beispiel mit mount heraus. Auf FreeBSD beginnen IDE/ATA-Platten mit ad, SCSI-Platten mit da. Auf OpenBSD beginnen IDE/ATA-Platten mit wd, SCSI-Platten mit sd.

Um Informationen über die Festplatte anzuzeigen, kann die -a Option verwendet werden. Folgendes Beispiel zeigt auf OpenBSD die Informationen von wd0. Wichtig auf OpenBSD ist das c nach der Bezeichnung, welches auf die ganze Festplatte zeigt:

# smartctl -a /dev/wd0c

Um einen short-Test auf ad0 unter FreeBSD ausführen zu lassen, kann man die -t short Option verwenden. Dieser Test kann im laufenden Betrieb durchgeführt werde.

# smartctl -t short /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Sat Oct 14 14:38:43 2006

Use smartctl -X to abort test.

Dieser Test geht nur einige Minuten und danach kann das Ergebnis wie folgt betrachtet werden:

# smartctl -l selftest /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4090 -

Dieser Test verlief ohne Fehler, danach kann ein ausführlicherer Test gestartet werden. Dieser dauer allerdings einiges länger, lässt sich aber auch im laufenden Betrieb durchführen:

# smartctl -t long /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 55 minutes for test to complete.
Test will complete after Sat Oct 14 15:44:09 2006

Use smartctl -X to abort test.

Ist der Test beendet, kann das Ergebnis gleich wie beim short-Test betrachtet werden.

# smartctl -l selftest /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 4091 -
# 2 Short offline Completed without error 00% 4090 -

Natürlich gibt es keine Garantie, wenn mit smartctl(8) keine Fehler gefunden werden, dass mit der Festplatte alles in Ordnung ist. Findet man allerdings Fehler sollte man sich langsam gedanken über eine neue Platte machen.

 Permalink

Eine TCP-Verbindung trennen

Manchmal möchte man aus gewissen Gründen eine TCP-Verbindung trennen, zum Beispiel weil eine SSH oder FTP-Sitzung nicht sauber beendet worden ist. Dazu muss man zuerst herausfinden, welche Verbindung man kappen möchte. Dies findet man mit fstat auf OpenBSD oder sockstat -c auf FreeBSD heraus. Um die Verbindung zu beenden, braucht man die IP-Adresse und den TCP-Port vom Absender und dem Zielrechner.

Folgendermassen wird dann mit tcpdrop(8) eine Verbindung getrennt:

# tcpdrop <Lokale IP-Adresse> <Lokaler TCP-Port> <IP-Adresse des Benutzers> <TCP-Port>

Möchte man nun auf FreeBSD die SSH-Verbindung vom test-Benutzer trennen, muss man zuerst die benötigten Daten herausfinden und kann danach die Verbindung trennen:

# sockstat -c | grep sshd
test sshd 51960 3 tcp4 10.0.0.2:22 10.0.0.155:52711
# tcpdrop 10.0.0.2 22 10.0.0.155 52711

Auf OpenBSD findet man die benötigten Daten wie folgt:

# fstat | grep 'sshd.*internet.*<--'
test sshd 19075 5* internet stream tcp 0xd694bc84 10.0.0.1:22 <-- 10.0.0.155:53325

tcpdrop befindet sich sowohl in FreeBSD als auch in OpenBSD im Basissystem.

 Permalink

Schneller Zugriff auf FreshPorts und das CVSweb

Möchte man die Änderungen einer Datei im CVSweb nachsehen, so muss man nicht extra einen Browser öffnen, die CVSweb Seite öffnen und sich durch den Verzeichnisbau hangeln, sondern kann portcvsweb(1) benutzen. portcvsweb erkennt anhand der CVS Tags einer Datei oder eines vorhandenen Makefiles um welche Datei es sich handelt, und öffnet die richtige CVSweb-Seite im Browser.

Befindet man sich zum Beispiel im /usr/src/usr.sbin/powerd Verzeichnis und möchte die CVSweb-Seite von powerd.c anschauen, so gibt man einfach portcvsweb powerd.c ein und folgende Seite wird geöffnet: http://www.FreeBSD.org/cgi/cvsweb.cgi/src/usr.sbin/powerd/powerd.c#rev1.6.2.4
Auch lassen sich ganze Verzeichnisse anzeigen. Befindet man sich zum Beispiel im Portbaum in der Kategorie www (/usr/ports/www) und möchte die Seite des fluxcms anschauen, so gibt man portcvsweb fluxcms ein und folgende Seite wird gestartet: http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/www/fluxcms/

Auch die FreshPorts Seite eines Portes kann einfach mit der -F Option erreicht werden:

# portcvsweb -F fluxcms

Man muss sich nicht einmal im Portbaum befinden, um portcvsweb aufzurufen. Einfach die Kategorie und den Portnamen an portcvsweb übergeben:

# portcvsweb -F german/ding

portcvsweb nimmt den ersten der folgenden Browser der auf einem System vorhanden ist: w3m, lynx, links, firefox, mozilla oder netscape. Möchte man einen bestimmten Browser verwenden, so kann man diesen in der BROWSER-Variable setzen:

# echo setenv BROWSER <Browser> >> ~/.cshrc

portcvsweb befindet sich im sysutils/portupgrade Port

UPDATE 05.02.2007: portupgrade wurde von sysutils in die neue Kategorie ports-mgmt verschoben. portupgrade kann nun wie folgt installiert werden:

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

rc.conf aufräumen

Auf FreeBSD sind in der /etc/defaults/rc.conf Datei die Standardwerte der Systemvariablen festgelegt. Diese können in der /etc/rc.conf überschrieben werden. Mit der Zeit können sich Variablen in der rc.conf ansammeln, die identisch mit jenen in der /etc/defaults/rc.conf sind. Um die rc.conf übersichtlicher zu machen, können diese und auskommentierte Variablen entfernt werden. Dafür kann man rclean verwenden. rclean befindet sich in den FreeBSD Ports unter sysutils/rclean.

Hier zu Beispiel eine rc.conf die mit der Zeit gewachsen ist:

hostname="daedalus.chruetertee.ch"
ifconfig_em0="DHCP"
keymap="swissgerman.iso"
sshd_enable="YES"
usbd_enable="YES"
sendmail_enable="NONE"
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="YES"
syslogd_enable="YES"
syslogd_flags="-ss"
clear_tmp_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfwrules"
pccard_enable="YES"
#ifconfig_ath0="DHCP wpa"
#ifconfig_wi0="DHCP"
kern_securelevel_enable="YES"
kern_securelevel="-1"
devd_enable="YES"
ipv6_enable="NO"
inetd_enable="NO"
icmp_log_redirect="NO"
#gateway_enable="YES"
#natd_enable="YES"
#natd_interface="wi0"
#natd_flags=""
#tcp_extensions="NO"
#tcp_keepalive="NO"
icmp_bmcastecho="NO"
dumpdev="NO"
#clamav_clamd_enable="YES"
#clamav_freshclam_enable="YES"
devfs_enable="YES"
#ntpd_enable="YES"
#ntpd_sync_on_start="YES"
jail_enable="NO"

Ruft man nun rclean auf, werden auskommentierte und überflüssige Variablen entfernt:

# rclean
# Reordered by rclean on Fri Sep 22 19:55:30 2006
# rclean Copyright (c) 2002 Lapo Luchini <lapo@lapo.it>
# Please make all changes to this file, not to /etc/defaults/rc.conf
# This file contains just the overrides from /etc/defaults/rc.conf
pccard_enable="YES" # "NO"
hostname="daedalus.chruetertee.ch" # ""
background_dhclient="YES" # "NO"
firewall_enable="YES" # "NO"
firewall_script="/etc/ipfwrules" # "/etc/rc.firewall"
ifconfig_em0="DHCP" # "<not defined>"
syslogd_flags="-ss" # "-s"
sshd_enable="YES" # "NO"
keymap="swissgerman.iso" # "NO"
sendmail_enable="NONE" # "NO"
usbd_enable="YES" # "NO"
clear_tmp_enable="YES" # "NO"
kern_securelevel_enable="YES" # "NO"
portmap_enable="YES" # "<not defined>"
devfs_enable="YES" # "<not defined>"

rclean erstellt nun Kommentare, welche die Standardwerte der /etc/defaults/rc.conf aufzeigen. Möchte man diese Kommentare nicht haben, so kann man rclean mit der -n Option aufrufen. Will man die neue rc.conf speichern, so benutzt man die -w Option.

# rclean -n -w /tmp/rc.conf

Nun sollte man von der alten rc.conf eine Sicherheitskopie erstellen und kann danach die rc.conf mit der neuen und aufgeräumteren Version überschreiben.

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

Ports aktualisieren mit portmaster

Mit portmaster(8) lassen sich genauso wie mit portupgrade(1) Ports aktualisieren. Jedoch ist portmaster ein Shellskript und hat nicht wie portupgrade ruby und perl als Abhängigkeit. portmaster findet man in den Ports unter sysutils/portmaster:

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

Möchte man nun herausfinden, von welchen Programmen es in den Ports neuere Versionen gibt, so kann man dies folgendermassen tun:

# portmaster -L | grep -B1 '    '

Der Abstand zwischen den beiden Hochkommas ist ein Tabulator.

Danach kann ein Port wie folgt aktualisiert werden:

# portmaster <Portname>

Möchte man alle Ports die von einem Port abhängen aktualisieren, so kann man die -r Option verwenden:

# portmaster -r <Portname>

Mit der -b Option wird von einem Port der akualisiert wird, zuerst ein Backup erstellt. Die -f Option aktualisiert die Ports, egal ob eine neuere Version in den Ports ist oder nicht. Mit der -n Option kann man sich Anzeigen lassen, was der portmaster machen würde, dies wird aber nicht durchgeführt. Möchte man make(1) Argumente übergeben so benutzt man die -m Option.

Mehr Informationen zu portmaster findet man in der Manpage portmaster(8) oder auf der Webseite: http://dougbarton.us/portmaster.html

UPDATE 05.02.2007:

portmaster wurde von sysutils in die neue Kategorie ports-mgmt verschoben. portmaster kann nun wie folgt installiert werden:

# cd /usr/ports/ports-mgmt/portmaster && make install clean
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 (1)  Permalink

Prozesse als Baum darstellen

Möchte man darstellen, welcher Prozess von welchem gestartet wurde, so lässt sich dies mit pstree(1) tun.

pstree findet man sowohl auf FreeBSD als auch auf OpenBSD in den Ports unter sysutils/pstree.

Ruft man pstree ohne Optionen auf, so wird ein Baum aller für den Benutzer sichtbaren Prozesse gebildet:

# pstree
-+= 00000 root [swapper]
|-+= 00001 root /sbin/init --
| |--= 00166 root adjkerntz -i
| |--= 00248 root /usr/sbin/wpa_supplicant -B -q -i ath0 -c /etc/wpa_supplican
| |--= 00262 _dhcp dhclient: ath0 (dhclient)
| |--= 00368 root /sbin/devd
| |--= 00413 root /usr/sbin/syslogd -ss
| |--= 00438 root /usr/sbin/rpcbind
| |--= 00518 root /usr/sbin/powerd -a max -b min
| |--= 00536 root /usr/sbin/usbd
| |--= 00580 root /usr/sbin/sshd
| |--= 00587 root /usr/sbin/cron -s
| |--= 00625 root /usr/sbin/moused -p /dev/psm0 -t auto
| |-+- 00676 root /usr/X11R6/bin/xdm -nodaemon ttyv8
| | |--= 00679 root /usr/X11R6/bin/X -auth /usr/X11R6/lib/X11/xdm/authdir/auth
| | \-+= 00680 root xdm: :0 (xdm)
| | \-+= 00712 beat fluxbox
| | |--- 00715 beat gkrellm
| | |--- 00716 beat xscreensaver
| | |--- 00718 beat oneko -bsd
| | |-+= 00736 beat /bin/sh -c thunderbird
| | | \-+- 00737 beat /bin/sh /usr/X11R6/bin/thunderbird
...

Mit der -u <Benutzer> Option werden nur Zweige dargestellt, die auch Prozesse beinhalten, die unter dem angegebenen Benutzer laufen.

Mit der -U Option werden Zweige, die nur root-Prozesse beinhalten, nicht angezeigt

Wem die Darstellung von pstree nicht gefällt, sollte mal die -g 2 Option benützen.

Möchte man nur einen Zweig darstellen, der einen gewissen Prozess beinhaltet, so kann man entweder -s <Prozessname> oder -p <Prozess-ID> verwenden.

Alle Optionen erhält man mit pstree -h.

Comments (2)  Permalink

Anzeigen welcher Host wieviel Bandbreite benutzt

Mit iftop(8) lassen sich die Verbindungen einer Netzwerkschnittstelle im Stile von top(1) anzeigen. Mit der -i Option kann man die Netzwerkschnittstelle angeben, die man beobachten will:

# iftop -i <Netzwerkschnittstelle>

Nun werden alle Verbindungen untereinander angezeigt und ein schwarzer Balken visualisiert die zur Zeit verwendete Bandbreite jeder Verbindung, welche jedoch in gesendete und empfangene Daten aufgeteilt ist. Zusätzlich werden am rechten Rand das Total der empfangenen und gesendeten Daten der letzten 40, 10 und 2 Sekunden angezeigt.

iftop

Am unteren Rand wird das Total aller Verbindungen der angezeigten Schnittstelle angezeigt. Da iftop die IP-Adressen in Hostnamen auflöst, ist es möglich, dass das Ergebnis von iftop verfälscht wird, da iftop nun selber Netzwerkverkehr generiert. Das Auflösen der IP-Adressen kann mit der -n Option unterbunden werden.

iftop kann nur als root ausgeführt werden. Auf FreeBSD befindet sich iftop unter net-mgmt/iftop in den Ports. Alle Optionen von iftop findet man in der Manpage iftop(8).

 Permalink
Prev Next231-240/305