Einzelne Dateien per .htaccess von Auth ausschließen

Du hast einen Webserver auf dem du ein spezielles Verzeichniss wie /administrator/ mit einer .htaccess schützt die etwa so aussehen könnte:

AuthName private
AuthType Basic
AuthUserFile /etc/apache/htpasswd.users
require valid-user

Das an sich ist bisher noch nichts ungewöhliches.

Aber jetzt möchtest du eine einzelne Datei von der Benutzerauthentifizierung ausschließen, weil diese für Jedermann erreichbar sein soll? Um das zu erreichen, muss lediglich folgendes noch in der .htaccess ergänzt werden:

<Files notify.php>
order allow,deny
allow from all
satisfy any
</Files>

Der wichtige Teil hierbei ist allerdings nicht das “allow from all”, sondern das “satisfy any”. Der Standartwert ist “satisfy all”, was bedeutet, dass sowohl die “allow/deny”-Direktiven für die Host basierte authentifizierung als auch die “require”-Direktiven für die Benutzerauthentifitzierung passen müssen. Mit “satisfy any” reicht es, wenn eine der beiden Direktiven erfüllt wird, um Zugriff zu bekommen. Und die Kombination aus “allow from all” und “satisfy any” gibt dann immer Zugriff, da “allow from all” alleine immer Zugriff gewährt.

Mehr über die satisfy-Direktive kann man in der aktuellen Apache Dokumentation unter http://httpd.apache.org/docs/current/mod/core.html#satisfy erfahren

(English) multipathing on IBM BladeCenter with IBM DS3200

I recently had to install Ubuntu (10.04 LTS to be precise) on a HS21 Blade installed in an IBM BladeCenter E and attached to an IBM DS3200 Storage using SAS. The storage was attached to the server using 2 SAS-Connections, so using multipath to protect against hardware failure was an good thing to implement. But unfortunately using multipathing on Linux is not quite straight forward and the list of easy-to-follow howtos is sparse (a good example i mostly used is found here). Another problem was, that the system has no local storage and so had to boot from the SAN aswell. So here is how i created my configuration and made the System boot and work.

Continue reading (English) multipathing on IBM BladeCenter with IBM DS3200

htop

Als “moderne” alternative für das doch oft benutze top wurde ich jetzt auf htop aufmerksam gemacht:

htop ist ein ncurses-basiertes Terminalprogramm, dass genau wie top laufende Programme anzeigt. Aber wo top aufhöhrt geht htop noch viel weiter:Screenshot of htop

  • killen, renicen von mehreren Prozessen per Tastendruck ohne auch nur an PIDs denken zu müssen
  • horizontales und vertikales scrollen
  • Maussupport
  • anzeige der Prozesse als Baum (finde ich persönlich sehr nützlich)
  • verstecken von Kernelprozessen
  • und ausserdem ist es noch schön bunt ;)

Links gibt es natürlich den obligatorischen Screenshot. Alles in allem ist htop wohl eine echte alternative zu dem guten alten top und definitiv einen Blick wert, zumal die installation einfach nur ein “sudo apt-get install htop” ist.

tcpdump mit rotierenden capture-files

Manchmal kommt es vor, das man vor einem schwer zu debuggenden Problem steht und deswegen tcpdump nutzt um die dumps nachher mit Wireshark zu analysieren. Wenn tcpdump allerdings länger läuft, werden die Dumps meist mehrere 100 MiB gross, so dass diese sich nicht mehr allzu schnell bearbeiten lassen.

Abhilfe schafft tcpdump selbst – es kann die Datei selbständig rotieren, so dass die Dateigröße klein gehalten werden kann. Hier ein Beispiel, um ein Log jede Stunde rotieren zu lassen

tcpdump -pni eth0 -s65535 -G 3600 -w 'trace_%Y-%m-%d_%H:%M:%S.pcap'

-G ist dabei die Zeit in sekunden zwischen den rotationen. -w akzeptiert dann strftime-Platzhalter – bei dem Beispiel würde die Datei z.B. trace_2010-08-30_13:04:55.pcap heißen können. Alle Platzhalter sind in strftime(3) dokumentiert.

Als alternative zum rotieren “nach x Sekunden”, bietet tcpdump mit der Option -C auch die Möglichkeit das Capturefile zu rotieren, wenn eine gewisse Dateigröße erreicht wurde. Um die Dateigröße auf 100MB zu beschränken, kann man folgenden Befehl verwenden

tcpdump -pni eth0 -s65535 -C 100 -w capture

Zusammen mit -C werden bei -w allerdings keine strftime-Platzhalter mehr ausgewertet. Die Dateinamen sind einfach der Reihenfolge nach capture, capture1, capture2, …, capture<n>.

Google Gravity

Alles, was nicht fixiert ist, fällt runter, dank der Gravitation. Aber wieso ist das bei Webseiten eigentlich anders?

Ein Experiment zeigt, was mit Google passiert, wenn die Gravitation wirk: Google Gravity.

Interressant ist, dass alle Elemente auf der Webseite weiterhin bedienbar sind – versucht einfach etwas zu suchen :)

Update: funktioniert nicht vernünftig mit Firefox und mit IE gar nicht – ist halt ein Chrome-Experiment.

snmpd syslog spam

Auf Debian-basierten Systemen wird in der standartmäßigen Konfiguration jede Nachricht des snmpd nach syslog in die /var/log/daemon.log geloggt. An sich ist das eine gute Sache, allerdings wird dadurch auch jede Verbindung geloggt, was doch etwas unangenehm werden kann. Gerade bei snmpwalks oder auch snmp-basierten checks von Nagios häufen sich die Logmeldungen.

Jul 11 16:24:56 www1 snmpd[2120]: Connection from UDP: [10.50.0.1]:56686->[10.50.0.11]
Jul 11 16:25:27 www1 snmpd[2120]: last message repeated 965 times

Abhilfe gibt es in der Form, das man dem snmpd sagt, dass er erst ab einem bestimmten Level loggen soll. Bei Debian/Ubuntu findet man die Einstellungen in der Datei /etc/default/snmpd. Die Standarteinstellung für die Optionen für den snmpd sehen dabei momentan so aus:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'

Für uns interessant ist im Grunde nur der Parameter “-Lsd”. Dieser besagt, das alles Logging (L) über Syslog (s) Laufen soll, und zwar in die Daemon (d) Facility. “-Lf /dev/null” deaktiviert dazu noch das logging direkt in eine Datei. Um das Logging jetzt auf bestimmte Prioritäten zu beschränken, ändert man das “-Ls” in “-LS”. Der Parameter erwartet vor der Facility jetzt noch eine Priorität, entweder ab welchem Level geloggt werden soll, oder eine von-bis Angabe. Um alles ab Warnungen zu loggen, ändert man den Paramter auf -LS4d. Die komplette Zeile könnte nun so aussehen:

SNMPDOPTS='-LS4d -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'

Nach einem neustarten des snmpd werden nun die Verbindungen nicht mehr geloggt. Ich merke dabei zur Sicherheit nochmal an, dass ein snmpd niemals “einfach so” übers Internet erreichbar sein sollte, da bis snmp v2 alles einfach nur Klar-Text ist.

Die komplette Dokumentation findet man unter Ubuntu in der manpage snmpcmd(1) unter “LOGGING OPTIONS”.

VirtualBox bekommt Multi-Monitor Support

Mit VirtualBox aus der aktullen 3.2er Serie ist ein sehr interessantes Feature dazu gekommen: Multi Monitor Support.

Das bedeutet, dass VirtualBox einem Gast bis zu 8 virtuelle Bildschirme zur Verfügung stellen kann. Diese werden dann als separate Fenster in dem Host angzeigt. Praktisch ist das vor allem in den Fullscreen und Seamless Modi. Hier “mappt” VirtualBox einen virtellen Monitor auf einen physikalischen. Dadurch hat man dann zum Beispiel einen virtuellen Windows Desktop auch auf beiden Bildschirmen des Linux Hosts.

Die Konfiguration davon ist VirtualBox-typisch gehalten: Bei den Settings einer VM gibt es in der Kategorie “Display” einen neuen Slider “Monitor Count”. Hier einfach die gewünschte Anzahl der virtuellen Bildschirme setzen – idealerweise die Anzahl der Monitore, die man auch angeschlossen hat.

Das Mapping der virtuellen an die physikalischen Monitore kann man an der VM direkt im laufenden Betrieb vornehmen. Entweder über das Menü, oder über die Host-Taste (standartmäßig: rechte STRG) + Pos 1. Dort über das “View”-Menü kann man dann die Mappings an die eigenen Vorstellungen anpassen.

VirtualBox Multi Monitor

PHP-Sessions in memcached speichern

Sessions in PHP sind schon eine feine Sache, allerdings kann es problematisch werden, wenn man vor einer Anwendung einen Load-Balancer hat. Dann muss man entweder seine eigenen Session-Handler mittels session_set_save_handler schreiben, was allerdings einige Zeit verschlingen kann, oder auf bereits vorgefertigte Handler ausweichen.

Memcached hat sich auf der anderen Seite hat sich zum cachen von Daten schon mehrfach beweisen und es bietet sich für das Speichern von Sessions direkt an – und das beste ist, dass es dafür schon direkt einen Session-Handler in der PHP-Extension memcached gibt und die Installation davon bei Debian/Ubuntu schon fast trivial ist.

Einen Nachteil hat das ganze allerdings: Man sollte den memcached-Server nicht “mal eben” neu starten, weil dann alle darin gespeicherten Sessions verloren gehen. Um das zu verhindern, muss man allerdings eine Lösung einsetzten die einen persistenten Speicher verwenden, wie z.B. memcachedb oder membase.

Auf dem Server, der die Sessions mittels memcached speichern soll, muss erstmal memcached installiert werden

apt-get install memcached

Auf dem Client (auf dem die PHP-Scripte liegen) jetzt noch die memcached-extension für php installieren

apt-get install php5-memcached

Jetzt muss in der php.ini nur noch eingestellt werden, dass der “memcached”-Handler für php-Sessions verwendet werden soll und welche Adresse der memcached Server hat. Dazu einfach die /etc/php/apache2/php.ini bearbeiten.

[Session]
session.save_handler = memcached
session.save_path = "10.50.0.2:11211"

Sessions werden jetzt unter der IP-Adresse gespeichert, die bei session.save_path angegeben ist. Anstatt einer einzelen IP kann man auch eine Komma-separierte Liste mit IPs angeben, die als Pool verwendet werden, z.B. “10.50.0.2:11211,10.50.0.3:11211″. Die beiden memcached-Server können auch auf der gleichen IP auf unterschiedlichen Ports liegen, allerdings verliert man dadurch den Vorteil, dass einer der Server wegbrechen kann.

Jetzt nur noch den apache neu laden, dass die Einstellungen auch angewendet werden.

apache2ctl graceful

Fertig – ab jetzt werden die Sessions direkt in memcached gespeichert.

CentOS für ALIX-Boards

Joe hat mir einen netten Kommentar hinterlassen, wie man ALIX-Boards und Gehäuse kommt, wenn man in den USA lebt.

Die Gehäuse bekommt man im Shop von Netgate.

Zusätzlich hat er auch noch ein CentOS-Image für ALIX-Boards erstellt, welches passend ist, wenn man mehr machen möchte als nur das Vyatta-übliche Routing und Firewall. Für eine Anleitung und den Download-Link, besucht einfach sein blog (englisch).

Ubuntu 10.04

Alle 2 Jahre wieder – jetzt gibt es das langerwartete, neue Long Term Support-Release von Ubuntu. 10.04 wurde gestern offiziell veröffentlich und ist zum download verfügbar.

Das LTS-Release bietet, im Gegensatz zu den normalen releases, 5 Jahre Updates an. Das ist gerade bei Servern interessant,  bei denen weniger release-updates weniger Kopfschmerzen und weniger Arbeit für den Admin bedeuten. Normalerweise werden solche langen Supportperioden nur bei kostenpflichtigen “Enterprise”-Versionen angeboten, aber bei Ubuntu bekommt man die kostenlos.

Mein System hier werde ich die nächsten Tage dann wohl auch updaten :)