BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Benutzerkonto temporär deaktivieren

Soll ein Benutzerkonto temporär deaktiviert werden, so kann die Benutzershell in /sbin/nologin geändert werden. Dies kann mit chpass(1) gemacht werden:

# chpass -s /sbin/nologin <Benutzer>

Versucht sich nun ein Benutzer anzumelden, wird ihm mitgeteilt, dass dieses Benutzerkonto deaktiviert ist:

# ssh test@test
This account is currently not available.
Connection to test closed.

Soll das Benutzerkonto wieder aktiviert werden, kann dem Benutzer wieder eine gültige Shell zugewiesen werden:

# chpass -s <Shell> <Benutzer>

Sowohl nologin(8) als auch chpass(1) sind auf FreeBSD und OpenBSD im Basissystem vorhanden.

Comments (1)  Permalink

Ausführbare Binärdatei komprimieren

Will man eine ausführbare Binärdatei komprimieren, weil man auf einem Speichermedium nur beschränkt Platz hat, kann man dies mit gzexe tun. Im folgenden Beispiel befindet sich nslookup, welches 1.1MB gross ist, in einem Verzeichnis:

# ls -l
total 1104
-r-xr-xr-x 1 beat wheel 1100348 7 Jul 12:47 nslookup*
# file nslookup
nslookup: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), stripped

Nun wird die Datei komprimiert:

# gzexe nsloopkup 
nsloopkup: 58.4%
# ls -l
total 1568
-r-xr-xr-x 1 beat wheel 457492 7 Jul 12:40 nslookup*
-r-xr-xr-x 1 beat wheel 1100348 7 Jul 12:40 nslookup~*

Die ursprüngliche Datei hat nun eine Tilde am Ende des Dateinamens. Die komprimierte Datei ist über die Hälfte kleiner als das Original, kann jedoch immer noch ausgeführt werden, allerdings mit einem kleinen Performanceverlust:

# file nslookup
nslookup: Bourne shell script text executable
#./nslookup chruetertee.ch
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
Name: chruetertee.ch
Address: 217.150.245.53

Die originale Datei kann nun gelöscht werden.

# rm nslookup~

Möchte man die originale Datei wiederherstellen, verwendet man die -d Option von gzexe:

# gzexe -d nslookup
# ls -l
total 1568
-r-xr-xr-x 1 beat wheel 1100348 7 Jul 12:54 nslookup*
-r-xr-xr-x 1 beat wheel 457492 7 Jul 12:51 nslookup~

Nun wird die komprimierte Datei mit einer Tilde markiert und kann gelöscht werden.

gzexe findet man sowohl auf FreeBSD als auch auf OpenBSD im Basissystem. Mehr Informationen zu gzexe findet man in der Manpage gzexe(1).

 Permalink

Swap verschlüsseln

Möchte man den Swapbereich verschlüsseln, so kann man unter FreeBSD in der /etc/fstab die Devicebezeichnung mit einem .eli ergänzen.

# Device                Mountpoint     FStype   Options    Dump    Pass#
/dev/ad0s1b.eli none swap sw 0 0

Nach einem Neustart würde der Swapbereich von geli(8) verschlüsselt. Gemäss geli(8) sollte bei Swapbereichen zusätzlich in der /etc/rc.conf die "Detach on last close"-Option mittels -d gesetzt werden:

geli_swap_flags="-d"

Nach einem Neustart wird der Swapbereich verschlüsselt:

GEOM_ELI: Device ad0s1b.eli created.
GEOM_ELI: Encryption: AES-CBC 128
GEOM_ELI: Crypto: software

Auch die Ausgabe von swapinfo(8) zeigt nun die verschlüsselte Swappartition an:

# swapinfo 
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.eli 1048576 0 1048576 0%

Auf OpenBSD kann die Swapverschlüsselung mittels einer sysctl-Variable eingeschaltet werden. Einfach in der /etc/sysctl.conf folgenden Eintrag hinzufügen und das System neu starten:

vm.swapencrypt.enable=1
 Permalink

Swapdatei hinzufügen

Werden die vorhandenen Swap-Partitionen immer mehr gefüllt und es lassen sich keine weiteren Festplatten hinzufügen um dem System mehr Swappartitionen zur Verfügung zu stellen, so kann man eine Swapdatei erstellen, die das System als Auslagerungsspeicher benutzt. Anzeichen für zu wenig Swap- bzw. Arbeitsspeicher sind Meldungen wie diese in /var/log/messages:

swap_pager_getswapspace(4): failed
swap_pager_getswapspace(9): failed
swap_pager_getswapspace(3): failed
swap_pager_getswapspace(8): failed
swap_pager_getswapspace(2): failed
pid 95498 (httpd), uid 1003, was killed: out of swap space

Folgendes System besitzt 1GB Swap wovon 7% besetzt sind.

# swapinfo 
Device 1K-blocks Used Avail Capacity
/dev/ar0s1b 1048576 69488 979088 7%

Zuerst muss eine Swapdatei angelegt und die Berechtigungen angepasst werden. Folgendes Beispiel erstellt eine 1GB grosse Swapdatei:

# dd if=/dev/zero of=/usr/swapdatei bs=1024k count=1024
#
chmod 0600 /usr/swapdatei
Nun kann die Swapdatei dem System zur Verfügung gestellt werden:
# mdconfig -a -t vnode -f /usr/swapdatei -u 0
# swapon /dev/md0
Möchte man, dass die Swapdatei auch nach einem Neustart verwendet wird, kann folgende Zeile in die /etc/rc.conf eingetragen werden:
swapfile="/usr/swapdatei"
Nun kann mit swapinfo(8) überprüft werden, ob das System die zusätzliche Swapdatei verwendet.
# swapinfo 
Device 1K-blocks Used Avail Capacity
/dev/ar0s1b 1048576 70204 978372 7%
/dev/md0 1048576 0 1048576 0%
Total 2097152 70204 2026948 3%
 Permalink

SMTP-Tester für die Kommandozeile

Möchte man die Funktionalität eines einfachen SMTP Servers testen, kann man dies mit telnet machen. Sobald man allerdings auch Verschlüsselung und Authentifizierung des Servers testen muss, geht dies mit telnet nicht mehr. In diesem Falle hilft einem swaks weiter.

Auf FreeBSD findet man swaks unter mail/swaks:

# cd /usr/ports/www/swaks && make install clean

Nun kann mit der -s Option angegeben werden, welcher Server getestet werden soll:

# swaks -s mail.chruetertee.ch
To: beat@chreutertee.ch
=== Trying mail.chruetertee.ch:25...
=== Connected to mail.chruetertee.ch.
<- 220 mail.chruetertee.ch ESMTP Sendmail 8.13.6/8.13.6
-> EHLO daedalus.network.local
<- 250-mail.chruetertee.ch
<- 250-8BITMIME
<- 250-PIPELINING
<- 250-HELP
<- 250 SIZE 26214400
-> MAIL FROM:<beat@daedalus.network.local>
<** 553 <beat@daedalus.network.local> unable to verify address
-> QUIT
<- 221 mail16.bluewin.ch QUIT
=== Connection closed with remote host.

Nun sieht man, dass die Absenderadresse nicht aufgelöst werden konnte und deshalb die Mail nicht versandt wurde.

Im folgenden Beispiel wird die Absenderadresse mit der -f Option festgelegt und die Verbindung verschlüsselt via SSMTP versendet. Zudem muss der Benutzer authentifiziert werden:

# swaks -s mail.chruetertee.ch --protocol SSMTP -f null@chreutertee.ch -a
To: beat@chreutertee.ch
Username: beat
Password: **************
=== Trying mail.chruetertee.ch:465...
=== Connected to mail.chruetertee.ch.
=== TLS started w/ cipher DHE-DSS-AES256-SHA
<~ 220 mail.chruetertee.ch ESMTP Sendmail 8.13.6/8.13.6; Sat, 30 Jun 2007 12:47:15 GMT
~> EHLO daedalus.network.local
<~ 250-mail.chruetertee.ch Hello 192.168.1.1 [192.168.1.1], pleased to meet you
<~ 250-ENHANCEDSTATUSCODES
<~ 250-PIPELINING
<~ 250-8BITMIME
<~ 250-SIZE
<~ 250-DSN
<~ 250-ETRN
<~ 250-AUTH PLAIN LOGIN
<~ 250-DELIVERBY
<~ 250 HELP
~> AUTH LOGIN
<~ 334 asdfghjklwert
~> dfghjj==
<~ 334 qwertzuioiuz
~> sdfghjklmnbvcxyre
<~ 235 2.0.0 OK Authenticated
~> MAIL FROM:<null@chreutertee.ch>
<~ 250 2.1.0 <null@chreutertee.ch>... Sender ok
~> RCPT TO:<beat@chreutertee.ch>
<~ 250 2.1.5 <beat@chreutertee.ch>... Recipient ok
~> DATA
<~ 354 Enter mail, end with "." on a line by itself
~> Date: Sat, 30 Jun 2007 14:45:58 +0200
~> To: beat@chreutertee.ch
~> From: null@chreutertee.ch
~> Subject: test Sat, 30 Jun 2007 14:45:58 +0200
~> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
~>
~> This is a test mailing
~>
~> .
<~ 250 2.0.0 l5UClFLM068527 Message accepted for delivery
~> QUIT
<~ 221 2.0.0 mail.chruetertee.ch closing connection
=== Connection closed with remote host.

swaks gibt immer die vollständige Kommunikation zwischen dem Client und dem Server aus, so können Fehler und Probleme eines SMTP-Servers erkannt werden. swaks bietet eine grosse Anzahl von Optionen, welche alle in der Manpage beschrieben sind, welche man wie folgt aufruft:

# swaks --help
 Permalink

Monitor für den pf Paketfilter

Für den pf Paketfilter gibt es pftop, welches ähnlich wie top(1), regelmässig Informationen zum Netzwerkverkehr durch die pf anzeigt. Es kann der Status, die Verbindungsdauer und Geschwindigkeit, Verbindungen pro pf Regel und vieles mehr angezeigt werden. pftop findet man sowohl auf FreeBSD als auch auf OpenBSD in den Ports unter sysutils/pftop:

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

Danach kann pftop als root gestartet werden:

# pftop

pftop besteht aus verschiedenen Ansichten. Nachdem pftop gestartet wurde, kann mit v in die nächste Ansicht gewechselt werden. Mit 0 - 8 kann direkt in eine der neun Ansichten gewechselt werden. pftop kann durch q wieder beendet werden.

Im Batchmode, welchen man durch die -b Option startet, wird die Anzeige einmal auf die Standardausgabe geschrieben und pftop danach beendet. Mit der -v <Ansicht> Option kann festgelegt werden, welche Ansicht angezeigt werden soll. Gültige Argumente für die Ansicht sind: default, label, long, queue, rules, size, speed, state und time.

Mehr Informationen zu pftop findet man in der Manpage pftop(8).

 Permalink

Selbstentpackendes Archiv aus Textdateien erstellen

Besitzt man viele Textdateien, die man verschicken oder übertragen möchte, kann man mit shar(1) ganz einfach ein selbstentpackendes Archiv erstellen. Im folgenden Beispiel werden drei Textdateien erstellt, wovon sich eine in einem Unterordner befindet.

# echo "Erste Datei" > test1
# echo "Zweite Datei" > test2
# mkdir ordner
# echo "Dritte Datei" > ordner/test3

Nun wird mit Hilfe von shar ein Archiv erstellt.

# shar `find . -print` > /tmp/archiv

Dieses Archiv kann nun als Mail verschickt oder auf einen anderen Rechner übertragen werden. Zum Entpacken kann das Archiv einfach als Shell-Skript ausgeführt werden, danach werden die Dateien entpackt:

# sh archiv 
c - .
x - ./test1
x - ./test2
c - ./ordner
x - ./ordner/test3
# ls -l
total 8
-rw-r--r-- 1 beat wheel 708 16 Jun 13:29 archiv
drwxr-xr-x 2 beat wheel 512 16 Jun 13:29 ordner/
-rw-r--r-- 1 beat wheel 12 16 Jun 13:29 test1
-rw-r--r-- 1 beat wheel 13 16 Jun 13:29 test2
# cat test?
Erste Datei
Zweite Datei

shar(1) befindet sich sowohl auf FreeBSD also auch auf OpenBSD im Basissystem.

 Permalink

Benutzerkonto vollständig entfernen

Um einen Benutzer vollständig von einem FreeBSD-System zu entfernen, kann rmuser verwendet werden. Folgende Arbeiten werden von rmuser vorgenommen:

  • Entfernt alle crontab-Einträge des Benutzers
  • Entfernt alle at-Jobs des Benutzers
  • Beendet alle laufende Prozesse des Benutzers
  • Entfernt den Benutzer aus /etc/passwd und /etc/master.passwd
  • Löscht das home-Verzeichnis des Benutzers
  • Löscht alle Mails des Benutzers in /var/mail
  • Entfernt alle Dateien des Benutzers aus /tmp, /var/tmp und /var/tmp/vi.recover
  • Entfernt den Benutzer aus allen Gruppen, denen er zugeordnet ist. Sind einer Gruppe danach keine Benutzer mehr zugeordnet, wird die Gruppe gelöscht
  • Entfernt alle message queues, shared memory-Segmente und Semaphoren, welche dem Benutzer gehören

Wird rmuser ohne Argument aufgerufen, wird zuerst nach einem Benutzernamen gefragt. Man kann allerdings auch die Benutzernamen aller Benutzer, welche entfernt werden sollen, als Argumente an rmuser übergeben.

# rmuser testuser
Matching password entry:

testuser:*:1003:1004:staff:0:0:Test User:/home/testuser:/bin/tcsh

Is this the entry you wish to remove? y
Remove user's home directory (/home/testuser)? y
Removing user (testuser): mailspool home passwd.

rmuser fragt vor jeder Aktion nach, ob sie durchgeführt werden soll. Sollen alle Fragen mit Ja beantwortet werden kann die -y Option verwendet werden. Mehr Informationen findet man in der Manpage rmuser(8).

 Permalink

Modifizierungsdatum zweier Dateien vergleichen

Soll zum Beispiel in einem Shellskript festgestellt werden, welche von zwei Dateien als letzte verändert wurde, so kann man dazu newer(1) verwenden. newer findet man in den FreeBSD-Ports unter misc/newer:

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

An newer werden als Argumente die beiden Dateinamen übergeben. Ist das Modifizierungsdatum der zweiten Datei neuer als das der ersten, wird von newer der Rückgabewert 1 ausgegeben:

# touch datei1
# touch datei2
# newer datei1 datei2
# echo $?
1

Ist die erste Datei neuer, so wird als Rückgabewert 0 zurückgegeben:

# touch datei1
# newer datei1 datei2
# echo $?
0

Existiert die zweite Datei gar nicht, so wird eine 0 zurückgegeben:

# rm datei2 
# newer datei1 datei2
# echo $?
0

Existiert die erste Datei nicht, wird eine 1 zurückgegeben:

# mv datei1 datei2
# newer datei1 datei2
# echo $?
1
Comments (2)  Permalink

FreeBSD als RDP-Client benutzen

Hat man auf einem Windows-Rechner die Remotedesktop-Verbindung freigegeben und man möchte mit einem FreeBSD-Rechner auf diesen zugreifen, so kann man dazu rdesktop benutzen. rdesktop findet man in den FreeBSD Ports:

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

Nun kann eine Verbindung zum Windows-Recher aufgebaut werden:

# rdesktop -z -u <Benutzername> -f <IP-Adresse>

Mit der -z Option werden die RDP-Daten komprimiert und -f startet das Fenster im Vollbildmodus. Alle Optionen von rdesktop findet man in der Manpage rdesktop(1).

 Permalink
Prev Next41-50/84