Zeit in OpenBSD auf einem Multiboot-System
Benutzt man OpenBSD auf einem Multiboot-System und die Hardware Uhr ist nicht auf UTC eingestellt, kann es sein, dass die Zeit falsch dargestellt wird, obwohl die Zeitzone richtig eingestellt ist. Um dies zu ändern, kann dem OpenBSD Kernel der Zeitunterschied der Hardware Uhr zu UTC mitgeteilt werden:
# date
Tue Oct 30 21:49:21 CET 2007
# config -ef /bsd
OpenBSD 4.2 (GENERIC) #375: Tue Aug 28 10:38:44 MDT 2007
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> timezone -60
timezone = -60, dst = 0
ukc> quit
Saving modified kernel.
Nach einem Neustart des Systems stimmt nun auch die Uhrzeit:
# date
Tue Oct 30 20:51:36 CET 2007
Mehr Informationen zu den Möglichkeiten von config findet man in der Manpage config(8).
Mehrere Apache-Instanzen starten
Hat man einen Apache 2 über die Ports installiert, können einfach mehrere Apache-Instanzen mit unterschiedlicher Konfiguration gestartet werden. Zuerst muss überprüft werden, ob schon ein Apache installiert ist:
# pkg_info -E apache\*
apache-2.0.61_2
Ist noch kein Apache installiert, kann dieser über die Ports installiert werden:
# cd /usr/ports/www/apache20 && make install clean
Nun können die gewünschten Instanzen in der /etc/rc.conf konfiguriert werden. In folgendem Beispiel werden zwei Instanzen konfiguriert. Eine "frontend"-Instanz welche auch SSL Verbindungen terminiert und eine "backend"-Instanz:
apache2_profiles="frontend backend"
apache2_frontend_enable="YES"
apache2ssl_frontend_enable="YES"
apache2_frontend_configfile="/usr/local/etc/apache2/httpd-frontend.conf"
apache2_backend_enable="YES"
apache2_backend_configfile="/usr/local/etc/apache2/httpd-backend.conf"
Nun müssen die jeweiligen Apache Konfigurationsdateien für die verschieden Instanzen erstellt werden. Dabei können auch unterschiedliche Apache Module geladen werden. Die Instanzen müssen an unterschiedliche IP-Adressen oder Ports gebunden werden:
# grep Listen httpd-frontend.conf ssl-frontend.conf httpd-backend.conf
httpd-frontend.conf:Listen 217.150.245.57:80
ssl-frontend.conf:Listen 217.150.245.57:443
httpd-backend.conf:Listen 192.168.1.38:80
Sind die Instanzen konfiguriert, können diese gestartet werden:
# /usr/local/etc/rc.d/apache2 start
===> apache2 profile: frontend
Performing sanity check on apache2 configuration:
Syntax OK
Starting apache2.
===> apache2 profile: backend
Performing sanity check on apache2 configuration:
Syntax OK
Starting apache2.
Nun kann überprüft werden, ob die Instanzen auch gestartet worden sind:
# netstat -tan | grep LISTEN
tcp4 0 0 192.168.1.38.80 *.* LISTEN
tcp4 0 0 217.150.245.57.443 *.* LISTEN
tcp4 0 0 217.150.245.57.80 *.* LISTEN
# ps ax | grep httpd
23597 ?? Ss 0:00,26 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23606 ?? Ss 0:00,05 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
23607 ?? I 0:00,00 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23608 ?? I 0:00,00 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23609 ?? I 0:00,00 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23610 ?? I 0:00,00 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23611 ?? I 0:00,00 /usr/local/sbin/httpd -DSSL -f /usr/local/etc/apache2/httpd-frontend.conf -c PidFile /var/run/httpd.frontend.pid
23612 ?? I 0:00,00 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
23613 ?? I 0:00,00 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
23614 ?? I 0:00,00 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
23615 ?? I 0:00,00 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
23616 ?? I 0:00,00 /usr/local/sbin/httpd -f /usr/local/etc/apache2/httpd-backend.conf -c PidFile /var/run/httpd.backend.pid
In der /etc/rc.conf können noch weitere Variablen für den Apache konfiguriert werden, diese findet man in der Datei /usr/local/etc/rc.d/apache2.
Herausfinden wieso ein Programm mit rc.d Skript nicht startet
Möchte man unter FreeBSD ein Programm mit dem rc.d Skript starten, dies schlägt aber fehl, so kann man in der /etc/rc.conf mit folgendem Eintrag zusätzliche Ausgaben aktivieren:
rc_debug="YES"
Im folgenden Beispiel ist die rc_debug Variable nicht gesetzt und der Apache wird auch nicht gestartet:
# /usr/local/etc/rc.d/apache2 start
#
Setzt man nun die rc_debug Variable, werden zusätzliche Informationen angezeigt:
# echo 'rc_debug="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/apache2 start
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2ssl_enable is set to NO.
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2_enable is set to NO.
Gemäss der Ausgabe ist die enable Variable nicht gesetzt. Überprüft man das nun, sieht man, dass sich ein Schreibfehler eingeschlichen hat:
# grep apache /etc/rc.conf
apache_enable="YES"
Ist der Fehler korrigiert, startet nun auch der Apache wie gewünscht:
# /usr/local/etc/rc.d/apache2 startMehr Informationen zu den rc.conf Variablen findet man in der Manpage rc.conf(5).
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2ssl_enable is set to NO.
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2_enable is set to YES.
/usr/local/etc/rc.d/apache2: DEBUG: pid file (/var/run/httpd.pid): not readable.
/usr/local/etc/rc.d/apache2: DEBUG: run_rc_command: evaluating apache2_precmd().
Performing sanity check on apache2 configuration:
Syntax OK
/usr/local/etc/rc.d/apache2: DEBUG: checkyesno: apache2limits_enable is set to NO.
Starting apache2.
/usr/local/etc/rc.d/apache2: DEBUG: run_rc_command: _doit: /usr/local/sbin/httpd
Mehrere SSH Verbindungen mit einer Authentifizierung
Möchte man mehrere SSH Verbindung zu einem Rechner aufbauen, aber nur einmal das Benutzerpasswort oder das Zertifikatspasswort eingeben, kann man ControlMaster von OpenSSH verwenden. Einfach folgende Zeilen in die ~/.ssh/config Datei einfügen:
Host *
ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p
Nun wird beim ersten Verbindungsaufbau zum Rechner das Passwort abgefragt und ein Socket unter ~/.ssh/ erstellt. Baut man nun weitere Verbindungen zum selben Rechner auf, wird man automatisch ohne Passwortabfrage eingeloggt. Sobald die erste Verbindung beendet wird, wird auch der Socket entfernt und man muss sich wieder ganz normal mit Passwort auf dem Rechner anmelden.
Mehr Informationen zu ControlMaster von OpenSSH findet man in der Manpage ssh_config(5).
Datei mit OpenSSL ver- und entschlüsseln
Möchte man eine Datei verschlüsseln, jedoch nicht mit privaten und öffentlichen Schlüsseln sondern mit einem Passwort arbeiten, so kann man OpenSSL dazu nehmen. Mit folgendem Befehl wird die Datei "datei" mit dem Blowfish-Algorithmus verschlüsselt und als datei.enc gespeichert:
# openssl enc -blowfish -salt -in datei -out datei.enc
enter bf-cbc encryption password: <Passwort>
Verifying - enter bf-cbc encryption password: <Passwort>
Nun kann die ursprüngliche Datei gelöscht werden:
# rm -P datei
Soll nun die Datei wieder entschlüsselt und als Datei "datei" gespeichert werden, kann einfach folgender Befehl verwendet werden:
# openssl enc -d -blowfish -in datei.enc > datei
enter bf-cbc decryption password: <Passwort>
OpenSSL befindet sich natürlich auf FreeBSD und OpenBSD im Basissystem. Mehr Informationen zu OpenSSL findet man in der Manpage openssl(1) und in den darin unter SEE ALSO verwiesenen Manpages.
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).