BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Systemzugang für Benutzer auf SFTP beschränken

Möchte man bestimmte Benutzer nur per sftp(1) aufs System lassen, so kann man scponly dazu verwenden. scponly findet man im FreeBSD Portbaum unter shells/scponly:

# cd /usr/ports/shells/scponly && make install clean

Im danach folgenden Konfigurationsmenu kann man auswählen, welche zusätzlichen Protokolle ausser SFTP zugelassen werden sollen. Mit SCPONLY_SCP wird neben SFTP auch scp erlaubt. Wählt man die Option SCPONLY_CHROOT, lassen sich die Benutzer auch noch in eine chroot einsperren.

Um scponly bei einem Benutzer zu aktivieren, muss einfach die Shell des Benutzers auf /usr/local/bin/scponly gewechselt werden:

# chsh <Benutzer>
Login: <Benutzer>
Password: $1$xxxxxxxxxxxxxxxxxxxxxxx.
Uid [#]: <UID>
Gid [# or name]: >GID>
Change [month day year]:
Expire [month day year]:
Class: guest
Home directory: /home/<Benutzer>
Shell: /usr/local/bin/scponly
Full Name: <Name>
Office Location:
Office Phone:
Home Phone:
Other information:
:x

Hat man die chroot-Option ausgewählt, kann mit einem Script ein Benutzer angelegt werden, welcher gleich in eine chroot eingesperrt wird:

# cd /usr/local/share/examples/scponly/ && /bin/sh setup_chroot.sh
Next we need to set the home directory for this scponly user.
please note that the user's home directory MUST NOT be writeable
by the scponly user. this is important so that the scponly user
cannot subvert the .ssh configuration parameters.

for this reason, a writeable subdirectory will be created that
the scponly user can write into.

-en Username to install [scponly]<Benutzername>

-en home directory you wish to set for this user [/home/scponly]<home Verzeichnis>

-en name of the writeable subdirectory [incoming]<Schreibbares Unterverzeichnis>

creating /home/scponly/incoming directory for uploading files

please set the password for scponly:
Changing local password for scponly
New Password:<Passwort>
Retype New Password:<Passwort>
if you experience a warning with winscp regarding groups, please install
the provided hacked out fake groups program into your chroot, like so:
cp groups /home/scponly/bin/groups

Nun muss noch ein mini-devfs in die chroot gemountet werden:

# /usr/local/etc/rc.d/scponlyc start

Der Benutzer wird nun in sein home-Verzeichnis eingesperrt und hat nur für das schreibbare Unterverzeichnis Schreibrechte. Mehr Informationen zu scponly findet man in der Manpage scponly(8).

 Permalink

pkg-message eines Ports nachträglich anzeigen

Bei der Installation von Ports werden manchmal zusätzliche Informationen zur Installation angezeigt. Diese pkg-message wird automatisch unter /var/db/pkg/<Port>/+DISPLAY gespeichert. Mit der -D Option von pkg_info(1) kann man sich diese Meldung zu einem späteren Zeitpunkt anzeigen lassen:

# pkg_info -D fluxcms-1.6.0_4

Möchte man nicht die vollständige Versionsnummer angeben, so kann man mit einer Wildcard arbeiten:

# pkg_info -D fluxcms-\*

pkg_info ist auf FreeBSD bereits im Basissystem vorhanden.

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

Bilder aus Thumbs.db extrahieren

Unter Windows wird automatisch für Bilder eine Vorschaudatei Thumbs.db erstellt. Mit dieser kann man grundsätzlich nichts unter FreeBSD anfangen. Werden unter Windows Bilder gelöscht, werden diese jedoch nicht aus der Thumbs.db entfernt. Möchte man nun die Bilder aus der Thumbs.db extrahieren, lässt sich das unter FreeBSD mit vinetto machen. vinetto findet man im FreeBSD Portsbaum unter security/vinetto.

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

Nachdem vinetto installiert ist, kann angegeben werden, in welches Verzeichnis die Bilder gespeichert werden sollen und wo sich die Thumbs.db Datei befindet:

# vinetto -o <Ausgabeverzeichnis> <Pfad zur Thumbs.db>

Falls man möchte, kann mit der -H Option auch eine HTML Datei angelegt werden, in der die Metadaten der Bilder angezeigt werden:

# vinetto -o output -H Thumbs.db 

Root Entry modify timestamp : Wed Mar 23 22:39:46 2005

------------------------------------------------------

0001 Wed Jan 12 22:00:36 2005 DSC00404.JPG
0002 Wed Jan 12 22:00:38 2005 DSC00408.JPG
0003 Wed Jan 12 20:53:38 2005 image005.jpg
0004 Wed Jan 12 20:53:44 2005 image006.jpg
0005 Wed Jan 12 20:53:44 2005 image007.jpg
0006 Wed Jan 12 20:53:44 2005 image008.jpg
0007 Wed Jan 12 20:53:44 2005 image009.jpg

------------------------------------------------------

7 Type 2 thumbnails extracted to output/

Im Ausgabeverzeichnis findet man nun eine index.html Datei, welche mit einem Browser geöffnet werden kann.

 Permalink

Antwortzeiten einer Webseite bestimmen

Mit httping lassen sich die Antwortzeiten und die Erreichbarkeit einer Webseite, ähnlich wie mit ping(8), bestimmen. httping findet man im FreeBSD Portsbaum unter net/httping:

# cd /usr/ports/net/httping && make install clean

Nun kann man mit httping eine Webseite testen. Die zu testende URL fügt man hinter der der -g Option an:

# httping -g http://www.chruetertee.ch
PING www.chruetertee.ch:80 (http://www.chruetertee.ch):
connected to www.chruetertee.ch:80, seq=0 time=484.46 ms
connected to www.chruetertee.ch:80, seq=1 time=473.40 ms
connected to www.chruetertee.ch:80, seq=2 time=467.74 ms
connected to www.chruetertee.ch:80, seq=3 time=472.84 ms
^C--- http://www.chruetertee.ch ping statistics ---
4 connects, 4 ok, 0.00% failed
round-trip min/avg/max = 467.7/474.6/484.5 ms

httping beendet man mit Ctrl + C. Sollen nur eine gewisse Anzahl Anfragen gesendet werden, verwendet man die -c Option. Soll der HTTP Statuscode zusätzlich angezeigt werden, fügt man die -s Option hinzu:

#  httping -g http://www.chruetertee.ch -s -c 1
PING www.chruetertee.ch:80 (http://www.chruetertee.ch):
connected to www.chruetertee.ch:80, seq=0 time=471.09 ms 200 OK
--- http://www.chruetertee.ch:80/ ping statistics ---
1 connects, 1 ok, 0.00% failed
round-trip min/avg/max = 471.1/471.1/471.1 ms

Auch kann man eine Webseite über HTTPS testen. Dazu muss die -l Option verwendet werden:

# httping -l -g https://www.chruetertee.ch
PING www.chruetertee.ch:443 (https://www.chruetertee.ch):
connected to www.chruetertee.ch:443, seq=0 time=569.78 ms
connected to www.chruetertee.ch:443, seq=1 time=546.61 ms
connected to www.chruetertee.ch:443, seq=2 time=546.76 ms
^C--- https://www.chruetertee.ch ping statistics ---
3 connects, 3 ok, 0.00% failed
round-trip min/avg/max = 546.6/554.4/569.8 ms

Alle Optionen von httping findet man in der Manpage httping(1).

 Permalink

Herausfinden welcher Prozess das Unmounten einer Partition verhindert

Versucht man eine Partition zu unmounten, dies schlägt jedoch fehl, so hat meistens noch ein Prozess eine Datei auf dieser Partition offen:

# umount /tmp
umount: unmount of /tmp failed: Device busy

Mit fstat lässt sich die Prozess-ID und der Programmname des Prozesses ermitteln, der noch eine Datei auf dieser Partition geöffnet hat:

# fstat -f /tmp
USER     CMD          PID   FD MOUNT      INUM MODE         SZ|DV R/W
beat     xpdf        1312   wd /tmp          2 drwxrwxrwt     512  r
beat     xpdf        1312    4 /tmp          7 -rwxr-xr-x  148794  r

Mit der Prozess-ID lässt sich danach das Kommando mit allen Parametern bestimmen, mit dem der Prozess gestartet wurde.

# ps -p 1312
  PID  TT  STAT      TIME COMMAND
  1312  p3  S+     0:00,43 xpdf talk.pdf

Beendet man diesen Prozess, kann die Partition mit umount(8) aus dem Verzeichnisbaum entfernt werden.

Auch lassen sich mit fstat alle Prozesse von einem bestimmten Benutzer ermitteln, welche zur Zeit noch eine Datei geöffnet haben.

# fstat -u <Benutzername>

Mehr Informationen zu fstat findet man in der Manpage fstat(1).

 Permalink

ipfw Logdatei auswerten

In einer ipfw Regel kann zusätzlich ein log-Schlüsselwort angegeben werden:

/sbin/ipfw -q add deny log ip from any to any

Nun werden alle Pakete, auf die diese Regel zutrifft, von syslog protokolliert. In /etc/syslog.conf findet man heraus, in welche Logdatei diese Meldungen geschrieben werden:

security.*                   /var/log/security

Mit Hilfe von ipfwcount kann nun diese Datei ausgewertet werden. ipfwcount findet man im FreeBSD Portbaum unter security/ipfwcount:

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

Möchte man nun herausfinden, welchen Destination-Port die meisten geblockten Pakete haben, kann man folgenden Befehl verwenden:

# ipfwcount -dink dport -t 5 /var/log/security
Destination port (denied, incoming, 5 of 21)
------------------------------------------------
http 124
netbios-ssn 47
1026 44
microsoft-ds 26
loc-srv 22

Mit der -d Option werden geloggte Pakete einer deny Regel und mit -i werden eingehende Pakete gezählt. Mit -n werden die Portnummern durch den Portnamen ersetzt und mit -k dport wird angegeben, dass nach den Destination-Ports sortiert werden soll und durch -t 5 werden nur die Top 5 Ports angezeigt.

Soll nun gleichzeitig angezeigt werden, welche Rechner am meisten auf diese Ports zugegriffen haben, so kann folgender Befehl verwendet werden:

# ipfwcount -dink dport,shost -t 2 /var/log/security
Destination port (denied, incoming, 2 of 21)
------------------------------------------------
http 124
Source host (2 of 11)
------------------------------------------------
xyz.dclient.hispeedy.hc 71
xyz.dsl.cest1wll.ten 21

netbios-ssn 47
Source host (2 of 8)
------------------------------------------------
217.150.xyz.xyz 18
xyz.aci.mehs.da.pj 8

Nun sieht man für die zwei meist geblockten Destination-Ports je die beiden Rechner, die am meisten versucht haben auf diese Ports zuzugreifen.

Möchte man automatisch mit den periodic daily Mails eine Auswertung der ipfw Logdatei erhalten, so kann man einen Symlink in /usr/local/etc/portiodic/security erstellen:

# cd /usr/local/etc/periodic/security/ && ln -s /usr/local/share/examples/ipfwcount/100.ipfwcount

Danach muss ipfwcount in der /etc/periodic.conf aktiviert werden:

echo 'daily_status_security_ipfwcount_enable="YES"' >> /etc/periodic.conf

Mehr Informationen zu ipfwcount findet man in der Manpage ipfwcount(1).

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

2 Jahre chruetertee.ch

Freudig und auch ein wenig stolz darf ich Euch mitteilen, dass chruetertee.ch nun schon seit 2 Jahren online ist. Die stets wachsenden Besucherzahlen und Anzahl Links, die auf diese Seite zeigen, bestätigen und motivieren mich in meiner Arbeit, so dass wohl noch viele Artikel zum Thema BSD folgen werden.

Ich danke Euch für Euer Interesse und Eure Kommentare.

Speziell möchte ich Nina für das Korrekturlesen der Artikel und die Geduld die sie aufbringt, wenn ich wieder ewig nach einem neuen Befehl der Woche Artikel suche, danken. Auch möchte ich Alain danken, der mich damals auf die Idee mit chruetertee.ch gebracht hat, ein Jahr lang diese Seite gehostet hat und mir regelmässig Support mit dem Flux CMS gibt.

Beat

Comments (4)  Permalink

Nur neue Einträge einer Logdatei anzeigen

Beobachtet man regelmässig einige Logdateien und möchte, dass nur die neuen Einträge, die seit dem letzten Mal betrachten dazugekommen sind, angezeigt werden, so kann man since verwenden. since findet man im FreeBSD Portsbaum unter misc/since:

# cd /usr/ports/misc/since && make install clean

Betrachtet man nun eine Datei das erste Mal mit since, wird die ganze Datei angezeigt. Beim nächstem Aufruf mit since werden dann nur noch die neuen Einträge angezeigt. Sind in der Zwischenzeit keine Einträge dazugekommen, wird nichts angezeigt:

# since /var/log/messages
...
Sep  1 11:22:36 daedalus kernel: info: [drm] Setting GART location based on new memory map
Sep  1 11:22:36 daedalus kernel: info: [drm] Loading R300 Microcode
Sep  1 11:22:36 daedalus kernel: info: [drm] writeback test succeeded in 1 usecs
Sep  1 11:22:37 daedalus dhclient: New IP Address (ath0): 192.168.1.38
Sep  1 11:22:37 daedalus dhclient: New Subnet Mask (ath0): 255.255.255.0
Sep  1 11:22:37 daedalus dhclient: New Broadcast Address (ath0): 255.255.255.255
Sep  1 11:22:37 daedalus dhclient: New Routers (ath0): 192.168.1.1
Sep  1 11:36:14 daedalus kernel: ipfw: limit 100 reached on entry 700
Sep  1 11:45:36 daedalus su: beat to root on /dev/ttyp1
# since /var/log/messages
# logger test
# since /var/log/messages
Sep  1 11:51:50 daedalus beat: test

Mehr Informationen zu since findet man in der Manpage since(1).

 Permalink

I/O- anstatt CPU-Werte in top anzeigen

Möchte man auf FreeBSD herausfinden, welcher Prozess wieviel I/O-Last verursacht, kann man top im I/O Modus starten:

# top -mio
last pid: 1688; load averages: 0.90, 0.59, 0.40 up 0+03:14:51 21:27:52
51 processes: 3 running, 48 sleeping
CPU states: 28.8% user, 0.0% nice, 55.6% system, 1.2% interrupt, 14.4% idle
Mem: 175M Active, 616M Inact, 167M Wired, 16M Cache, 111M Buf, 21M Free
Swap: 1024M Total, 16K Used, 1024M Free

PID USERNAME VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND
1688 beat 17 643 0 174 0 174 29.15% dd
1004 root 130 8 0 0 0 0 0.00% Xorg
1033 beat 47 10 0 0 0 0 0.00% gkrellm
1676 beat 2595 712 81 60 0 141 23.62% thunderbird-bin
836 root 4 8 0 0 0 0 0.00% powerd
...

In diesem Modus werden nicht nur die Anzahl Lese- und Schreibvorgänge, sondern auch die Anzahl von Voluntary Context Switches (VCSW) und Involuntary Context Switches (IVSW) angezeigt. Ein Voluntary Context Switch wird ausgeführt, wenn ein Thread eine Ressource benötigt, welche zur Zeit nicht vorhanden ist, bei einem Involuntary Context Switch hat ein Thread seine Zeit in der CPU aufgebraucht oder ein höher priorisierter Thread soll ausgeführt werden. Mehr Informationen zu top findet man in der Manpage top(1).

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

RAM-Disk mit tmpfs auf FreeBSD erstellen

Wollte man bis anhin auf FreeBSD zum Beispiel die /tmp Partition in einer RAM-Disk anlegen, so musste man eine RAM-Disk mit fixer Grösse erstellen.

Seit einiger Zeit ist in FreeBSD 7-CURRENT eine Portierung der NetBSD tmpfs Implementation vorhanden. Somit können Partitionen im Arbeitsspeicher erstellt werden, ohne dass eine feste Grösse vorgegeben werden muss und auch nur der auf der Partition verwendete Platz im Arbeitsspeicher verwendet wird.

Eine RAM-Disk kann wie folgt erstellt werden:

# mount -t tmpfs tmpfs <Mountpunkt>

Möchte man /tmp fest in den Arbeitspeicher auslagern, fügt man folgende Zeile in der /etc/fstab ein:

tmpfs          /tmp        tmpfs   rw,mode=1777    0       0

Wird nun das System neu gestartet oder man mountet /tmp neu, ist /tmp als RAM-Disk vorhanden:

# mount
/dev/ad0s3a on / (ufs, local)
devfs on /dev (devfs, local)
tmpfs on /tmp (tmpfs, local)
/dev/ad0s3f on /usr (ufs, local, soft-updates)
/dev/ad0s3e on /var (ufs, local, soft-updates)
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 (4)  Permalink
Prev Next331-340/521