<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>holger-librenz.de</title>
	<atom:link href="http://www.holger-librenz.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.holger-librenz.de</link>
	<description>A developers life live</description>
	<lastBuildDate>Mon, 14 Dec 2009 21:28:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Die erste Woche mit meinem neuen Milestone</title>
		<link>http://www.holger-librenz.de/2009/12/die-erste-woche-mit-meinem-neuen-milestone/</link>
		<comments>http://www.holger-librenz.de/2009/12/die-erste-woche-mit-meinem-neuen-milestone/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 20:04:53 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=384</guid>
		<description><![CDATA[Wie bereits Achim von Coding Fish Ltd. versprochen, hier ein kleiner, sehr subjektiver Erfahrungsbericht zu meinem neuen Android Phone von Motorola.
Das Milestone, in den USA als Droid verkauft, macht Lust auf mehr und ich freue mich auf die nächsten Jahre mit dem kleinen Wegbegleiter.]]></description>
			<content:encoded><![CDATA[<h1>Die erste Woche mit meinem neuen Milestone</h1>
<p>Tja, nun ist es schon wieder mehr als eine Woche her als Hermes, der &#8220;Handybote&#8221; mein neues Spielzeug vorbei gebracht hat. Das neue Motorola Milestone.<br />
Die Ankunftsvorfreude hatte ich schon fleißig über <a href="https://twitter.com/kronk2002de" title="Ich auf Twitter">Twitter</a> kommentiert. Und über Twitter kam von <a href="http://www.afisys.de" title="Achims Blog">Achim</a> auch der Wunsch zu einem kleinen Erfahrungsbericht. Und genau diesen findet ihr hier…<br />
<span id="more-384"></span></p>
<div style="width: 100%; clear: both;">
<div style="vertical-align:middle; text-align: center; float: right; width: 50%;"><img src="http://www.holger-librenz.de/wp-content/uploads/2009/12/Milestone-Horizontal-Top.jpg" alt="Milestone Home Screen Horizontal" title="Milestone Home Screen Horizontal" width="400" height="209" class="aligncenter size-full wp-image-399" /></div>
<div style="width: 50%; float: left;">
<h2>Die Ankunft</h2>
<p>Zuerst hatte ich schon Angst. Angeblich sollte das Handy mit DHL (wie „<strong>D</strong>auert <strong>H</strong>alt <strong>L</strong>änger&#8221;) versendet werden. Schon auf das Schlimmste gefasst, da die von o2 im Bestellstatus verlinkte Tracking Auskunft nicht funktionierte, klingelte am 05.12.2009 der Hermes Paketdienst und übergab mir das kleine Päckchen.<br />
Noch vor dem Wocheneinkauf musste ich den Neuankömmling aus der Verpackung befreien. Die Verpackung mag dem einen oder anderen eher missfallen, aber mich spricht die etwas andere Art positiv an und das Handy lag fest und sicher in der Umhüllung.
</div>
</div>
<div>
Mit einem lachenden und einem weinenden Auge habe ich ja fest gestellt, dass das Milestone nicht wie in den USA geliefert wird. Aber gut, wenn hätte ich es eh nur bis zur Bordsteinkante liefern lassen:</p>
<div style="text-align: center;"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Oboklt7rW0o&#038;hl=de_DE&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Oboklt7rW0o&#038;hl=de_DE&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div>
<p>Das Handy ist ungefähr so groß wie ich es mir vorgestellt hatte und liegt echt gut in der Hand. Mit diesem positiven Ersteindruck erkundete ich die Verpackung weiter und musste feststellen, dass mich mein altes XDA Orbit 2 in Sachen Zubehör regelrecht verwöhnt hat. Motorola liefert beim Milestone leider kein vollwertiges Netzteil, sondern nur einen Adapterstecker mit. Dieser gehört in die Steckdose und hat eine USB Buchse in die das recht kurze USB Kabel eingesteckt werden muss, welches Motorola allerdings mitliefert. Dazu gesellen sich noch eine kleine Kurzanleitung, die jedoch auch online zur Verfügung steht, eine CD mit der „Motorola Multimedia Link&#8221; Software samt USB Treibern und ein kabelgebundenes Headset. Die 8 GB microSD Karte ist bereits im Handy verbaut.<br />
Mein altes XDA hatte im Vergleich dazu ein vollwertiges Netzteil, eine passende Hülle und noch ein Auto-Kit dabei, welches aus einer Autohalterung und einem Autoladekabel bestand. Schade eigentlich das Motorola hier so spart. Gerade eine passende Tasche hilft das hervorragende Display etwas länger zu erhalten.
</p></div>
<h2>Software</h2>
<p>Zuerst zur mitgelieferten CD. Diese bringt nichts wirklich Aufregendes mit sich. Der Installer packt die Motorola Multimedia Link Software – irgendein Ungetüm von Nero – und die benötigten USB Treiber (für Laden und Geräteerkennung) auf die Platte. Bei Windows XP, welches meinen Arbeitslaptop antreibt, stürzt der „MotoConnect Service&#8221; regelmäßig nach dem Starten ab, läuft jedoch weiter, so dass das Milestone dennoch erkannt wird. Ansonsten hab ich den Sinn hinter der Multimedia Link Software noch nicht erkannt. Für Tipps bin ich da immer dankbar…<br />
Auf dem Milestone werkelt es nun &#8211; das Android 2.0. Es macht einen echt netten Eindruck, auch ohne Erweiterungen wie HTC Sense.<br />
Die Installation läuft problemlos ab – ein paar Grundinformationen und schon erscheint der Home Screen. Und was einen besonderen Eindruck hinterlässt: Ich werde nicht dazu gezwungen ein Google Konto zu hinterlegen. Es würde also auch ganz ohne Google funktionieren, wenn auch nicht unbedingt so komplett rund.<br />
Die erste Amtshandlung auf dem frisch gestarteten Milestone war das Konfigurieren des heimischen WLANs. Das ging mehr als problemlos und fühlt sich auch flüssiger und schneller an als auf meinem alten Orbit.<br />
Ok, dann ab in den berühmt-berüchtigten Android Marketplace. Das Suchen und Installieren von Tools funktioniert auch hier rund. Allerdings haben die Kritiker recht, wenn sie meinen dass die Qualität der Software noch etwas zu wünschen lässt. Ich habe bis jetzt zwar nur kostenfreie Tools ausprobiert, aber auch hier würde ich mir etwas mehr Qualitätsanspruch der Programmierer wünschen.<br />
Hier eine kleine Auswahl der Apps, die momentan auf meinem Androiden werkeln:</p>
<div style="width: 100%">
<div style="width: 50%; float: left">
<ul>
<li>NetCounter (<a href="http://www.jaqpot.net/netcounter" title="NetCounter Projektseite besuchen">http://www.jaqpot.net/netcounter</a>)</li>
<li>Barcode Scanner (<a href="http://code.google.com/p/zxing" title="Zebra Crossing Projektseite besuchen">http://code.google.com/p/zxing</a>)</li>
<li>Twidroid (<a href="http://twidroid.com" title="Twidroid Projektseite besuchen">http://twidroid.com</a>)</li>
<li>Aloqa (<a href="http://www.aloqa.com" title="Mehr zu Aloqa auf der Projektseite">http://www.aloqa.com</a>)</li>
</ul>
</div>
<div style="width: 50%; float: right">
<div id="attachment_400" class="wp-caption alignright" style="width: 250px"><img src="http://www.holger-librenz.de/wp-content/uploads/2009/12/NetCounter.jpg" alt="NetCounter Screenshot" title="NetCounter" width="240" height="360" class="size-full wp-image-400" /><p class="wp-caption-text">NetCounter Screenshot</p></div>
</div>
</div>
<p>Das ist nur ein kleiner Auszug, der allerdings nicht ganz ohne Hintergedanken ausgewählte Apps enthält. Denn die Tools zeigen recht eindrucksvoll, was für Potenzial hinter der Android Plattform steckt bzw. das es durchaus schon ordentliche Tools für die Google-Plattform gibt. So ist NetCounter ein kleiner Dienst, der den Traffic auf den Schnittstellen für WLAN und GPRS/UMTS zählt. Gerade für O2 Nutzer wie mich, die nicht auf eine kleine Übersicht wie Vodafone QuickCheck zurückgreifen können, ein echt nützliches App.<br />
Barcode Scanner ist fast nicht von einem Android Phone wegzudenken. Viele Apps sind im Netz mittels eines <a href="http://de.wikipedia.org/wiki/QR_Code" title="Was das ist auf Wikipedia nachlesen">QR Codes</a> verlinkt. Dieser Code kann einfach mit dieser App „fotografiert&#8221; werden und schon kommt die App auf das Android. Natürlich kann das auch für Kontakte, normale Webseiten-Links und vieles mehr genutzt werden.<br />
Twidroid ist eine echt super funktionierende Twitter-Anbindung für das Google Handybetriebssystem. Wer es wünscht kann es auch rund um die Uhr laufen lassen und verpasst so nie einen Tweet. Die Entwicklung geht echt fix voran und bis jetzt ist das App noch nicht einmal abgestürzt.<br />
Zu guter Letzt Aloqa. Das Tool fasziniert von Anfang an. Mit Hilfe des GPS und ggf. mit Unterstützung des GSM Netzes lokalisiert Aloqa den aktuellen Standort und bietet alles, was ein „Einheimischer&#8221; auch sofort würde – Geldautomaten, Gaststätten, Bars und was noch so alles interessant sein könnte. Einmal für einen Standort entschieden führt Aloqa auf Wunsch auch noch zum Ziel. Alles eine runde und echt performante Sache.</p>
<h2>Die Hardware</h2>
<p>Also hier gibt es momentan nichts zu meckern – außer das ich gern etwas längere Akkulaufzeiten hätte. Momentan schafft mein Milestone so 1 bis 1 ½ Tage, dann hätte es gern wieder Strom. Allerdings bin ich noch dabei herauszufinden, was denn da so Strom verbraucht. Eventuell ist es einfach nur ein kleines App was ständig läuft.<br />
Damit wären wir bei dem wohl gravierendsten Unterschied zwischen Windows Mobile und dem Android: Programme müssen nicht explizit beendet werden. Wenn das App keinen „Aus-Schalter&#8221; bietet läuft es einfach so lange auf Sparflamme im Hintergrund bis der Speicher benötigt wird. Bei Windows Mobile kaum zu denken, da war jeder laufende Prozess ein negativer Hauptgewinn für die Performance und die Akkulaufzeit.<br />
Noch ein kurzer Blick auf die Hardware-Tastatur. Ich war ja erst etwas skeptisch. Bei der Größe eine benutzbare Tastatur? Die Antwort muss lauten: Ja. Sogar mit meinen – sagen wir: größeren – Fingern konnte ich nach kurzer Eingewöhnungszeit zügig und fehlerfrei schreiben. Warum allerdings die gut lernende T9 Unterstützung bei der Hardware-Tastatur nicht angeboten wird, ist mir noch rätselhaft.<br />
Das Fehlen der Umlaute irritiert zuerst, aber ein kurzes Festhalten der Tasten u, a, o und s bringt allerdings alle Facetten der Umlaute zu Tage.</p>
<p><img src="http://www.holger-librenz.de/wp-content/uploads/2009/12/Motorola-in-Multimedia-Station-300x200.jpg" alt="Motorola in Multimedia Station" title="Motorola in Multimedia Station" width="300" height="200" class="alignright size-medium wp-image-401" /></p>
<h2>Das Web und Emails</h2>
<p>Hmm, irgendwie passen die Themen nirgends so richtig rein. Sie hängen sowohl von der Hardware als auch von der Software ab. Daher ziehe sie einfach etwas heraus.</p>
<h3>Browser</h3>
<p>Der mitgelieferte Browser, auf Basis des Open Source Projektes <a href="http://www.webkit.org" title="zur WebKit Projektseite">WebKit</a>, macht einiges her. Schon allein die <a href="http://de.wikipedia.org/wiki/Multi-Touch" title="die Erklärung liefert Wikipedia">MultiTouch</a> Fähigkeit bringt Benutzbarkeit mit sich. Allerdings fehlt mir ein Werbeblocker wie <a href="https://addons.mozilla.org/en-US/firefox/addon/1865" title="AdBlock Plus auf der AddOn Seite von Mozilla">AdBlock Plus (ABP)</a> für den Firefox oder <a href="http://qux.us/adthwart" title="AdThwart Projektseite">AdThwart</a> für den Chrome.<br />
Leider kann der Browser auch nicht mit WML Seiten umgehen, was bei Mamut-Seiten wie die der <a href="http://www.rmv.de" title="RMV Seite ansehen">RMV</a> durchaus negativ auffällt. Hier würde ich mich über Tipps freuen. Der <a href="http://www.opera.com/mini/" title="Opera Mini Produktseite">Opera Mini</a> ist leider nicht benutzbar auf dem Milestone und sonst habe ich noch keine Alternative gefunden.</p>
<p>Worauf ich auch noch Hoffe ist die Integration der Google Bookmarks in den Browser. Dann habe ich sogar auf dem Handy die gleichen Bookmarks wie in dem gesamten Browser-Zoo auf meinen Rechner.</p>
<h3>Email</h3>
<p>Also in punkto Email bleiben fast keine Wünsche offen. Natürlich werden die Mails von Google Mail in ihrer Gänze unterstützt – soll heißen: Tags, Archivieren, Suchen… alles ist dabei.<br />
IMAP und POP3 Konten kann der integrierte Mailclient ebenfalls – auch wenn diese von einem Server mit SSL / TLS Serverzertifikat kommen, das nicht mitgeliefert wird. Leider sind es zwei Apps, die hier für Mails zuständig sind. Aber wirklich stören tut es nicht. Wer kein Google Mail nutzen will, wird es nicht vermissen und wer doch darauf zurückgreift lässt einfach die Mails von beiden Clients abrufen und bekommt die Benachrichtigungen entsprechend.<br />
Exchange Konten werden auch direkt unterstützt – sogar die Synchronisation der Kontakte und Termine ist problemlos möglich. Wer jedoch gern Firmen- und Privatkalender auf dem Handy zusammen angezeigt bekommen will muss auch hier auf zwei Apps zurückgreifen oder fasst die Termine bereits im Firmenkalender zusammen. Alles in Allem funktioniert die Anbindung sehr gut.</p>
<h2>Warten aufs Update</h2>
<p>Android 2.0 – liebevoll auch Eclair genannt – ist gerade frisch, da gibt es schon Update-Informationen. Verizon Wireless, der Exklusivanbieter des Milestone in den USA, wo Motorola es Droid nennt, verteilt bereits das Update auf 2.0.1. In Deutschland sind die Server noch offline. Das Update soll unter anderem eine bessere Akkulaufzeit bringen. Ich bin jedenfalls gespannt.<br />
Aber auch Android 2.1 steht vor der Tür. Ob und wann es das für das Milestone geben wird weiß ich noch nicht, aber ich kann es kaum erwarten.</p>
<h2>Fazit</h2>
<p>So viel Text und kein Ende? Doch – der Artikel ist fast zu Ende. Ich möchte den vielen Text in eine kurze Aussage pressen: Das Milestone als erstes Android 2.0 Phone macht Lust auf mehr und hat sexy Macken.<br />
Die Ausstattung scheint mittlerweile auch in Deutschland zu variieren – die ersten Meldungen werden laut, dass Vodafone und O2 teilweise Versionen verschicken, bei denen eine Multimedia Station dabei ist. Die gibt es leider noch nicht in Deutschland – auch wenn ich sie gern mein Eigen nennen würde. Dafür fehlen aber teilweise die SD Karten. Also es bleibt spannend, in welcher Version das Milestone in Deutschland endgültig Fuß fassen wird. Aber eines ist Gewiss: Das Handy ist jeden Cent wert und macht Lust auf mehr. Wer eine eiFön Alternative sucht, die trotz Hardware-Tastatur noch super in der Hand liegt und das aktuellste alternative Betriebssystem mitbringt, der ist mit dem Milestone direkt dabei. Und die problemlose Integration in eine bestehende Exchange Infrastruktur macht es sogar für Firmen interessant!<br />
Bleibt mir nur noch zu sagen: Wer Tipps oder Anmerkungen hat ist herzlich eingeladen die Kommentarfunktion zu nutzen. Und für alle Leser bedeutet mein neues Spielzeug vor allem eines: eine neue Rubrik in meinem Blog.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/12/die-erste-woche-mit-meinem-neuen-milestone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSH mal als Filesystem nutzen</title>
		<link>http://www.holger-librenz.de/2009/08/ssh-mal-als-filesystem-nutzen/</link>
		<comments>http://www.holger-librenz.de/2009/08/ssh-mal-als-filesystem-nutzen/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 05:34:27 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Tricks & Tipps]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=261</guid>
		<description><![CDATA[Eigentlich ist es eine einfache Anforderung, die ich momentan auf Arbeit habe: Über das Netzwerk soll ein Image verfügbar gemacht werden. Das Image darf auf dem Client nicht gespeichert werden, weil schlichtweg der Speicherplatz nicht zur Verfügung steht. Nun, soweit ist das alles nichts besonderes, wenn ich einmal davon absehe, das NFS keine Option ...]]></description>
			<content:encoded><![CDATA[<p>Da ich gerade beruflich viel mit Linux und der Anbindung an einen Server arbeite kommt mal wieder ein kleiner Artikel zum Thema.</p>
<p>Jeder kennt wohl SSH. Viele kennen auch sftp &#8211; das was primär bei scp und WinSCP im Hintergrund werkelt und für den sicheren Dateitransfer gedacht ist. Nun, diese Komponenten können wir auch als Remote-Filesystem nutzen. Aber wie kam ich nun gerade (wieder) auf dieses Filesystem?<br />
<span id="more-261"></span></p>
<h2>Die Anforderung</h2>
<p>Eigentlich ist es eine einfache Anforderung, die ich momentan auf Arbeit habe: Über das Netzwerk soll ein Image verfügbar gemacht werden. Das Image darf auf dem Client nicht gespeichert werden, weil schlichtweg der Speicherplatz nicht zur Verfügung steht. Nun, soweit ist das alles nichts besonderes, wenn ich einmal davon absehe, das <a href="http://nfsv4.org/" title="NFS Projektseite in neuem Fenster ansehen" target="_blank">NFS</a> keine Option ist.<br />
Die erste Idee war <a href="http://de.wikipedia.org/wiki/WebDAV" title="Was WebDAV ist, zeigt Wikipedia im neuen Fenster" target="_blank">WebDAV</a> via <a href="http://savannah.nongnu.org/projects/davfs2" title="davfs Projektseite" target="_blank">davfs2</a> zu nutzen, da momentan nur HTTPS Verbindungen zulässig sind. Aber das Protokoll ist leider nicht für größere Dateien gedacht und kopiert stets im Hintergrund die komplette Datei bei Zugriffen (also vom Server beim Lesen und vom Client beim Schreiben). Damit fiel diese Lösung leider heraus.<br />
Als nächstes fiel mir ein altes Experiment mit <a href="http://fuse.sourceforge.net/" title="Filsystem im Userspace - Projektseite im neuen Fenster ansehen" target="_blank">fuse</a> wieder ein. Damals hatte ich versucht SSH Zugriffe über das Filesystem zu realisieren. Das funktionierte damals schon super und warum sollte es diesmal nicht funktionieren.</p>
<h2>SSHFS, die Lösung</h2>
<p>Unter Debian ist natürlich alles wieder zügig installiert:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">aptititude <span style="color: #c20cb9; font-weight: bold;">install</span> sshfs</pre></div></div>

<p>Ist die Installation erst einmal durchgelaufen kann es theoretisch schon los gehen. Damit wir aber eine etwas lesbarere fstab Syntax erhalten, bauen wir noch einen kleinen mount-Helper, wie wir ihn schon bei der <a href="http://www.holger-librenz.de/2009/07/du-sollst-kein-anderes-ntfs-neben-ntfs-3g-haben/" title="Du sollst kein anderes ntfs neben ntfs-3g haben…">ntfs-3g Installation</a> kennengelernt haben:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mount.fuse <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mount.fuse.sshfs</pre></div></div>

<p>Nun kann ein Mount-Point in der fstab deklariert werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>user<span style="color: #000000; font-weight: bold;">&gt;@&lt;</span>host<span style="color: #000000; font-weight: bold;">&gt;</span>:<span style="color: #000000; font-weight: bold;">&lt;</span>remote path<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #c20cb9; font-weight: bold;">mount</span> point<span style="color: #000000; font-weight: bold;">&gt;</span> fuse.sshfs user,allow_other,noauto <span style="color: #000000;">0</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Sieht noch etwas kryptisch aus. Aber nehmen wir mal als Beispiel, das es einen Server <b>source.example.com</b> gibt, welchen wir gerade einrichten. Außerdem existiert der Server <b>target.example.com</b>, welcher als SSH Server genutzt werden soll. Auf dem Server target.example.com existiert der Nutzer <b>example</b>, welcher Zugriff auf das Verzeichnis <b>/var/sshfs</b> hat. Dieses Verzeichnis soll nun auf source.example.com über das Verzeichnis <b>/media/ssh</b> verfügbar gemacht werden. Daraus ergibt sich folgende fstab Zeile:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">example<span style="color: #000000; font-weight: bold;">@</span>target.example.com:<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>sshfs <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ssh</span> fuse.sshfs user,allow_other,noauto <span style="color: #000000;">0</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Wenn ein User nun</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ssh</span></pre></div></div>

<p>eingibt, wird versucht auf den Server target.example.com zuzugreifen. Ist das erfolgreich, wird entweder versucht mit dem SSH Key des Users eine Authentifikation durchzuführen oder das Passwort für den Account example wird abgefragt. Grundsätzlich empfehle ich den Weg über den SSH Schlüssel.</p>
<h2>SSH Keys</h2>
<p>SSH nutzt asymmetrische Verschlüsselung, welche einen öffentlichen und einen privaten Schlüssel benötigt. Wie die Namen schon andeuten ist der private Schlüssel unter keinen Umständen weiter zu geben und soweit möglich immer mit einem Passwort zu versehen. Der öffentliche Schlüssel kann frei verfügbar sein. Dieser wird zum Beispiel vom Administrator des Zielsystems benötigt um Zugriff auf das System mittels der Schlüssel zu ermöglichen. Aber eins nach dem anderen.</p>
<h3>SSH Key erzeugen</h3>
<p>SSH Keys sind zügig erstellt. Am einfachsten führt der User, welcher die Keys nutzen möchte, ssh-keygen aus. Ein Beispiel könnte so aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh-keygen</span> <span style="color: #660033;">-b</span> <span style="color: #000000;">2048</span> <span style="color: #660033;">-C</span> <span style="color: #ff0000;">&quot;My SSH Key&quot;</span></pre></div></div>

<p>Damit erzeugen wir einen Schlüssel mit einer Bitlänge von 2048 (-b) und fügen den Kommentar &#8220;My SSH Key&#8221; ein. Nach dem Start fragt ssh-keygen nach dem Namen der Datei &#8211; im Falle das der Key auch gleich für den aktuellen User genutzt werden soll kann hier einfach Enter gedrückt werden. Wird der Key für einen anderen Nutzer erstellt, ist die Wahl grundsätzlich erst einmal frei. Damit openssh später den Key findet muss der private Schlüssel als <b>identity</b> oder als <b>id_rsa</b> bzw. <b>id_dsa</b> im Verzeichnis <b>.ssh</b> des Home-Verzeichnisses verfügbar sein. Ob rsa oder dsa der richtige Suffix ist hängt vom Algorithmus ab, mit dem der Schlüssel erzeugt wurde. Wenn der Schlüssel mit dem Beispielbefehl generiert wird, wird der Standard &#8211; RSA &#8211; genutzt. Wer mehr zum Thema wissen möchte kann sich bei Wikipedia die Artikel zu <a href="http://de.wikipedia.org/wiki/RSA-Kryptosystem" title="Ueber RSA-Kryptosystem auf Wikipedia lesen" target="_blank">RSA</a> und <a href="http://de.wikipedia.org/wiki/Digital_Signature_Algorithm" title="Ueber DSA-Kryptosystem auf Wikipedia lesen" target="_blank">DSA</a> einmal ansehen.</p>
<p>Aber zurück zum Generieren der Schlüssel. Ist die Frage nach dem Dateinamen geklärt fragt ssh-keygen noch nach einer Passphrase. Es ist verlockend hier kein Passwort zu nutzen &#8211; ist der Key doch das eigentliche Passwort &#8211; aber dieser Versuchung sollte so gut wie nie nachgegeben werden. Denn jeder, der diesen Key einmal in die Hände bekommt hat auch Zugang zu sämtlichen Systemen die für diesen Key freigegeben sind. Wird keine Passphrase vergeben so sollte noch mehr auf den Schlüssel geachtet werden und die Zugriffsrechte sollten auf ein Minimum beschränkt werden.<br />
Und wo ich gerade bei guten Ratschlägen bin: Es ist gut, das hier nach einer Passphrase und nicht (nur) nach einem Passwort gefragt wird. Es ist wirklich besser einen ganzen Satz oder gar eine Redewendung zu nutzen. Diese lassen sich meist besser merken und sind durch <a href="http://de.wikipedia.org/wiki/Brute_force" title="Was das ist erklärt Wikipedia unter diesem Link" title="_blank">Brute-Force-Attacken</a> nicht so einfach mit vertretbarem Aufwand herausfindbar.</p>
<p>Nachdem nun auch eine Passphrase eingegeben wurde wird der Schlüssel generiert. Nach dem Generieren existieren zwei Dateien (daher ist auch immer die Rede von <em>den Schlüsseln</em>). Beide haben den Dateiamen der während des Generierens konfiguriert wurde. Eine Datei hat zusätzlich den Anhang <b>.pub</b>. Das ist der öffentliche Schlüssel. Beide Dateien sollte vorsichtshalber an einem sicheren Ort als Kopie gelagert werden. Für Firmenschlüssel bietet es sich an, beide Dateien auf Papier zu bannen (es ist schliesslich &#8220;nur&#8221; ein ganz großer String pro Datei) und zusammen mit einem Datenträger, welcher die Dateien digital enthält, in einen Safe zu packen.</p>
<h3>Die Schlüssel einspielen</h3>
<p>Wie bereits kurz angemerkt, gehört der private Schlüssel per default in das Verzeichnis .ssh, welches unterhalb des jeweiligen Nutzerverzeichnisses liegt. Der Dateiname sollte identity oder id_rsa bzw. id_dsa lauten.Wenn wir annehmen, das auf dem Server source.example.com der Nutzer <b>bob</b> existiert und den Schlüssel nutzen soll, so sollte der oben generierte Key unter dem Pfad <b>/home/bob/.ssh/id_rsa</b> existieren.</p>
<p>Auf dem Server target.example.com wird der Inhalt der Datei mit dem Suffix .pub an die Datei <b>authorized_keys</b> <em>angehangen</em>. Angehangen ist dabei das wichtigste Wort. Die Datei authorized_keys enthält eine Menge an öffentlichen SSH Schlüsseln von Nutzern, die ebenfalls Zugang zu dem Nutzeraccount bekommen sollen. Sobald der Inhalt eines öffentlichen Schlüssel einfach nur nach authorized_keys kopiert wird, haben alle anderen Schlüssel keinen Zugang mehr!<br />
Wenn der öffentliche Schlüssel als Datei id_rsa.pub auf target.example.com kopiert wurde, kann er einfach durch die Befehlszeile</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> id_rsa.pub <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>example<span style="color: #000000; font-weight: bold;">/</span>authorized_keys</pre></div></div>

<p>an die Datei mit den erlaubten Schlüsseln angehangen werden. Natürlich kann auch der Inhalt der Datei als String kopiert werden und in die Datei authorized_keys kopiert werden.</p>
<h3>SSH konfigurieren</h3>
<p>Eigentlich sollte SSH bereits so konfiguriert sein, das es sowohl SSH Keys als auch Passwörter akzeptiert. Da SSH Schlüssel nicht einfach erraten werden können, lasse ich normalerweise nur Anmeldungen via SSH zu, aber das nur am Rande und als kleiner Tipp.<br />
Die magische Konfigurationszeile, welche SSH Keys zulässt, in der Datei /etc/ssh/sshd_config lautet:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">PubkeyAuthentication <span style="color: #c20cb9; font-weight: bold;">yes</span></pre></div></div>

<p>Wenn das gesetzt ist, akzeptiert der Server SSH Authentifikation. Zum Testen genügt es, einfach eine SSH Verbindung aufzunehmen. Angenommen, wir sind als User bob auf source.example.com angemeldet und die SSH Keys sind an Ort und Stelle, dann sollte</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> example<span style="color: #000000; font-weight: bold;">@</span>source.example.com</pre></div></div>

<p>nach dem SSH Key Passwort fragen.</p>
<h2>Der finale Test</h2>
<p>Ok, jetzt sollte ja alles vorhanden sein. Also kann der User bob los legen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ssh</span></pre></div></div>

<p>Wenn alles geklappt hat, sollte jetzt nach dem Passwort des SSH Keys gefragt werden. Wenn dieser richtig eingegeben wurde, sollte unter /media/ssh das zu finden sein, was auf dem Server target.example.com im Verzeichnis /var/sshfs zu finden ist.</p>
<h2>Links</h2>
<p>Wer jetzt Blut geleckt hat, kann auch einen Blick auf folgende Links werfen:</p>
<ul>
<li><a href="http://www.openssh.org" title="OpenSSH Projektseite im neuen Fenster ansehen" target="_blank">OpenSSH</a> &#8211; Die freie SSH Implementierung</li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" title="PuTTY Projektseite im neuem Fenster öffnen" target="_blank">PuTTY</a> &#8211; Für alle, die noch unter Windows arbeien müssen, aber einen SSH Client brauchen.</li>
<li><a href="http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FileSystems" title="Andere Dateisysteme, die auf fuse aufbauen" target="_blank">fuse Dateisysteme</a> &#8211; eine Liste mit anderen Dateisystemen, die auf fuse aufbauen</li>
</ul>
<p style="text-align: center; vertical-align: middle; margin: 5px; margin-top: 10px;">
 <script type="text/javascript"><!--
google_ad_client = "pub-3815200519126410";
/* Blog Posts holger-librenz.de (Banner) */
google_ad_slot = "3344921178";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/08/ssh-mal-als-filesystem-nutzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT Plugin für Netbeans 6.7.1</title>
		<link>http://www.holger-librenz.de/2009/07/gwt-plugin-fur-netbeans-6-7-1/</link>
		<comments>http://www.holger-librenz.de/2009/07/gwt-plugin-fur-netbeans-6-7-1/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 08:09:25 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tricks & Tipps]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=263</guid>
		<description><![CDATA[Es ist schon irgendwie komisch - egal ob Eclipse oder Netbeans, bei den aktuellsten Versionen funktioniert das jeweilige GWT Plugin ist nicht verfügbar.

Während es bei Eclipse 3.5 wohl eine größere Baustelle ist, wie u.a. hier zu lesen ist, gibt es bei Netbeans eine unschöne, aber funktionierende Lösung.

Die Lösung ist simpel und effektiv: Das Plugin ...]]></description>
			<content:encoded><![CDATA[<p>Es ist schon irgendwie komisch &#8211; egal ob Eclipse oder Netbeans, bei den aktuellsten Versionen funktioniert das jeweilige <a href="http://code.google.com/webtoolkit/" target="Das Google Web Toolkit im neuen Fenster erkunden" target="_blank">GWT</a> Plugin ist nicht verfügbar.</p>
<p>Während es bei Eclipse 3.5 wohl eine größere Baustelle ist, wie u.a. <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/90e3b5e6433212f8" title="Eintrag im GWT Forum ansehen" target="_blank">hier</a> zu lesen ist, gibt es bei Netbeans eine unschöne, aber funktionierende Lösung.</p>
<p>Die Lösung ist simpel und effektiv: Das Plugin ist zwar momentan nicht über die Update-Funktion von Netbeans verfügbar, aber es existiert ein Draft auf der <a href="https://gwt4nb.dev.java.net/" title="Webseite des gwt4nb Projektes" target="_blank">Projektseite</a>. Hier kann einfach über <a href="https://gwt4nb.dev.java.net/servlets/ProjectDocumentList?folderID=7081&#038;expandFolder=7081&#038;folderID=0" tite="Direktlink zur Downloadübersicht" target="_blank">&#8220;Documents &amp; files&#8221;</a> das benötigte nbm File heruntergeladen werden. In Netbeans wird das Modul dann über &#8220;Tools -&gt; Plugins -&gt; Downloaded -&gt; Add Plugins&#8230;&#8221; problemlos installiert.</p>
<p>Viel Spass damit.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/07/gwt-plugin-fur-netbeans-6-7-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework Poster</title>
		<link>http://www.holger-librenz.de/2009/07/zend-framework-poster/</link>
		<comments>http://www.holger-librenz.de/2009/07/zend-framework-poster/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 20:01:38 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Zend Fran]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=255</guid>
		<description><![CDATA[So, diesmal gibt es einen kleinen Ereignisbericht.

Es ist jetzt ein paar Wochen her, wo Björn Schotte mich bei Xing ansprach, ob ich nicht Interesse an einem Zend Framework Poster hätte. 
Nun ja, da ich gute Erfahrungen mit dem Zend Framework gemacht habe - wobei auch der Artikel zur Authorisierung mit dem Zend Framework entstanden ...]]></description>
			<content:encoded><![CDATA[<p>So, diesmal gibt es einen kleinen Ereignisbericht.</p>
<p>Es ist jetzt ein paar Wochen her, wo <a href="https://www.xing.com/profile/Bjoern_Schotte" title="Björns Profil auf Xing im neuen Fenster öffnen" target="_blank">Björn Schotte</a> mich bei <a href="https://www.xing.com/profile/Holger_Librenz" title="Ich auf Xing, im neuen Fenster begutachten" target="_blank">Xing</a> ansprach, ob ich nicht Interesse an einem Zend Framework Poster hätte.<br />
Nun ja, da ich gute Erfahrungen mit dem <a href="http://framework.zend.com" title="Zend Framework Projektseite im neuen Fenster anzeigen" target="_blank">Zend Framework</a> gemacht habe &#8211; wobei auch der Artikel zur <a href="http://www.holger-librenz.de/2009/01/zend-framework-und-authorisierung/" title="Artikel Zend Framework und Authorisierung lesen" target="_self">Authorisierung mit dem Zend Framework</a> entstanden ist &#8211; und Mayflower, die Firma von Björn, ja quasi <strong>die</strong> Firma im PHP Umfeld nach Zend ist, war ich von der Idee begeistert und habe sofort geantwortet.</p>
<p>Heute hatte ich dann endlich das ersehnte Poster im Briefkasten und ich muss sagen, ich bin verdammt positiv beeindruckt. Das Poster zeigt auf einer beeindruckenden Größe alle wichtigen Komponenten und bringt sogar noch Code-Beispiele mit! Das macht direkt Lust auf das kommende Poster &#8220;PHP Web Security&#8221;, was Mayflower zusammen mit <a href="https://www.xing.com/profile/Stefan_Esser13/N1.2.1.eead19" title="Stefan Esser auf Xing" target="_blank">Stefan Esser</a> erstellen will.</p>
<p>Da bleibt mir eigentlich nur noch eins: Danke Mayflower, das ist eine super Aktion!</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/07/zend-framework-poster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Du sollst kein anderes ntfs neben ntfs-3g haben&#8230;</title>
		<link>http://www.holger-librenz.de/2009/07/du-sollst-kein-anderes-ntfs-neben-ntfs-3g-haben/</link>
		<comments>http://www.holger-librenz.de/2009/07/du-sollst-kein-anderes-ntfs-neben-ntfs-3g-haben/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 08:23:16 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=242</guid>
		<description><![CDATA[Heute gibt es mal wieder einen kleinen Tipp für alle, die mit Debian auf NTFS Partitionen zugreifen wollen oder müssen.

Ich bin mal wieder verzweifelt. Unter Debian ist der richtige Lese- und Schreibzugriff auf NTFS Partitionen mittels ntfs-3g (bzw. jetzt ntfsmount) schnell installiert, wie mein letzter Artikel kurz zusammen fasst. Das reine Vorhandensein des Moduls ...]]></description>
			<content:encoded><![CDATA[<p>Heute gibt es mal wieder einen kleinen Tipp für alle, die mit Debian auf NTFS Partitionen zugreifen wollen oder müssen.</p>
<p>Ich bin mal wieder verzweifelt. Unter Debian ist der richtige Lese- und Schreibzugriff auf NTFS Partitionen mittels <a href="http://www.ntfs-3g.org/" title="Im neuen Fenster Projektseite zu ntfs-3g ansehen" target="_blank">ntfs-3g</a> (bzw. jetzt <a href="http://www.linux-ntfs.org/doku.php?id=ntfsmount" title="ntfsmount Projekt im neuen Fenster besuchen" target="_blank">ntfsmount</a>) schnell installiert, wie mein <a href="http://www.holger-librenz.de/2009/06/mit-debian-5-auf-ntfs-partition-schreiben/" title="Artikel mit Beschreibung wie man auf NTFS Partitionen schreibt im neuen Fenster öffnen" target="_blank">letzter Artikel</a> kurz zusammen fasst. Das reine Vorhandensein des Moduls ntfs-3g ist allerdings noch kein schlagendes Argument für Debian, dieses auch standardmäßig beim Einhängen von NTFS Partitionen zu nutzen.</p>
<p>Aber Linux wäre nicht Linux, wenn es dafür nicht auch einen einfachen Lösungsweg gäbe. Das Zauberwort heißt &#8220;external helper&#8221; und wird nur am Rande der <a href="linux.die.net/man/8/mount" title="manpage online im neuen Fenster ansehen" target="_blank">mount manpage</a> erwähnt. Das dahinter stehende Prinzip ist jedoch denkbar einfach. Wenn unter /sbin ein Programm mit dem Namensschema mount.<Partitionstyp> existiert, wird dieses kurzerhand von mount genutzt.</p>
<p>Nun, mit dem Installieren von ntfs-3g wurde schon ein /sbin/mount.ntfs-3g angelegt. Allerdings gibt es ja den Partitionstyp ntfs-3g nicht womit dieser Helper nur genutzt wird, wenn beim Einhängen via -t ntfs-3g explizit der &#8220;Typ&#8221; auf ntfs-3g gesetzt wird. Wir brauchen aber etwas, was bei &#8220;ntfs&#8221; genutzt wird. Also erstellen wir doch einfach einen Symlink auf den schon bestehenden external helper:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mount.ntfs-3g <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mount.ntfs</pre></div></div>

<p>Und siehe da, jetzt wird per default ntfs-3g genutzt!</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/07/du-sollst-kein-anderes-ntfs-neben-ntfs-3g-haben/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mit Debian 5 auf NTFS Partition schreiben</title>
		<link>http://www.holger-librenz.de/2009/06/mit-debian-5-auf-ntfs-partition-schreiben/</link>
		<comments>http://www.holger-librenz.de/2009/06/mit-debian-5-auf-ntfs-partition-schreiben/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 11:10:04 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=233</guid>
		<description><![CDATA[Es ist wieder einer dieser Tage - seit Ewigkeiten habe ich ein Debian 5 im Einsatz in dem ich meinen NTFS-formatierten Stick einhängen möchte. Ein
mount /dev/sdc1 /media/stick
meldet zwar erfolgreichen Vollzug, aber wirklich schreiben kann ich darauf nicht! So wird zum Beispiel der Versuch ein touch auszuführen mit

$ touch /media/stick/test
touch: kann '/media/stick/test' nicht berühren: Das ...]]></description>
			<content:encoded><![CDATA[<p>Es ist wieder einer dieser Tage &#8211; seit Ewigkeiten habe ich ein Debian 5 im Einsatz in dem ich meinen NTFS-formatierten Stick einhängen möchte. Ein</p>
<pre>mount /dev/sdc1 /media/stick</pre>
<p>meldet zwar erfolgreichen Vollzug, aber wirklich schreiben kann ich darauf nicht! So wird zum Beispiel der Versuch ein touch auszuführen mit</p>
<pre>
$ touch /media/stick/test
touch: kann '/media/stick/test' nicht berühren: Das Dateisystem ist nur lesbar</pre>
<p>quittiert.</p>
<p>Nun, eigentlich ist ja seit <a href="http://www.ntfs-3g.org/" title="Projekt ntfs-3g im neuen Fenster öffnen" target="_blank">ntfs-3g</a> keine Probleme bei NTFS mehr zu erwarten. Deswegen schaute ich zuerst, was denn mount so an Informationen heraus gibt. Laut mount war der Stick mit &#8216;rw&#8217; eingehangen. Aber halt &#8211; irgendwie sieht die Zeile für den Stick anders aus, als ich es von meinem Ubuntu sonst kenne&#8230; Also schaute ich kurz ob es denn Programme mit &#8216;ntfs&#8217; am Anfang gibt und siehe da, es gibt keine. Das ist äußerst seltsam.</p>
<p>Aber genug der vielen Worte. Das Problem liegt schlichtweg daran, das ntfs-3g nicht installiert ist. Das lässt sich unter Debian schnell mit</p>
<pre>
aptitude install ntfs-3g
</pre>
<p>erledigen. Leider nutzt mount dann immer noch das Kernel-Modul ntfs. Aber mit dem Paket ntfs-3g kommt auch das Tool ntfs-3g mit und das kann genau wie mount genutzt werden:</p>
<pre>ntfs-3g /dev/sdc1 /media/stick</pre>
<p>Und siehe da: es schreibt!</p>
<p>Vielleicht hilft das dem Einen oder Anderen beim Suchen ja weiter. Für mich dient der kleine Artikel hier auf jeden Fall als Gedächtnisstütze.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/06/mit-debian-5-auf-ntfs-partition-schreiben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh Transistor(in)</title>
		<link>http://www.holger-librenz.de/2009/04/oh-transistorin/</link>
		<comments>http://www.holger-librenz.de/2009/04/oh-transistorin/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 17:25:36 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Kurzgeschichte]]></category>
		<category><![CDATA[lesenswert]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=226</guid>
		<description><![CDATA[Endlich hat sich mal jemand dem Lieben und Leiden eines elementaren Computer-Bestandteiles gewidmet, dem lieben Transistor. Der Autor - seines Zeichens Teilzeitstudent der Informatik - räumt auch endlich mit dem Irrtum auf, das es nur männliche Elemente in unseren Kisten gibt. Denn die, fast schon dramatische, Kurzgeschichte zeigt, das es sehr wahrscheinlich weibliche Elemente ...]]></description>
			<content:encoded><![CDATA[<p>Endlich hat sich mal jemand dem Lieben und Leiden eines elementaren Computer-Bestandteiles gewidmet, dem lieben Transistor. Der Autor &#8211; seines Zeichens Teilzeitstudent der Informatik &#8211; räumt auch endlich mit dem Irrtum auf, das es nur männliche Elemente in unseren Kisten gibt. Denn die, fast schon dramatische, Kurzgeschichte zeigt, das es sehr wahrscheinlich weibliche Elemente sind, diese Transistoren&#8230;<br />
<span id="more-226"></span><br />
Der Autor hat übrigens versprochen das demnächst weitere Geschichte zu finden sein werden. Also lohnt es sich wohl, immer mal wieder auf seine Literaturübersicht zu schauen. Die finden Sie unter <a href="http://www.chrissicool.net/literature/" title="Die Transistorin und weitere Kurzgeschichten von chrissicool" target="_blank">http://www.chrissicool.net/literature/</a>. Und auf genau dieser Seite ist die Kurzgeschichte &#8220;Die Transistorin&#8221; als PDF verlinkt.<br />
Das Beste daran ist übrigens, das die gesamten Werke unter <a href="http://creativecommons.org/licenses/by-nc-nd/3.0/de/" title="Die Creative Commons License auf Deutsch im neuen Fenster lesen">Creative Commons Lizenz</a> stehen &#8211; seine Werke sind also frei verfügbar.</p>
<p>Viel Spass beim Lesen und Inspirieren lassen!</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/04/oh-transistorin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webseitenstatistiken</title>
		<link>http://www.holger-librenz.de/2009/02/webseitenstatistiken/</link>
		<comments>http://www.holger-librenz.de/2009/02/webseitenstatistiken/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 06:46:46 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[Server]]></category>
		<category><![CDATA[Rootserver]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=159</guid>
		<description><![CDATA[Es ist geschafft, die eigene Webseite wurde endlich umgesetzt - das Layout gefällt, die Texte sidnn knackig und interessant, die Suchmaschinen über die neue Topadresse informiert. Aber kommen die Besucher auch in Scharen? Von wo kommen all die wissendurstigen Surfer, die meine Texte begierig lesen? Wie viele Bots, egal ob gut- oder bösartig, graben ...]]></description>
			<content:encoded><![CDATA[<p>Es ist geschafft, die eigene Webseite wurde endlich umgesetzt &#8211; das Layout gefällt, die Texte sidnn knackig und interessant, die Suchmaschinen über die neue Topadresse informiert. Aber kommen die Besucher auch in Scharen? Von wo kommen all die wissendurstigen Surfer, die meine Texte begierig lesen? Wie viele Bots, egal ob gut- oder bösartig, graben sich durch meine Webpräsenz?<br />
All das sind typische Fragen, die sich wohl so gut wie jeder Webseitenbetreiber stellt. Lösungen gibt es dann auch gleich so viele wie Frage: <a href="http://piwik.org" title="Piwik Projektseite im neuen Fenster öffnen" target="_blank">Piwik</a> / <a href="http://www.phpmyvisites.us" title="phpMyVisites Projektseite im neuen Fenster öffnen" target="_blank">phpMyVisites</a>, <a href="http://www.google.com/analytics" title="Google Analytics im neuen Fenster anschauen" target="_blank">Google Analytics</a>,  <a href="http://www.webalizer.org/" title="Webalizer Projektseite im neuen Fenster öffnen" target="_blank">webalizer</a>, <a href="awstats.sourceforge.net" title="awstats Projektseite im neuen Fenster öffnen" target="_blank">awstats</a>&#8230;.<br />
<span id="more-159"></span></p>
<h3>Unterschiede und Gemeinsamkeiten</h3>
<p>Bevor der fleißige Webmaster jetzt zu einem Tool greift sollte er sich darüber im Klaren sein, wie die verschiedenen Helferlein funktionieren. Es gibt hier durchaus gravierende Unterschiede. Es beginnt bei der Überlegung ob die Statistik und vor allem die dafür benötigten Daten auf dem eigenen Server vorgehalten werden oder ob ein Tool zum Einsatz kommt, was als Dienst über das Web verfügbar ist.<br />
Google Analytics ist ein Beispiel für die Haltung der Daten auf einem entfernten Server. Das das nicht ohne rechtliche Probleme einhergeht wird auf <a href="http://www.website-boosting.de/blog/2008-07-10/google_analytics_wird_es_jetzt_rechtlich_eng.html" title="Artikel zu Google Analytics aus Website Boosting im neuen Fenster anzeigen">Website Boosting</a> gut beschrieben.<br />
Die Alternative zu einer rein externen Anwendung ist natürlich das Installieren von Tools wie awstats und piwik auf dem eigenen Server. Diese werten die Daten aber auch wieder verschieden aus. So werten webalizer und awstats die Logdateien des Servers aus, piwik setzt hingegen auf Javascript und das Einbinden von Bildern. Und damit gibt es auch bei diesen Programmen Unterschiede, nämlich die Art und Weise, wie und welche Daten gesammelt werden.<br />
Beim Einbinden von Javascript und externen Bildern sind die Programme vom Client abhängig. Vorteil ist, das gerade bei der Javascript Lösungen sehr granular festgestellt werden kann, was der Nutzer so alles auf der eigenen Seite macht. So genannte Heat-Maps, wie sie unter anderem auf <a href="http://www.webmasterpro.de/coding/article/einfache-heatmap-mit-php-und-javascript.html" title="Webmaster Pro Artikel zum Erstellen von Heat Maps mit PHP und Javascript im neuen Fenster lesen" target="_blank">Webmaster Pro</a> beschrieben werden, können dank Javascript genauso erstellt werden wie eine genauere Auswertung der Ausstattung des Nutzers darüber erstellt werden kann.<br />
Nachteil von Javascript und dem Nachladen von Bilddateien ist jedoch, das der Client es aktiv unterbinden kann. Plugins wie <a href="https://addons.mozilla.org/de/firefox/addon/1865" title="AddOn Seite zu AdBlock Pro im neuen Fenster ansehen" target="_blank">AdBlock Pro</a> für den Firefox, ohne das ich auch nicht mehr online gehe, unterbinden recht zuverlässig solche Trackingversuche.<br />
Was der Client nicht unterbinden kann sind Logeinträge. Diese kann er zwar bis zu einem gewissen Grad beeinflussen, aber Zugriffszahlen bekommen wir darüber recht zuverlässig. Hier setzen Programme wie webalizer und awstats an. Sie analysieren zyklisch die Logdateien des Servers und werten die Daten grafisch aus. Während webalizer einige Zeit nicht weiterentwickelt wurde, scheint 2008 wieder etwas Schwung in die Entwicklung gekommen zu sein, wie die <a href="http://www.webalizer.org/news.html" title="Die Neuigkeiten bei webalizer im neuen Fenster öffnen" target="_blank">&#8220;Whats New&#8221;</a> Seite vermuten lässt. Für meinen Geschmack ist webalizer trotz seiner guten Dienste mittlerweile eher historisch interessant. Aktueller, mehr gepflegt und auch optisch &#8211; wie gesagt, meiner Meinung nach &#8211; ansprechender kommt hier awstats daher. Worin sich die Tools unterscheiden, stellt das awstats Projekt recht übersichtlich auf einer <a href="http://awstats.sourceforge.net/docs/awstats_compare.html" title="Tabellarischer Vergleich von awstats mit anderen Analysetools im neuen Fenster ansehen" target="_blank">eigenen Seite</a> gegenüber.</p>
<h3>Installation von awstats</h3>
<p>Um nun endlich mal etwas praktischer zu werden, schauen wir uns doch einfach mal zusammen an, wie awstats installiert wird. Voraussetzung für das Ausführen von awstats ist das Vorhandensein von Perl in Version 5.00503 oder höher. Außerdem muss der Webserver natürlich das Ausführen von Perl unterstützen, beim Apache reicht hier das Modul mod_perl aus. Unter Debian ist die Installation mit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libapache2-mod-perl2 <span style="color: #c20cb9; font-weight: bold;">perl</span></pre></div></div>

<p>schon erledigt. Wer es gern noch etwas ausführlicher haben möchte, kann noch</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libnet-dns-perl libnet-ip-perl libgeo-ipfree-perl</pre></div></div>

<p>ausführen. Damit werden eventuelle Hostnamen in IPs aufgelöst und das geographische Einordnen der Besucher ist ebenfalls möglich. Beides kann später aber in der eigentlichen awstats Konfiguration konfiguriert werden.<br />
Werfen wir noch einen Blick auf die Apache-Konfiguration. Es gibt ja schon fast Glaubenskriege, wie und wo Logdateien des Häuptlings abgelegt werden sollen. Einige Administratoren wollen ein großes Logfile, wo sie alles an einem Ort haben. Andere Serverhüter wollen die Logs in der relativen Nähe des eigentlichen Document Root vom dazugehörigen virtuellen Host und eine strikte Trennung der Logdateien pro Domain bzw. virtuellem Host.<br />
Ich liege bei dieser Diskussion dazwischen. Ich finde schon, das Logdateien in ein separates Verzeichnis weit außerhalb der Dokumentenwurzel gehören. Aber es muss nicht eine große Datei sein, die ich durchforsten müsste, um an Daten zu kommen. Daher favorisiere ich folgende Struktur: Alle Logfiles sind unter /var/log/apache2 zu finden. Hier gibt es weiterhin 2 grundsätzlich verschiedene Logfiletypen &#8211; Zugriffs- und Fehlerlog. Diese Typen gibt es jeweils einmal pro virtuellem Host. Für den <a href="http://httpd.apache.org/docs/2.2/de/vhosts/name-based.html" title="Beschreibung von namensbasierten virtuellen Hosts mit Apache 2.2 im neuen Fenster lesen" target="_blank">namensbasierten vhost</a>, der zum Beispiel für diese Seite zuständig ist, sieht die Konfiguration so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
  <span style="color: #adadad; font-style: italic;"># .... was auch immer da noch so konfiguriert ist</span>
  <span style="color: #00007f;">ServerName</span> www.holger-librenz.de
  <span style="color: #00007f;">CustomLog</span> /var/log/apache2/access-www.holger-librenz.de.log combined
  <span style="color: #00007f;">ErrorLog</span> /var/log/apache2/error-www.holger-librenz.de.log
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;</pre></div></div>

<p>Das &#8220;combined&#8221; gibt übrigens das Logformat an. Combined ist bei den Debianinstallationen meist schon definiert und loggt die wichtigsten Daten mit. Falls der Apache beim Testen der Konfigration mittels</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">apache2ctl <span style="color: #660033;">-t</span></pre></div></div>

<p>meckern sollte, das er combined nicht kennt, hier die Definition aus der apache2.conf:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">LogFormat <span style="color: #ff0000;">&quot;%h %l %u %t <span style="color: #000099; font-weight: bold;">\&quot;</span>%r<span style="color: #000099; font-weight: bold;">\&quot;</span> %&gt;s %b <span style="color: #000099; font-weight: bold;">\&quot;</span>%{Referer}i<span style="color: #000099; font-weight: bold;">\&quot;</span> <span style="color: #000099; font-weight: bold;">\&quot;</span>%{User-Agent}i<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> combined</pre></div></div>

<p>Warum wir uns das Ganze anschauen? Nun, auf irgendeiner Grundlage muss awstats später die Statistiken ermitteln können. Mit den eben beschriebenen Schritten haben wir ein Access-Log definiert, welches uns schon einmal mehrere Informationen zur Verfügung stellt, mit denen awstats später arbeiten kann.</p>
<p>Nun aber wirklich zu awstats. Für die meisten Distributionen existieren bereits Pakete. Diese Installationsweise hat den Vorteil, das beim routinemäßigen Update des System awstats auch mit aktualisiert wird. Allerdings kommt man bei einigen Distributionen so nicht unbedingt an die aktuellste stabile Version. Gut, <a href="http://en.wikipedia.org/wiki/Bleeding_edge" title="Was das ist, beschreibt das englische Wikipedia in einem neuen Fenster" target="_blank">&#8220;Bleeding Edge&#8221;</a> muss ja nicht immer sein. Aber neben sicherheitskritischen Bugfixes kommen meist auch kleine, aber feine Verbesserungen &#8211; sei es in Form von aktualisierten Clientidentifikatoren (also dem Auswerten des User Agents und der Schlussfolgerung auf den genutzen Browser / Dienst), einer verbesserten Geo-Lokalisierung oder oder oder. Daher habe ich mich entschlossen, awstats manuell zu installieren. Dank der Perl-Implementierung und der recht guten Dokumentation funktioniert das auch recht einfach. So genügt es folgende kleine Liste abzuarbeiten:</p>
<ol>
<li><a href="http://awstats.sourceforge.net/#DOWNLOAD" title="Zum Download-Bereich im neuen Fenster wechseln" target="_blank">Download</a> der aktuellsten Version von awstats<br />
  Beispiel auf der Konsole wäre für die aktuelle Version 6.9:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #ff0000;">&quot;http://prdownloads.sourceforge.net/awstats/awstats-6.9.tar.gz&quot;</span></pre></div></div>

</li>
<li>heruntergeladenes Archiv entpacken, zum Beispiel mit:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> xzf awstats-<span style="color: #000000;">6.9</span>.tar.gz</pre></div></div>

</li>
<li>Das Verzeichnis wwwroot, welches unterhalb des entpackten Verzeichnisses zu finden ist, an eine &#8220;zentrale&#8221; Stelle kopieren. Bei mir landet die Installation meist dort, wo die virtuellen Hosts ihre &#8220;Wurzel&#8221; haben. Dafür muss ich folgenden Kopierbefehl, für die hier beispielhaft genannte Version 6.9, benutzen:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-R</span> awstats-<span style="color: #000000;">6.9</span><span style="color: #000000; font-weight: bold;">/</span>wwwroot <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>awstats</pre></div></div>

<p>    Danach sollte der Inhalt von wwwroot direkt unter /var/www/awstats zu finden sein.
  </li>
<li>Verzeichnis data innerhalb von /var/www/awstats erzeugen. Natürlich nur, wenn awstats gerade das erste Mal installiert wird. Der magische Befehl:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>data</pre></div></div>

</li>
<li>Zugriffsrechte so setzen, das der Webserver die Perlscripte lesen und ausführen kann.</li>
<li>Aus dem Verzeichnis, welches nach dem Entpacken entstanden ist, sollte das tools Verzeichnis noch kopiert werden. Dafür würde ich unter /opt ein Unterverzeichnis awstats erstellen und das tools-Verzeichnis dort hinein kopieren:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>awstats
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-R</span> awstats-<span style="color: #000000;">6.9</span><span style="color: #000000; font-weight: bold;">/</span>tools <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>awstats</pre></div></div>

</li>
</ol>
<p>So, der größte Teil ist nun erledigt. Jetzt werden wir noch einige Aliase beim Apache konfigurieren, damit können wir später einfacher die Konfigurationsdateien pflegen. Dafür einfach folgende Zeilen der apache2.conf (unter Debian, manchmal heißt die Datei auch httpd.conf oder einfach nur apache.conf) hinzufügen:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">    <span style="color: #adadad; font-style: italic;">## awstat aliases</span>
    <span style="color: #00007f;">Alias</span> /awstatsclasses <span style="color: #7f007f;">&quot;/var/www/awstats/classes/&quot;</span>
    <span style="color: #00007f;">Alias</span> /awstatscss <span style="color: #7f007f;">&quot;/var/www/awstats/css/&quot;</span>
    <span style="color: #00007f;">Alias</span> /awstatsicons <span style="color: #7f007f;">&quot;/var/www/awstats/icon/&quot;</span>
    <span style="color: #00007f;">ScriptAlias</span> /awstats <span style="color: #7f007f;">&quot;/var/www/awstats/cgi-bin/&quot;</span>
&nbsp;
    &lt;<span style="color: #000000; font-weight:bold;">Directory</span> <span style="color: #7f007f;">&quot;/var/www/awstats&quot;</span>&gt;
        <span style="color: #00007f;">AddHandler</span> cgi-<span style="color: #00007f;">script</span> .pl
        <span style="color: #00007f;">Options</span> ExecCGI -MultiViews +SymLinksIfOwnerMatch
        <span style="color: #00007f;">AllowOverride</span> <span style="color: #0000ff;">None</span>
        <span style="color: #00007f;">Order</span> <span style="color: #00007f;">allow</span>,<span style="color: #00007f;">deny</span>
        <span style="color: #00007f;">Allow</span> from <span style="color: #0000ff;">all</span>
    &lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;</pre></div></div>

<p>Der zusätzliche &lt;Directory&gt; Eintrag kümmert sich dann noch darum, das die Perlscripte auch ausgeführt werden. Der Zugang wird hier übrigens absichtlich von mir generell erlaubt. Die eigentliche Beschränkung werden wir nämlich später pro Host definieren.<br />
Sollte der Apache Konfigurationstest mittels</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">apache2ctl <span style="color: #660033;">-t</span></pre></div></div>

<p>die Aliase nicht kennen, muss das Apache-Modul mod_alias noch installiert und geladen werden.<br />
Wenn der Konfigurationstest problemlos durchläuft, kann der Häuptling neu gestartet werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</pre></div></div>

<p>Da ich bis jetzt immer mit Servern zu tun hatte, die mehrere unabhängige Domains hosteten, werde ich hier auch nur diesen Fall betrachten. Andere Konfigurationen sind aber recht einfach zu adaptieren.<br />
Weiter oben, in der allgemeinen Apache-Konfiguration, habe ich den Zugriff für alle erlaubt (allow from all). Da Statistiken nicht unbedingt für jedes Auge gedacht sind und die Domains auch nicht unbedingt die gleichen Personen zu interessieren haben, werde ich in den virtuellen Hosts, die ich in separaten Files pflege, eine HTTP Authentifizierung definieren.<br />
Zuerst wollen wir den virtuellen Host anpassen. Die awstats-spezifischen Anpassungen sehen da bei mir immer so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">  &lt;<span style="color: #000000; font-weight:bold;">Location</span> /awstats&gt;
    <span style="color: #00007f;">AuthType</span> Basic
    <span style="color: #00007f;">AuthName</span> <span style="color: #7f007f;">&quot;Statistik-Bereich&quot;</span>
    <span style="color: #00007f;">AuthUserFile</span> /path/to/htpasswd/des/vhosts
&nbsp;
    <span style="color: #00007f;">Require</span> valid-<span style="color: #00007f;">user</span>
  &lt;/<span style="color: #000000; font-weight:bold;">Location</span>&gt;</pre></div></div>

<p>Diese Anweisungen bewirken, das beim Aufruf von /awstats eine Basic Authentifizierung stattfindet. Der Pfad &#8220;/path/to/htpasswd/des/vhosts&#8221; muss jetzt noch angepasst werden. Hier sollte die htpasswd referenziert werden, die für diesen virtuellen Host genutzt werden soll. Bei mir sähe das zum Beispiel so aus: &#8220;/var/www/holger-librenz.de/www/.htpasswd&#8221;.<br />
Diese htpasswd kann mit folgendem Befehl einfach erzeugt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">htpasswd <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>holger-librenz.de<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>.htpasswd hlibrenz</pre></div></div>

<p>Der Befehl legt die neue htpasswd Datei an (das bewirkt das -c im Befehl) und erzeugt einen Nutzer mit dem Namen hlibrenz. Das dazu gehörende Passwort wird danach zweimal abgefragt. Existiert die htpasswd bereits, funktioniert der selbe Befehl ebenso, nur das -c sollten Sie dann weg lassen, denn sonst überschreibt das Programm die gesamte Datei. Htpasswd fügt bei erneuten Aufruf, ohne -c, den Nutzer hinzu oder ändert das Passwort des Nutzers, wenn der angegebene Nutzername bereits existiert.</p>
<p>So, nun muss awstats noch wissen für was es Statistiken erzeugen soll. Dazu werden bei awstats pro Domain, für die es arbeiten soll, eigene Konfigurationsdateien gepflegt. Diese werden in einem bestimmten Verzeichnis gesucht. Dieses ist im Normalfall /etc/awstats. Wenn das Verzeichnis noch nicht existiert, wäre jetzt ein guter Zeitpunkt es zu erstellen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>awstats</pre></div></div>

<p>In dem Verzeichnis, welches aus dem heruntergeladenen Archiv entpackt wurde (im Beispiel hier immer awstats-6.9) , gibt es eine Vorlage für die Konfigurationsdatei. Die Datei heißt &#8220;awstats.model.conf&#8221; und sollte, der Übersichtlichkeit halber, in das eben angelegte Verzeichnis kopiert werden. Nun geht es ans eingemachte. Awstats verbindet die Domain mit der zu lesendenen Konfigurationsdatei mittels des Dateinamens. Dieser setzt sich wie folgt zusammen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">awstats.<span style="color: #000000; font-weight: bold;">&lt;</span>domain<span style="color: #000000; font-weight: bold;">&gt;</span>.conf</pre></div></div>

<p>Der Domainname sollte dabei auch eventuelle Subdomains, also zum Beispiel www oder extranet, beinhalten. Für meine Domain ist folgender Dateiname notwendig:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">awstats.www.holger-librenz.de.conf</pre></div></div>

<p>Bleiben wir doch einfach bei dem Beispiel. Erstellen wir für meine Seite die Konfigurationsdatei aus dem Modell, was uns awstats mitgeliefert hat. Führen dazu im Verzeichnis /etc/awstats folgenden Befehl aus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> awstats.model.conf awstats.www.holger-librenz.de.conf</pre></div></div>

<p>Dann können wir die Datei bearbeiten. Der erste Wert, den ich für mich anpassen muss, ist der Pfad zur Logdatei des Apache. Dazu muss der Wert LogFile berichtigt werden. Für meine Domain und die dahinter liegende Verzeichnisstruktur ergibt sich folgender Wert:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">LogFile</span>=<span style="color: #ff0000;">&quot;/var/log/apache2/access-www.holger-librenz.de.log&quot;</span></pre></div></div>

<p>Die Werte für LogType, LogFormat und LogSeparater können, wenn das &#8220;combined&#8221; Log genutzt wird, einfach so belassen werden. Der nächste Wert, den wir ändern, definiert den Seitennamen. Dafür muss der Wert SiteDomain gesetzt werden. Dieser sollte die Hauptdomain beinhalten. Für mich wäre das also wie folgt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">SiteDomain</span>=<span style="color: #ff0000;">&quot;www.holger-librenz.de&quot;</span></pre></div></div>

<p>Da aber viele Seiten auch Aliasnamen besitzen, kann das natürlich auch awstats mitgeteilt werden. Dafür kann der Wert HostAliases gesetzt werden. Dieser enthält, getrennt durch ein Leerzeichen, die Aliasnamen und kann auch <a href="http://www.devmag.net/webprog/regulaere_ausdruecke.htm" title="DevMag Artikel zu regulären Ausdrücken im neuen Fenster lesen" target="_blank">reguläre Ausdrücke</a> beinhalten. Für meine Domain gibt es momentan &#8220;nur&#8221; die Kombination mit und ohne www. Da es aber ggf. auch andere Subdomains geben kann, setze ich einen regulären Ausdruck der das beschreibt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">HostAliases</span>=<span style="color: #ff0000;">&quot;REGEX[holger-librenz\.de$]&quot;</span></pre></div></div>

<p>Soweit zu den Domain-spezifischen Angaben. Jetzt kommen wir zu den Angaben, die awstats zum Arbeiten benötigt. Diese können aber auch der allgemeinen Performance zuträglich sein. Das zeigt auch der erste Wert. Der Wert DNSLookup legt fest, ob zu den IP Adressen, von welchen die Seite aufgerufen wurde, die Hostnamen ermittelt werden sollen. Das kann entweder ganz deaktiviert, nur aus dem lokalen DNS Cache oder immer geschehen. Schön ist natürlich, wenn wir die Hostnamen angezeigt bekommen. Wenn die eigene Seite allerdings ordentlich frequentiert ist, kann das sehr schnell zu ordentlich spürbaren DNS Abfragen führen. Bis es soweit ist, können wir das komplette Auflösen aktivieren. Ich freue mich aber schon auf den Tag, wo ich den Wert anpassen muss.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">DNSLookup</span>=<span style="color: #000000;">1</span></pre></div></div>

<p>So, jetzt kommen wir zu einigen organisatorischen Werten. Damit awstats weiß, wo es Dateien findet und wo es andere evtl. ablegen soll, wird in der Konfiguration festgehalten, was im Filesystem so für awstats bereit gehalten wird.<br />
Zu allererst legen wir den Ort fest, wo awstats die Datenbanken mit den ermittelten Zugriffszahlen ablegt und findet. Das wird über die Option DirData erledigt. Die Angaben können entweder absolut, also von der Wurzel des Dateisystems aus, oder relativ zur awstats.pl Datei geschehen. Ich habe mich für die relative Angabe entschieden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">DirData</span>=<span style="color: #ff0000;">&quot;../data&quot;</span></pre></div></div>

<p>Diese Einstellung beschreibt nun das data-Verzeichnis, welches wir weiter oben angelegt haben.<br />
Die noch folgenden Werte passen wir einfach mal so an:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">DirCgi</span>=<span style="color: #ff0000;">&quot;/awstats&quot;</span>
<span style="color: #007800;">DirIcons</span>=<span style="color: #ff0000;">&quot;/awstatsicons&quot;</span></pre></div></div>

<p>Hier wird definiert, das die weiter oben definierten Aliase genutzt werden sollen.</p>
<p>Jetzt ist es auch gleich geschafft. Zwei Werte sind noch Pflicht, nämlich das Setzen der Rechte auf das Aktualisieren der Datenbank über das Web und den Zugriff auf die Jahresstatistik via Kommandozeile und via Web.<br />
Das erste Recht, also ob die Datenbank über das Web aktualisiert werden darf, unterdrücken wir mit folgendem Wert:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">AllowToUpdateStatsFromBrowser</span>=<span style="color: #000000;">0</span></pre></div></div>

<p>Damit kann uns der Nutzer nicht den Tag vermiesen, in dem er bei stark frequentierten Seiten immer wieder auf &#8220;Neu generieren&#8221; klickt und damit den Server beschäftigt. Das Aktualisieren werden wir völlig automatisiert über Cronjobs erledigen. Wenn Sie allerdings keine Cronjobs zur Verfügung haben, sollten Sie den Wert auf 1 setzen oder einmal einen Blick auf <a href="http://www.cron-job.org" title="cron-job.org im neuen Fenster öffnen" target="_blank">cron-job.org</a> werfen.<br />
Das zweite Recht, nämlich das Auswerten für ein gesamtes Kalenderjahr, können wir mit folgendem Wert sowohl für die Kommandozeile (CLI) als auch für das Web (CGI) erlauben:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">AllowFullYearView</span>=<span style="color: #000000;">3</span></pre></div></div>

<p>Es gibt noch einige weitere Einstellungsmöglichkeiten. Diese sind aber auch in der gut kommentierten Konfigurationsdatei als &#8220;optional&#8221; gekennzeichnet. Einzig eine Option möchte ich noch kurz vorstellen. Und zwar soll das Aufrufen der Statistiken nur für angemeldete Nutzer möglich sein. Den Status &#8220;angemeldet&#8221; hat ein Nutzer, der erfolgreich eine HTTP Authentifizierung hinter sich gebracht hat. Um awstats dazu zu bringen, das es nur berechtigten Usern seine Wahrheiten offenbart, setzen wir einfach AllowAccessFromWebToAuthenticatedUsersOnly auf 1:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">AllowAccessFromWebToAuthenticatedUsersOnly</span>=<span style="color: #000000;">1</span></pre></div></div>

<p>So. Nun ist auch awstats konfiguriert. Natürlich gibt es da noch verschiedene weitere Schräubchen, die das Verhalten verändern / verbessern, aber für die ersten Aufrufe sind wir nun gewappnet. Ob auch wirklich alles geklappt hat werden wir jetzt sehen. Wir rufen jetzt nämlich das erste Mal awstats auf:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>tools<span style="color: #000000; font-weight: bold;">/</span>awstats_updateall.pl now <span style="color: #660033;">-awstatsprog</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span>awstats.pl</pre></div></div>

<p>Sollten Probleme in der Konfiguration oder bei den Dateirechten bestehen, sollte das in den Ausgaben zu sehen sein.</p>
<p>Ok, wäre das auch erledigt. Jetzt legen wir noch einen Cronjob an. Dafür habe ich eine kleines Shellscript geschrieben:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #007800;">CUR_DIR</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">pwd</span><span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>cgi-bin
&nbsp;
<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>tools<span style="color: #000000; font-weight: bold;">/</span>awstats_updateall.pl now <span style="color: #660033;">-awstatsprog</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span>awstats.pl <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$CUR_DIR</span></pre></div></div>

<p>Das Skript habe ich in /opt/awstats/cron/update-all.sh gespeichert. Das Unterverzeichnis cron muss natürlich vorher angelegt und das Skript ausführbar gemacht werden.<br />
Dieses Skript rufe ich dann über den Cron 2 mal in der Stunde auf und zwar immer zur vollen und zur halben Stunde. Dafür steht in der neuen Dateien /etc/cron.d/awstats:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">##</span>
<span style="color: #666666; font-style: italic;">## updates all awstats statitistics</span>
<span style="color: #666666; font-style: italic;">##</span>
<span style="color: #000000;">0</span>,<span style="color: #000000;">30</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> root <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>cron<span style="color: #000000; font-weight: bold;">/</span>update-all.sh</pre></div></div>

<p>Ok. Jetzt kann es los gehen. Rufen Sie Ihre awstats Installation mal über den Webbrowser auf. Zu finden ist es unter http://&lt;ihre.konfigurierte.domain&gt;/awstats/awstats.pl.</p>
<h3>Gehts nicht noch schöner?</h3>
<p>Im Gegensatz zu webalizer ist die awstats Oberfläche schon sehr ansehnlich und übersichtlich geworden. Wer es aber noch einen Tick &#8220;schicker&#8221; will, sollte sich das noch rechte junge Projekt <a href="http://www.jawstats.com" title="jawstats Homepage in neuem Fenster öffnen" target="_blank">jawstats</a> ansehen. Das Projekt nutzt PHP, Javascript und Flash um die statistischen Werte von awstats zu visualisieren und als kleines Schmankerl ist die Oberfläche von jawstats über Templates anpassbar.</p>
<p>Wo Licht ist, fällt aber auch bekanntlich Schatten. So möchte ich nicht unerwähnt lassen, dass das Projekt noch in der frühen Entwicklungsphase steckt. Die Konfiguration ist leider noch nicht wirklich &#8220;massentauglich&#8221; und die eine oder andere Einstellung und Programmierung sollte noch angepasst werden. Aber ich bin mir sicher, das bei reger Beteiligung und Rückmeldung von Nutzern jawstats einen festen Platz finden wird.</p>
<p>Installieren lässt es sich wirklich, wie auf der Webseite auch angepriesen, simpel. Sie brauchen lediglich einen Webserver und PHP. Sind die Voraussetzungen erfüllt, können Sie das Paket <a href="http://www.jawstats.com/download" title="Zum Downloadbereich im neuen Fenster wechseln" target="_blank">herunterladen</a>. Entpacken Sie den Inhalt in ein Verzeichnis, was für den Webserver erreichbar ist:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> czf jawstats-<span style="color: #000000; font-weight: bold;">&lt;</span>version<span style="color: #000000; font-weight: bold;">&gt;</span>.tar.gz <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">&lt;</span>Zielverzeichnis<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Dann kopieren Sie die Datei config.dist.php und benennen die neue Datei config.php:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> config.dist.php config.php</pre></div></div>

<p>Ist auch diese Aufgabe gemeistert, geht es ans Editieren der eben erstellten Konfigurationsdatei. Wir die Dateiendung bereits vermuten lässt, handelt es sich bei der Datei um ein PHP Skript. Um zum Beispiel die Daten für holger-librenz.de ein wenig aufzuwerten, muss der Inhalt wie folgt aussehen:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

  // core config parameters
  $sDefaultLanguage      = &quot;de-DE&quot;;
  $sConfigDefaultView    = &quot;thismonth.all&quot;;
  $bConfigChangeSites    = true;
  $bConfigUpdateSites    = true;
  $sUpdateSiteFilename   = &quot;xml_update.php&quot;;

  // individual site configuration
  $aConfig[&quot;holger-librenz.de&quot;] = array(
    &quot;statspath&quot;   =&gt; &quot;/var/www/awstats/data/&quot;,
    &quot;updatepath&quot;  =&gt; &quot;/var/www/awstats/cgi-bin/awstats.pl&quot;,
    &quot;siteurl&quot;     =&gt; &quot;http://www.holger-librenz.de&quot;,
    &quot;sitename&quot;    =&gt; &quot;&quot;,
    &quot;theme&quot;       =&gt; &quot;default&quot;,
    &quot;fadespeed&quot;   =&gt; 250,
    &quot;password&quot;    =&gt; &quot;very secret password&quot;,
    &quot;includes&quot;    =&gt; &quot;&quot;,
    &quot;language&quot;    =&gt; &quot;de-DE&quot;
  );
</pre>
<p>Die ersten Variablen (unter &#8220;core config parameters&#8221;) geben Standardwerte an. Hier lege ich fest, das ich gern Deutsch als Standardsprache, die Monatsübersicht bei Start sehen möchte und das ein Aktualisieren und evtl. Seitenwechseln möglich ist.</p>
<p>Danach folgt die eigentliche Konfiguration der Seite. Der Array-Feldschlüssel &#8220;holger-librenz.de&#8221; (Zeile 11) wird für die Anzeige genutzt. Die enthaltenen Werte im Array bedeuten folgendes:</p>
<dl>
<dt>statspath</dt>
<dd>Der absolute Pfad zu den Daten.</dd>
<dt>updatepath</dt>
<dd>Der absolute Pfad zur awstats.pl Datei</dd>
<dt>siteurl</dt>
<dd>Das ist die Domain, die als Hauptdomain bei awstats in der Konfiguration genutzt wurde und wonach auch die awstats-Konfigurationsdatei benannt wurde.</dd>
<dt>sitename</dt>
<dd>Ein beschreibender Titel für die URL</dd>
<dt>theme</dt>
<dd>Hier kann der gewünschte Theme, also das Aussehen, bestimmt werden. Mit ausgeliefert wird der &#8220;default&#8221; Theme.</dd>
<dt>fadespeed</dt>
<dd>Beeinflusst die Geschwindigkeit, in der Grafiken (visuell) in neue Zustände versetzt werden.</dd>
<dt>password</dt>
<dd>Passwort, welches für das Aktualisieren der Werte auf Knopfdruck benötigt wird.</dd>
<dt>includes</dt>
<dd>Diese Option bietet die Möglichkeit, zusätzliche PHP Dateien einzubinden. Die Dateien werden als kommaseparierte Liste ohne Freizeichen erwartet.</dd>
<dt>language</dt>
<dd>Die Sprache, die standardmäßig für die Auswertung dieser Domain genutzt werden soll.</dd>
</dl>
<p>Leider existiert noch keine ausführliche Dokumentation, aber zumindest die Webseite verspricht hier Nachbesserung. Mit den wenigen Schritten, die Sie bis jetzt befolgt haben, können Sie aber schon einmal einen ersten Eindruck erhalten. </p>
<p>Jetzt erhalten wir Antworten auf die oben genannten Fragen. Wie Sie die einzelnen Werte richtig lesen und was es noch an Möglichkeiten gibt awstats zu nutzen erfahren Sie in der <a href="http://awstats.sourceforge.net/docs/index.html" title="englische awstats Dokumentation im neuen Fenster öffnen" target="_blank">Dokumentation</a> des Projektes.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/02/webseitenstatistiken/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>phpmailer und der Return-Path</title>
		<link>http://www.holger-librenz.de/2009/02/phpmailer-und-der-return-path/</link>
		<comments>http://www.holger-librenz.de/2009/02/phpmailer-und-der-return-path/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 19:55:33 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[phpmailer]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=166</guid>
		<description><![CDATA[Oh je, da habe ich mal wieder eine kleine, aber sehr nervende Kleinigkeit gefunden. Für ein Kundenprojekt sollte ich explizit den E-Mail-Header "Return-Path" setzen. Was E-Mail-Header sind erklärt unter anderem der Beitrag im Datenschutz-Blog recht schön. Und was es mit dem Return-Path auf sich hat, beschreibt zum Beispiel der FAQ Eintrag "E-Mail-Header lesen und ...]]></description>
			<content:encoded><![CDATA[<p>Oh je, da habe ich mal wieder eine kleine, aber sehr nervende Kleinigkeit gefunden. Für ein Kundenprojekt sollte ich explizit den E-Mail-Header &#8220;Return-Path&#8221; setzen. Was E-Mail-Header sind erklärt unter anderem der <a href="http://www.datenschutzbeauftragter-online.de/mail-spam-und-mail-header/" title="Beitrag im Datenschutz-Blog im neuen Fenster lesen" target="_blank">Beitrag im Datenschutz-Blog</a> recht schön. Und was es mit dem Return-Path auf sich hat, beschreibt zum Beispiel der FAQ Eintrag <a href="http://www.th-h.de/faq/headerfaq.php#received" title="Artikel im neuen Fenster öffnen" target="_blank">&#8220;E-Mail-Header lesen und verstehen&#8221;</a> von Thomas Hochstein.<br />
<span id="more-166"></span><br />
Aber zurück zum eigentlichen &#8220;Return-Path-Setzen-Problem&#8221;. Eigentlich ist alles ganz einfach. Je nachdem, welche Art des Mailversandes gewählt wird, wird einfach der Header dem zuständigen Programmteil übergeben. Das funktioniert für den eigentlichen Absender und Empfänger genauso wie für speziell vom Programm verwendete &#8220;X-&#8221;-Header.<br />
So auch beim OXID eShop. Bei diesem Shopsystem wird das weit verbreitete, von mir auch sonst gern verwendete Script <a href="http://phpmailer.codeworxtech.com" title="Codeworx Technologies, das Heim des phpmailer, im neuen Fenster besuchen" target="_blank">phpmailer</a> genutzt.</p>
<p>Der phpmailer ist objektorientiert entwickelt und es existieren verschiedene Methoden zum Setzen von Headern. So gibt es u.a. die Methoden phpmailer::HeaderLine() und phpmailer::CustomHeader(). Beide wollten aber nicht den Return-Path setzen. Also habe ich etwas weiter Google geknechtet. Dort gibt es genügend Informationen, wie ich mit PHP und der <a href="http://php.net/mail" title="Beschreibung zur Funktion mail() im neuen Fenster ansehen" target="_blank">mail()</a> Funktion den Header setzen können soll. Aber das brachte mir nichts. Also habe ich weiter gesucht. Und siehe da, ich kann mit den genannten Methoden durchaus Header setzen, aber der Return-Path wird vom phpmailer immer wieder überschrieben. Und zwar überschreibt der phpmailer den Header mit dem eigentlichen Absender. Es ist jedoch trotz allem möglich, den Header zu setzen. Die magische Zeile Code muss allerdings wie folgt aussehen:</p>
<pre class="brush: php; title: ; notranslate">
/*
  vorher muss natuerlich phpmailer instanziiert werden,
  bei mir ist die Referenz in $oMail gespeichert
*/
$oMail-&gt;Sender = &quot;mein@return-pa.th&quot;;
</pre>
<p>Sobald die Eigenschaft gesetzt ist, funktioniert die Sache mit dem Return-Path reibungslos. Manchmal können Dinge so einfach sein&#8230;.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/02/phpmailer-und-der-return-path/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dürfen es ein wenig mehr MySQL Userrechte sein?</title>
		<link>http://www.holger-librenz.de/2009/02/durfen-es-ein-wenig-mehr-mysql-userrechte-sein/</link>
		<comments>http://www.holger-librenz.de/2009/02/durfen-es-ein-wenig-mehr-mysql-userrechte-sein/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 06:43:44 +0000</pubDate>
		<dc:creator>Holger Steinhauer</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Rechte]]></category>
		<category><![CDATA[Tricks & Tipps]]></category>

		<guid isPermaLink="false">http://www.holger-librenz.de/?p=145</guid>
		<description><![CDATA[Gestern ist es mir wieder passiert. Ich wollte eigentlich "mal schnell" einen neuen Datenbanknutzer meinem MySQL Server hinzufügen. Da ich noch nicht weiß, ob ich eventuell für das gleiche Projekt noch ein paar andere Datenbanken brauche, wollte ich jedoch, das der neue Nutzer gleich Rechte auf mehrere Datenbanken hat. In diesem Fall habe ich ...]]></description>
			<content:encoded><![CDATA[<p>Gestern ist es mir wieder passiert. Ich wollte eigentlich &#8220;mal schnell&#8221; einen neuen Datenbanknutzer meinem MySQL Server hinzufügen. Da ich noch nicht weiß, ob ich eventuell für das gleiche Projekt noch ein paar andere Datenbanken brauche, wollte ich jedoch, das der neue Nutzer gleich Rechte auf mehrere Datenbanken hat. In diesem Fall habe ich zwar schon großzügige Anwandlungen, das Vertrauen sollte aber nicht zu weit gehen und es soll die Einschränkung gelten, das nur Datenbanken mit einem bestimmten Präfix unter die Macht des neuen Nutzers fallen.<br />
<span id="more-145"></span><br />
Klingt ja soweit noch verständlich &#8211; also zumindest für mich. MySQL bringt auch entsprechende Bordmittel mit &#8211; beim GRANT Statement hat nämlich das %-Zeichen eine Sonderstellung. Es wird, genauso wie bei LIKE in WHERE Bedingungen, als <a href="http://de.wikipedia.org/wiki/Wildcard_(Informatik)" title="Was Wildcards sind beschreibt Wikipedia in einem neuen Fenster" target="_blank">Wildcard</a> angesehen. Das verwirrt ein wenig, ist doch der Platzhalter für &#8220;alle Tabellen in der Datenbank&#8221; ein Asterisk (*). </p>
<p>Was mir jetzt wirklich passiert ist? Nun, die genaue Syntax war mir mal wieder entfallen. Ich wußte, das ich einen Nutzer &#8220;wewiki&#8221; anlegen will und das dieser Datenbanknutzer auf alle Datenbanken mit dem Präfix &#8220;wewiki_&#8221; Zugriff haben und diese auch erstellen können soll. Natürlich soll &#8220;wewiki&#8221; auch auf alle enthaltenen Tabellen zugreifen können. Ein Verbinden soll aber nur vom lokalen Rechner erfolgen können.<br />
Würde es sich um eine Datenbank handeln wäre das GRANT Statement schnell zur Hand:</p>
<pre class="brush: sql; title: ; notranslate">
GRANT ALL ON wewiki_wiki.* TO wewiki@localhost IDENTIFIED BY 'very secret password';
</pre>
<p>Dann hätte der Nutzer &#8220;wewiki&#8221; jedoch nur Rechte auf die Datenbank &#8220;wewiki_wiki&#8221;. Da ich nun zu den fauleren Administratoren gehöre, wenn es um Datenbanknutzer geht, ist mir der daraus resultierende Aufwand, für jede neue Datenbank dem Nutzer dediziert Rechte zu geben, irgendwie zu hoch. Den Platzhalter % kann man aber nicht einfach so notieren. Und genau das ist mir wieder entfallen. Wie, verdammt noch mal, war denn die Syntax?! Nun, für jeden, der sich diese Frage auch stellt, hier die Antwort:</p>
<pre class="brush: sql; title: ; notranslate">
GRANT ALL ON `wewiki_%`.* TO wewiki@localhost IDENTIFIED BY 'a much more secret password';
</pre>
<p>Die Backticks (`) sind das kleine Details, was mein Administratorherz höher schlagen lässt. Denn nach diesem SQL Befehl hat der Nutzer &#8220;wewiki&#8221; Rechte auf alle Datenbanken, die mit &#8220;wewiki_&#8221; beginnen &#8211; also genau das, was ich haben wollte.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.holger-librenz.de/2009/02/durfen-es-ein-wenig-mehr-mysql-userrechte-sein/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

