<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Communardo Techblog &#187; Systemadministration</title>
	<atom:link href="http://www.communardo.de/techblog/category/sysadmin/feed" rel="self" type="application/rss+xml" />
	<link>http://www.communardo.de/techblog</link>
	<description>Entwicklerblog der Communardo Software GmbH</description>
	<pubDate>Fri, 21 Nov 2008 19:28:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Apache - No space left on device</title>
		<link>http://www.communardo.de/techblog/2008/01/22/apache-no-space-left-on-device/</link>
		<comments>http://www.communardo.de/techblog/2008/01/22/apache-no-space-left-on-device/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 21:49:14 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[ipcs]]></category>

		<category><![CDATA[semaphore]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/22/apache-no-space-left-on-device/</guid>
		<description><![CDATA[<p>Nachdem ein Apache keine Seiten mehr auslieferte und ein Neustart des Apaches immer mit der Fehlermeldung &#8220;no space left on device&#8221; abbrach, war guter Rat teuer. Ein<br />
<code>df -h</code><br />
zeigte auf allen Mountpoints gen&#252;gend Speicherplatz an. Nur ein Neustart half mir vor&#252;bergehend aus der Misere. Leider bot die betroffene Maschine noch andere essentielle Dienste an, sodass das keine dauerhafte L&#246;sung sein konnte. Eine Recherche ergab, dass der Apache unter Umst&#228;nden zu viele sogenannte Semaphoren-Arrays belegt. Bei einem erneuten Auftreten des Fehlers &#252;berpr&#252;fte ich das mit einem<br />
<code>ipcs -s | grep apache</code><br />
Apache steht hier f&#252;r den Benutzer, unter dem der Webserver betrieben wird. Damit best&#228;tigte sich die oben genannte These. Um die nicht mehr ben&#246;tigten Ressourcen zu l&#246;schen verwendete ich<br />
<code>ipcrm -s SemID</code><br />
oder eleganter in einer Schleife:<br />
<code>for i in `ipcs -s | grep apache | awk {'print $2'}`; do ipcrm -s $i; done</code><strong><br />
</strong>Danach stand einem Neustart des Apaches nichts mehr im Weg.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/22/apache-no-space-left-on-device/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#220;berwachung von PostgreSQL mit SNMP</title>
		<link>http://www.communardo.de/techblog/2008/01/17/uberwachung-von-postgresql-mit-snmp/</link>
		<comments>http://www.communardo.de/techblog/2008/01/17/uberwachung-von-postgresql-mit-snmp/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 21:59:31 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[pgsnmpd]]></category>

		<category><![CDATA[postgresql]]></category>

		<category><![CDATA[SNMP]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/17/uberwachung-von-postgresql-mit-snmp/</guid>
		<description><![CDATA[<p>Die meiste Software f&#252;r eine Netzwerk&#252;berwachung versteht SNMP. Was liegt also n&#228;her, dieses Protokoll auch f&#252;r &#220;berwachung von PostgreSQL zu nutzen. Leider bringt PostgreSQL von Hause aus keine Unterst&#252;tzung f&#252;r SNMP mit. Seit geraumer Zeit gibt es jedoch pgsnmpd. Nach dem Download von der <a href="http://pgfoundry.org/projects/pgsnmpd/">Homepage</a> und dem Auspacken in das contrib-Verzeichnis der ausgepackten und &#252;bersetzten Quellen von PostgreSQL erfolgt die Installation mit</p>
<p><code>gmake &amp;&amp; gmake install</code></p>
<p>Als n&#228;chstes werden auf allen Datenbanken, inklusive dem Template (so spart man sich das fehlertr&#228;chtige nachtr&#228;gliche Installieren), die Unterst&#252;tzungstabellen als PostgreSQL-Superuser installiert:</p>
<p><code>psql -d db -f /usr/share/postgresql/contrib/pgsnmpd.sql</code></p>
<p>Da auf meiner Maschine bereits ein SNMPd seinen Dienst tut, starte ich den pgsnmpd als Subagent. Dazu wird in der snmpd.conf der folgende Eintrag aktiviert:</p>
<p><code>master agentx</code></p>
<p>Startet danach der SNMP-Daemon nicht mehr, so mu&#223; in eventuell unter /var ein Verzeichnis agentx f&#252;r den Socket angelegt werden. Danach kann man den pgsnmpd als Subagent starten:</p>
<p><code>/usr/bin/pgsnmpd -b -s -C"user=postgres host=localhost"</code></p>
<p>Bei mir fehlten allerdings noch die (aktuelle) RDBMS-MIB, APPLICATION-MIB, SYSAPPL-MIB und die NETWORK-SERVICES-MIB. Diese kann man sich aber schnell aus dem Internet besorgen.<br />
Eine Verbindung zum RDBMS muss als PostgreSQL-Superuser erfolgen. Ist die Verbindung von Superuser auf localhost mit einem Passwort gesch&#252;tzt, wie sich das geh&#246;rt, hilft eine .pgpass mit dem Inhalt</p>
<p><code>hostname:port:database:username:password</code></p>
<p>im Homeverzeichnis weiter. Erh&#228;lt man dann vielleicht in den Logs noch ein:</p>
<p><code>registering pdu failed</code></p>
<p>sollte man in der Prozesstabelle schauen, ob der pgsnmpd bereits gestartet war. Zum Schlu&#223; binden wir den den pgsnmpd noch in die init-Skripte ein, um ein Hochfahren des Dienstes beim Reboot zu garantieren. Ich habe die /etc/init.d/local (Gentoo) daf&#252;r gew&#228;hlt.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/17/uberwachung-von-postgresql-mit-snmp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tunnel mit ssh - Teil 2 Aufbau des Tunnels</title>
		<link>http://www.communardo.de/techblog/2008/01/17/tunnel-mit-ssh-teil-2-aufbau-des-tunnels/</link>
		<comments>http://www.communardo.de/techblog/2008/01/17/tunnel-mit-ssh-teil-2-aufbau-des-tunnels/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 19:18:51 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[postgresql]]></category>

		<category><![CDATA[ssh]]></category>

		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/17/tunnel-mit-ssh-teil-2-aufbau-des-tunnels/</guid>
		<description><![CDATA[<p>Nachdem ich im ersten Teil beschrieben habe, wie man ssh ohne Passwort nutzt und den so geschaffenen Zugang trotzdem einschr&#228;nkt, komme ich zum interessanten Teil: dem eigentlichen Tunnelbau. Wir holen uns einen lokalen Zugang zu PostgreSQL auf einem entfernten Host &#252;ber ssh. Dazu geben wir folgenden Befehl ein:</p>
<p><code>ssh -f -L 2222:remotehost:5432 -c blowfish user@remotehost /usr/bin/sleep 1800</code></p>
<p>Mit der Option -f wird ssh in den Hintergrund vor der Ausf&#252;hrund des Kommandos  /usr/bin/sleep geschickt. Mit -L localport:remotehost:remotehostport wird ein Tunnel von dem PostgreSQL-Standardport 5432 auf remotehost zum Port 2222 auf localhost gebaut. Jetzt noch die Zugriffsrechte der Datenbank f&#252;r localhost auf dem remotehost aktualisiert und wir k&#246;nnen den ersten Test durchf&#252;hren:</p>
<p><code>psql -U benutzer -d db -h localhost -p 2222</code></p>
<p>Wird diese Verbindung dauerhaft ben&#246;tigt bietet es sich eine Automatisierung &#252;ber cron an. Dazu habe ich folgendes Skript erstellt:</p>
<p><code>#!/bin/sh<br />
PORT=`lsof -i | grep localhost:2222 | head -1 | cut -d" " -f1`<br />
SSH=`which ssh`<br />
if [ "${PORT}"x == "x" ]; then<br />
$SSH -f -L 2222:remotehost:5432 -c blowfish user@remothost /bin/sleep 1800<br />
fi</code></p>
<p>Diese pr&#252;ft ab, ob der definierte Port offen ist, und startet die Verbindung einfach neu, wenn dies nicht der Fall ist.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/17/tunnel-mit-ssh-teil-2-aufbau-des-tunnels/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rootkits unter Linux aufsp&#252;ren</title>
		<link>http://www.communardo.de/techblog/2008/01/17/rootkits-unter-linux-aufspuren/</link>
		<comments>http://www.communardo.de/techblog/2008/01/17/rootkits-unter-linux-aufspuren/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 19:15:56 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[chkrootkit]]></category>

		<category><![CDATA[rkhunter]]></category>

		<category><![CDATA[Rootkits]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/17/rootkits-unter-linux-aufspuren/</guid>
		<description><![CDATA[<p>Neben den &#8220;Klassikern&#8221;, den IDS&#8217; (Intrusion Detection Systems), ob nun Host-(AIDE) oder Netzwerkbasierend (SNORT), gibt es noch zwei weitere kleine Tools, die sogenannte Rootkits aufsp&#252;ren k&#246;nnen. Die Rede ist von rkhunter und chkrootkit. Die Installation unter Gentoo gestaltet sich unspektakul&#228;r:</p>
<p><code>emerge -av rkhunter chkrootkit</code></p>
<p>Die effektivste Art, diese Tools zu nutzen, ist es, diese &#252;ber cron ausf&#252;hren zu lassen. Dazu wird unter Gentoo der Parameter ENABLE unter /etc/cron.daily/rkhunter von NO auf YES gesetzt. Die Variable UPDATE ebenfall auf YES zu setzen ist sinnvoll.  Zum Aktivieren von chkrootkit wird in der /etc/cron.weekly/chkrootkit das Kommentarzeichen vor der einzelnen Kommandozeile entfernt.<br />
Auch wenn diese Tools sinnvoll im Kampf gegen Eindringlinge sind, einen 100%-igen Schutz k&#246;nnen sie nicht garantieren.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/17/rootkits-unter-linux-aufspuren/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CSR (Certificate Signing Request) f&#252;r Multidomainzertifikat erstellen</title>
		<link>http://www.communardo.de/techblog/2008/01/16/csr-certificate-signing-request-fur-multidomainzertifikat-erstellen/</link>
		<comments>http://www.communardo.de/techblog/2008/01/16/csr-certificate-signing-request-fur-multidomainzertifikat-erstellen/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 21:34:14 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[csr]]></category>

		<category><![CDATA[multidomainzertifikat]]></category>

		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/16/csr-certificate-signing-request-fur-multidomainzertifikat-erstellen/</guid>
		<description><![CDATA[<p>Neuere Apache-Versionen unterst&#252;tzen sogenannte Multidomainzertifikate. Damit ist es m&#246;glich, mehrere vhost mit nur einem SSL-Zertifikat, welches der Browser als g&#252;ltig akzeptiert, abzusichern. Um jedoch ein Zertifikat von einer CA zu erhalten, m&#252;ssen wir ein CSR (Certificate Signing Request) erzeugen. Mit openssl ist diese Aufgabe schnell erledigt.  Wie kann man hier aber mehrere Domains angeben? Ein m&#246;glicher Weg kann die Erstellung eines CSRs mit mehreren CommonNames sein. Dazu editieren wir /etc/ssl/openssl.cnf. In der Sektion [ req_distinguished_name ] &#228;ndern wir den Eintrag:</p>
<p><code>commonName = Common Name (eg, YOUR name)<br />
commonName_max = 64</code></p>
<p>in:</p>
<p><code>0.commonName = Common Name 1 (eg, YOUR name)<br />
0.commonName_max = 64</code></p>
<p><code>1.commonName = Common Name 2 (eg, YOUR name)<br />
1.commonName_max = 64<br />
.<br />
.<br />
.</code><br />
um. Mit einem 0.commonName_default=www.domain.tld kann man auch gleich einen passsenden Standardwert einstellen. Zum Schlu&#223; generieren wir uns den Schl&#252;ssel mit 2048 bits und den CSR:</p>
<p><code>openssl req -new -nodes -keyout dateiname.key -out dateiname.csr -newkey rsa:2048</code></p>
<p>Weitere m&#246;gliche  Wege gehen &#252;ber &#8220;subjectAltName&#8221; oder &#252;ber &#8220;commonName&#8221; und &#8220;subjectAltName&#8221;.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/16/csr-certificate-signing-request-fur-multidomainzertifikat-erstellen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tunnel mit ssh - Teil 1 ssh ohne Passwort</title>
		<link>http://www.communardo.de/techblog/2008/01/16/tunnel-mit-ssh-teil-1-ssh-ohne-passwort/</link>
		<comments>http://www.communardo.de/techblog/2008/01/16/tunnel-mit-ssh-teil-1-ssh-ohne-passwort/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 18:38:03 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[ssh]]></category>

		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/16/tunnel-mit-ssh-teil-1-ssh-ohne-passwort/</guid>
		<description><![CDATA[<p>In einigen wenigen F&#228;llen ist erw&#252;nscht oder sogar erforderlich, dass man sich auf eine fremde Maschine per ssh ohne Passwortabfrage einloggt. Denkbare Anwendungsf&#228;lle sind der Einsatz in Shellskripten oder wie hier n&#228;her erl&#228;utert, der Aufbau eines Tunnels &#252;ber ssh, um z.B. ein ungesch&#252;tztes Protokoll &#252;ber das Internet von einer entfernten Maschine auf eine lokale Maschine zu Verf&#252;gung zu stellen. Beispielhaft werde ich in den beiden Teilen schildern, wie man PostgreSQL von einer gehosteten Maschine ins lokale Netzwerk bekommt.</p>
<p>In einem ersten Schritt generieren wir uns einen passenden Schl&#252;ssel  mit  dem Kommando ssh-keygen.  Wir haben die Auswahl  unter RSA-Schl&#252;sseln mit einer L&#228;nge von 768 bis 2048 bits und einem DSA-Schl&#252;ssel mit genau 1024 bits. Bei RSA-Schl&#252;sseln wird eine L&#228;nge von 2048 bits als ausreichend sicher angenommen.</p>
<p><code>ssh-keygen -t rsa -b 2048</code></p>
<p><code>ssh-keygen -t  dsa</code></p>
<p>Die Frage nach dem Speicherort kann man in den meisten F&#228;llen best&#228;tigen, im  Normalfall unter ~/.ssh/id_dsa oder id_rsa. Braucht man mehr als einen Standardschl&#252;ssel, gibt man einfach einen anderen Namen ein. Die Frage nach einem Passwort und dessen Wiederholung lassen wir leer. Nun m&#252;ssen wir den &#246;ffentlichen Teil des Schl&#252;ssels auf den Remothost installieren. Auch hier bringt Linux gleich die passenden Tools mit:</p>
<pre>ssh-copy-id -i ~/.ssh/id_dsa.pub user@remotehost</pre>
<p>Werden mehere Schl&#252;ssel f&#252;r unterschiedliche Accounts/Maschinen gebraucht, erg&#228;nzt man die ~/.ssh/config um folgende Eintr&#228;ge:</p>
<p><code>Host remotehost<br />
Port 22<br />
IdentityFile ~/.ssh/&lt;key&gt;</code></p>
<p>Da ich ein Login mit einem ungesicherten Key aus Sicherheitsbedenken ablehnen muss, zeige ich einen eher unbachteten Weg, den so gewonnen Zugang soweit einzuschr&#228;nken, dass nur die Ausf&#252;hrung eines Kommandos erlaubt wird. Man erg&#228;nzt auf dem Remotehost im Homeverzeichnis des users die .ssh/authorized_keys die neu erstellte Zeile, die je nach Art des erstellten Schl&#252;ssels mit ssh-rsa f&#252;r einen RSA-Key bzw. mit ssh-dss f&#252;r einen DSA-Key beginnt um z.B. den Eintrag:</p>
<p><code>command="/usr/bin/sleep 1800", ssh-dss ...</code></p>
<p>Jetzt darf der Besitzer des Schl&#252;ssel nur noch /usr/bin/sleep 1800 auf dem Remotehost ausf&#252;hren. F&#252;r unsere Zwecke des Tunnelbaus ideale Voraussetzungen&#8230;</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/16/tunnel-mit-ssh-teil-1-ssh-ohne-passwort/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Reverse Proxy Apache und Logging</title>
		<link>http://www.communardo.de/techblog/2008/01/16/reverse-proxy-apache-und-logging/</link>
		<comments>http://www.communardo.de/techblog/2008/01/16/reverse-proxy-apache-und-logging/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 09:34:46 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[mod_rpaf]]></category>

		<category><![CDATA[reverse proxy]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/16/reverse-proxy-apache-und-logging/</guid>
		<description><![CDATA[<p>Betreibt man einen Apache als Reverse Proxy, so hat man im Allgemeinen das Problem, dass alle<br />
Zugriffe auf dem Backend-Apache als Zugriffe des Frontends geloggt werden. Damit ist es<br />
praktisch unm&#246;glich eine vern&#252;nftige Statistik zu erstellen.<br />
Abhilfe schafft hier das rpaf-Modul (reverse proxy add forward). Dieses Modul kann die f&#252;r andere<br />
Apache-Module sichtbare Remoteadresse &#228;ndern. Installiert wird das Modul auf dem Backend. Die<br />
Konfiguration gestaltet sich sehr einfach:<br />
<code><br />
LoadModule rpaf_module mod_rpaf.so<br />
RPAFenable On<br />
RPAFsethostname On<br />
RPAFproxy_ips 127.0.0.1 192.168.1.2<br />
</code><br />
Zuerst wird das Modul geladen und eingeschalten.Mit RPAFsethostname werden die selben<br />
Hostnamen wie auf dem Frontend verwendet. Zum Schlu&#223; werden die Frontends definiert. Der<br />
Vollst&#228;ndigkeithalber die letzte Direktive:</p>
<p><code>RPAFheader X-Forwarded-For #w&#228;hlt Header X-Forwarded-For oder X-Real-IP</code></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/16/reverse-proxy-apache-und-logging/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SVN-Zugriffsrechte &#252;ber Active Directory setzen</title>
		<link>http://www.communardo.de/techblog/2008/01/16/svn-zugriffsrechte-uber-active-directory-setzen/</link>
		<comments>http://www.communardo.de/techblog/2008/01/16/svn-zugriffsrechte-uber-active-directory-setzen/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 09:29:38 +0000</pubDate>
		<dc:creator>Jens Kögler</dc:creator>
		
		<category><![CDATA[Systemadministration]]></category>

		<category><![CDATA[Active Directory]]></category>

		<category><![CDATA[ADISS]]></category>

		<category><![CDATA[subversion]]></category>

		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/16/svn-zugriffsrechte-uber-active-directory-setzen/</guid>
		<description><![CDATA[<p>Betreibt man in einem Netzwerk ein Active Directory und Subversion (HTTP basierend), bietet es<br />
sich an, das AD f&#252;r eine Rechtevergabe f&#252;r das SVN zu verwenden. Mit dem Umweg &#252;ber ADISS<br />
(Active Directory Interface for Subversion Security) ist dies auch problemlos m&#246;glich.<br />
Vorausetzungen sind ein Apache, php (ldap,mysql), mySQL und ein (lesender) Zugriff auf das AD.<br />
Folgt man den Anweisungen in der INSTALL.txt, so ist man in wenigen Minuten am Ziel und<br />
automatisiert so die Verwaltung der Zugriffsrechte auf das Subversion &#252;ber die<br />
Gruppenzugeh&#246;rigkeit im AD. Zu finden ist Adiss auf <a href="http://adiss.sourceforge.net/" title="Sorceforge" target="_blank">Sourceforge</a></p>
<p><img src="file:///C:/DOKUME%7E1/jko/LOKALE%7E1/Temp/moz-screenshot.jpg" /><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/adiss.png" title="Adiss Webansicht"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/adiss.thumbnail.png" alt="Adiss Webansicht" /></a></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/16/svn-zugriffsrechte-uber-active-directory-setzen/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
