BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Apache in einer Jail einsperren

Möchte man einen Apache Webserver in einer gesicherten Umgebung laufen lassen, so muss man nicht unbedingt eine vollständige Jail aufsetzen, nur um einen Apache darin laufen zu lassen, sondern kann mit Hilfe von mod_jail den Apache mittels des jail-Systemcalls einsperren. mod_jail kann über den Portbaum installiert werden:

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

Danach kann mod_jail in der httpd.conf aktiviert werden. Für einen Apache 2.0 fügt man folgende Zeilen in die /usr/local/etc/apache2/httpd.conf ein:

LoadModule jail_module        libexec/apache2/mod_jail.so

<IfModule mod_jail.c>
jail_rootdir "/usr/local/www"
jail_hostname "test.chruetertee.ch"
jail_address 192.168.1.12
jail_scrlevel 3
</IfModule>

Mit der Variable jail_scrlevel kann festgelegt werden, mit welchem Securelevel die Jail des eingesperrten Apaches laufen soll. Da nach dem Starten des Apaches mittels chroot nach jail_rootdir gewechselt wird, muss darunter das richtige Verzeichnis für die PID-Datei erstellt werden:

# mkdir /usr/local/www/var/run

Auch müssen die Pfadangaben in der httpd.conf an die chroot-Umgebung angepasst werden. Nun kann der Apache ganz normal gestartet werden:

# /usr/local/etc/rc.d/apache2.sh start

Mit jls(8) kann nun die Jail mit dem eingesperrten Apache angezeigt werden:

# jls
JID IP Address Hostname Path
2 192.168.1.12 test.chruetertee.ch /usr/local/www

Zum Stoppen des Apaches kann nun die Jail mit Hilfe von killall beendet werden:

# killall -j 2

Mehr Informationen zu mod_jail findet man auf der Webseite: http://igorpopov.newmail.ru/mod_jail/

Comments (2)  Permalink

Datei vollständig löschen

Möchte man auf FreeBSD und OpenBSD eine Datei vollständig löschen, so dass sie nicht wieder herstellbar ist, kann die -P Option von rm verwendet werden. Diese überschreibt die Datei zuerst mit 0x00, dann mit 0xff und danach wieder mit 0x00, bevor die Datei gelöscht wird.

Allerdings dauert das Löschen mit der -P Option einiges länger als das Löschen ohne:

# ls -l testdatei
-rw-r--r-- 1 beat users 1073741824 31 Jul 17:12 testdatei
# /usr/bin/time -h rm testdatei
0,15s real 0,00s user 0,15s sys

# ls -l testdatei2
-rw-r--r-- 1 beat users 1073741824 31 Jul 17:13 testdatei2
# /usr/bin/time -h rm -P testdatei2
1m27,78s real 0,03s user 4,07s sys

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

 Permalink

CD-RW löschen

Auf FreeBSD kann burncd nicht nur zum Brennen von iso-Images, sondern unter anderem auch zum Löschen von CD-RWs verwendet werden. Folgender Befehl führt eine Schnelllöschung durch:

# burncd -f /dev/<Brenner> blank

Soll eine vollständige Löschung durchgeführt werden, kann folgender Befehl verwendet werden:

# burncd -f /dev/<Brenner> erase

Dies ist allerdings viel zeitaufwendiger als die Schnelllöschung.

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

 Permalink

Beschreibung von sysctl Variablen anzeigen

Mittels der sysctl Variablen, kann das Verhalten von FreeBSD beeinflusst werden. Der aktuell gesetzte Wert einer Kernelvariablen kann mittels sysctl ausgelesen werden:

# sysctl net.inet.tcp.blackhole
net.inet.tcp.blackhole: 0

Oft sagen die Variablennamen jedoch nicht immer genau aus, für was die Variable zuständig ist, deshalb kann man sich mit der -d Option eine kurze Beschreibung der Variable anzeigen lassen:

# sysctl -d net.inet.tcp.blackhole
net.inet.tcp.blackhole: Do not send RST when dropping refused connections
# sysctl -d vfs.usermount
vfs.usermount: Unprivileged users may mount and unmount file systems

Mehr Informationen zu sysctl findet man in den Manpages sysctl(8) und sysctl.conf(5).

 Permalink

Vorhandene Datei beim Verschieben nicht überschreiben

Verschiebt man auf FreeBSD und OpenBSD eine Datei in ein Verzeichnis, in dem schon eine gleichnamige Datei existiert, so wird diese standardmässig überschrieben:

# mkdir ordner
# echo inhalt1 > ordner/testdatei
# echo inhalt2 > testdatei2
# mv testdatei2 ordner/testdatei
# cat ordner/testdatei
inhalt2

Sollen gleichnamige Dateien beim Verschieben standardmässig nicht überschrieben werden, kann auf FreeBSD die -n Option verwenden:

# echo inhalt1 > ordner/testdatei
# echo inhalt2 > testdatei2
# mv -n testdatei2 ordner/testdatei
# cat ordner/testdatei
inhalt1
# cat testdatei2
inhalt2

Möchte man je nach Fall entscheiden, so kann auf FreeBSD und OpenBSD die -i Option verwendet werden. Wird nun eine gleichnamige Datei erkannt, so fragt mv zuerst nach, ob die Datei überschrieben werden soll.

# echo inhalt1 > ordner/testdatei
# echo inhalt2 > testdatei2
# mv -i testdatei2 ordner/testdatei
overwrite ordner/testdatei? (y/n [n]) n
not overwritten

Mehr Informationen findet man in der Manpage mv(1).

 Permalink

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
1-7/7