BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Festlegen welcher Kernel als nächster gestartet werden soll

Besitzt man ein FreeBSD-System auf welches man keinen direkten oder seriellen Zugriff hat, und möchte beim nächsten Systemstart, aus welchem Grund auch immer, einen anderen Kernel starten, kann man dies mit reboot(8) festlegen. Folgender Befehl fährt das System umgehend herunter und startet mit dem kernel.old-Kernel neu:

# reboot -k kernel.old

Wird das System danach nochmals neu gestartet, so wird wieder der Standard-Kernel geladen.

Möchten man das System neu starten, jedoch keinen anderen Kernel verwenden, so sollte man auf reboot verzichten, da keine Warnung an die Benutzer gesendet und die rc.d-shutdown-Skripte nicht abgearbeitet werden. Stattdessen sollte man zum Herunterfahren oder Neustarten des Systemes shutdown(8) verwenden. Mit shutdown kann der Kernel, der als nächstes gestartet werden soll, nicht festgelegt werden.

 Permalink

Welcher Apache-Prozess beantwortet welche Anfrage

Möchte man herausfinden, welcher Apache2-Prozess welche HTTP-Anfrage beantwortet, so findet man dies in der FreeBSD Ports www/mod_proctitle.

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

Danach muss das Apachemodul in der /usr/local/etc/apache2/httpd.conf mit folgendem Eintrag aktiviert werden:

LoadModule proctitle_module libexec/apache2/mod_proctitle.so

Nun muss die Apache-Konfiguration neu geladen werden, so dass das mod_proctitle-Modul aktiviert wird:

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

Nun kann mit ps(1) herausgefunden werden, welche Anfrage ein Prozess als letztes abgearbeitet hat:

# ps wwaux -U www
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
www 45042 0,0 0,9 40464 17924 ?? SJ 8:54am 0:02,49 www.chruetertee.ch::/blog/archive/2006/12/29/portsopt-version-1-0-erschienen.html (httpd)
www 45078 0,0 0,8 40104 17568 ?? SJ 8:54am 0:02,32 www.chruetertee.ch::/index.php (httpd)
www 45176 0,0 0,8 40104 17568 ?? SJ 8:54am 0:02,52 www.chruetertee.ch::/index.php (httpd)
www 45240 0,0 0,8 39200 16664 ?? SJ 8:54am 0:02,73 www.chruetertee.ch::/favicon.ico (httpd)
www 45270 0,0 0,9 40344 17840 ?? SJ 8:54am 0:02,70 www.chruetertee.ch::/index.php (httpd)
www 49577 0,0 0,8 40092 17544 ?? SJ 8:55am 0:02,43 www.chruetertee.ch::/index.php (httpd)
www 57113 0,0 0,8 39456 16880 ?? SJ 9:00am 0:02,36 www.chruetertee.ch::/inc/bx/php/ResizeImageDynamic.php (httpd)
www 61015 0,0 0,5 32816 9612 ?? SJ 9:07am 0:00,00 /usr/local/sbin/httpd -DSSL

Verbraucht nun ein Apacheprozess übermässig Systemressourcen, kann so herausgefunden werden, welche Anfrage dies verursacht hat.

Comments (4)  Permalink

Ausgabe eines Programmes verzweigen

Möchte man die Ausgabe eines Programmes auf der Standardausgabe anzeigen und gleichzeitig in eine Datei schrieben, so kann man tee(1) einsetzen. Folgender Befehl führt ein make install clean aus, schickt die Ausgabe auf die Standardausgabe und schreibt diese gleichzeitig nach /tmp/make:

# make install clean | tee /tmp/make

Existiert die Datei, in welche man die Ausgabe schreibt, schon, so wird der Inhalt dieser überschrieben. Möchte man die Ausgabe an die Datei anhängen, so dass existierender Inhalt nicht überschrieben wird, verwendet man die -a Option von tee. Sowohl auf FreeBSD als auch auf OpenBSD befindet sich tee im Basissystem.

Comments (1)  Permalink

SVN-Server mit Trac auf FreeBSD installieren

Um einen Subversion-Server, auf welchen man per WebDAV zugreift, und dazu ein Trac auf FreeBSD zu installieren, können das Trac und Subversion aus den Ports installiert werden:

# cd /usr/ports/devel/subversion
# make -DWITH_MOD_DAV_SVN install clean
# cd /usr/ports/www/trac
# make install clean

Nun kann ein Verzeichnis erstellt werden, in dem alle SVN-Repositories gespeichert werden sollen:

# mkdir -p /var/db/svn/repos

Danach kann ein Repository erstellt werden:

# svnadmin create /var/db/svn/repos/<Projektname>

Ist das Repository erstellt, kann eine gewünschte initiale Verzeichnisstruktur dem Repository hinzugefügt werden:

# svn import <Pfad zu initialer Verzeichnisstruktur> file:///var/db/svn/repos/<Projektname> -m "Initial Import"

Nun kann ein Verzeichnis erstellt werden, in dem die Zugriffsberechtigungen für den SVN-Server abgelegt werden:

# mkdir -p /var/db/svn/access

Anschliessend kann eine Passwortdatei mit dem SVN-Benutzer erstellt werden:

# htpasswd -c /var/db/svn/access/users <Benutzer1>

Weitere Benutzer können wie folgt hinzugefügt werden:

# htpasswd  /var/db/svn/access/users <Benutzer2>

Nun kann eine Datei angelegt werden, in der die Lese- und Schreibrechte geregelt werden. Folgende Datei gewährt allen Leserechte und Benutzer1 und Benutzer2 Lese- und Schreibrechte:

# vi /var/db/svn/access/control
[/]
* = r
<Benutzer1> = rw
<Benutzer2> = rw

Die Rechte auf die Benutzerdateien werden nun noch eingeschränkt:

# chmod 600 /var/db/svn/access/*
# chown -R www:www /var/db/svn

Damit über den Apache auf den SVN-Server zugegriffen werden kann, muss der Apache-Server in der rc.conf aktiviert werden:

# echo 'apache2_enable="YES"' >> /etc/rc.conf
# echo 'apache2ssl_enable="YES"' >> /etc/rc.conf

Damit auch über SSL auf den SVN-Server zugegriffen werden kann, muss ein Zertifikat für den Apache erstellt werden.

Nun können die SVN-Einstellungen in der httpd.conf gemacht werden:

# vi /usr/local/etc/apache2/httpd.conf
# SVN WebDAV Repository Setup
<Location /svn>
DAV svn
SVNParentPath /var/db/svn/repos
SVNIndexXSLT "http://<Domain>/svnindex.xsl"

# anonymous first
Satisfy Any
Require valid-user

# authenticating them valid ones
AuthType Basic
AuthName "Subversion Repositories"
AuthUserFile /var/db/svn/access/users
AuthzSVNAccessFile /var/db/svn/access/control
</Location>

<Directory "/usr/local/share/subversion/xslt/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Alias /svnindex.xsl "/usr/local/share/subversion/xslt/svnindex.xsl"
Alias /svnindex.css "/usr/local/share/subversion/xslt/svnindex.css"

Nun kann ein Verzeichnis erstellt werden, in dem alle Trac-Instanzen gespeichert werden:

# mkdir -p /var/db/trac

Danach kann ein Trac initialisiert werden:

# trac-admin /var/db/trac/<Projektname> initenv

Dabei müssen verschiedene Fragen beantwortet werden:

Project Name [My Project]> <Projektname>
Database connection string [sqlite:db/trac.db]>[Enter]
Repository type [svn]>[Enter]
Path to repository [/path/to/repos]> /var/db/svn/repos/<Projektname>
Templates directory [/usr/local/share/trac/templates]>[Enter]

Danach kann auch das Trac in der httpd.conf konfiguriert werden:

# vi /usr/local/etc/apache2/httpd.conf
ScriptAlias /cgi-bin/ "/usr/local/share/trac/cgi-bin/"
<Directory "/usr/local/share/trac/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

ScriptAlias /<Projektname> /usr/local/share/trac/cgi-bin/trac.cgi
<Location /<Projektname> >
SetEnv TRAC_ENV "/var/db/trac/<Projektname>"
</Location>

<Location "/<Projektname>/login">
AuthType Basic
AuthName "Guete Morge"
AuthUserFile /var/db/svn/access/users
Require user <Benutzer1> <Benutzer2>
</Location>

Die Rechte für das Trac müssen noch angepasst werden:

# chown -R www:www /var/db/trac

Zu guter Letzt muss der Apache gestartet werden:

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

Der SVN-Server ist nun unter https://<Domain>/svn/<Projektname>/, das Trac unter https://<Domain>/<Projektname>/ erreichbar.

Eine ausführliche Anleitung zu SVN unter FreeBSD findet man unter: http://www.bsdguides.org/guides/freebsd/misc/subversion.php

Vielen Dank an Alain für seine Tipps zur Konfiguration.

Comments (6)  Permalink

System per Skript automatisch härten

Besitzt man viele Mehrbenutzersysteme, die man immer auf die gleiche Weise härten möchte, empfiehlt es sich einen Blick auf lockdown zu werfen. lockdown findet man im Portsbaum unter security/lockdown.

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

Nun wird ein Shellskript unter /usr/local/bin/lockdown installiert. Dieses kann nun den eigenen Wünschen angepasst werden. Dazu erstellt man eine Kopie des Skriptes:

# cp /usr/local/bin/lockdown /usr/local/bin/lockdown.custom
lockdown passt folgende Dateien den eigenen Wünschen an:
  • /etc/ssh/sshd_config
  • /etc/rc.conf
  • /etc/auth.conf
  • /etc/sysctl.conf
  • Kernelkonfiguration

Ausserdem werden die Rechte von Programmen angepasst oder ganz entfernt, so dass normale Benutzer diese Programme nicht mehr benutzen können.

Zuerst muss die kern-Variable gesetzte werden, so dass sie auf die verwendete Kernelkonfiguration zeigt:

kern="/usr/local/bin/editkernel /usr/src/sys/i386/conf/<Kernelname>"

In der Section Mounting options werden die Optionen von Mountpunkten angepasst. In Build a debug kernel können Kerneloptionen der aktuellen Kernelkonfiguration hinzugefügt werden. Der Kernel muss danach allerdings manuell neu gebaut werden. Danach werden die verschiedenen Konfigurationsdateien der Maschine angepasst. Im letzten Abschnitt werden dann die Rechte von verschiedenen Programmen angepasst.

Hat man das Skript einmal seinen Wünschen angepasst, kann es ausgeführt werden:

# lockdown

Möchte man nun das Skript auf einem anderen Server ausführen, kann man einfach lockdown aus den Ports installieren, das selber angepasste Skript auf diesen Server kopieren und ausführen. So können mehrere Systeme innert kürzester Zeit identisch abgesichert werden.

 Permalink

Meldungen an syslog schicken

Mit logger(1) lassen sich Meldungen an syslog schicken. Dies kann vor allem bei Skripten, die unbeaufsichtigt laufen, wie cron-Jobs, von Vorteil sein. Eine solche Meldung lässt sich wie folgt erzeugen:

# logger -p <Facility>.<Priorität> -t <Bezeichnung> <Meldung>

Die Facility und Priorität welche von syslog aufgezeichnet werden, findet man in der /etc/syslog.conf heraus. Als Bezeichnung kann ein Wort genommen werden, mit dem alle Einträge gekennzeichnet werden, zum Beispiel den Skriptnamen.

Führt man folgenden Befehl aus:

# logger -p user.notice -t test "Das ist ein Test"

So findet man in der /var/log/message folgende Zeile:

Apr 14 08:21:17 daedalus test: Das ist ein Test

Die Meldung kann mit der -f Option auch aus einer Datei ausgelesen werden. Wird logger mit der -s Option aufgerufen, so wird die Meldung zusätzlich auch noch auf der Standardausgabe angezeigt. logger findet man sowohl auf FreeBSD als auch auf OpenBSD in Basissystem. Mehr Informationen findet man in der Manpage logger(1).

 Permalink

Neue Einträge einer Logdatei anzeigen

Mit tail(1) lassen sich die letzten 10 Zeilen einer Datei anzeigen. Benutzt man tail mit der Option -f, so werden zwar auch die letzten 10 Zeilen angezeigt, jedoch wird die Datei nicht geschlossen.

# tail -f <Logdatei>

Werden nun in diese Datei neue Einträge geschrieben, so werden diese von tail -f automatisch angezeigt. tail ist sowohl auf FreeBSD als auch auf OpenBSD im Basissystem vorhanden. tail auf FreeBSD besitzt allerdings noch eine Besonderheit. Benutzt man tail mit der -F Option, so werden wie bei -f fortlaufend die neuen Einträge angezeigt. Wird jetzt aber die Logdatei, die man betrachtet, rotiert, das heisst die Datei wird weggesichert und eine neue leere Datei an derselben Stelle erstellt, so würde tail -f immer noch von der alten Datei lesen, in die allerdings keine Einträge mehr geschrieben werden. tail -F dagegen erkennt, dass die Datei rotiert wurde und liest automatisch von der neuen Datei weiter. tail -f wird durch Ctrl + c beendet.

 Permalink
1-7/7