<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[Neueste Artikel]]></title>
    <link>http://www.cschramm.net/de/linux/feed/rss.xml</link>
    <description><![CDATA[Die neuesten Artikel www.cschramm.net]]></description>
    <pubDate>Sat, 04 Feb 2012 21:11:05 +0100</pubDate>
    <lastBuildDate>Wed, 21 Sep 2011 09:13:51 +0200</lastBuildDate>
    <managingEditor>info@cschramm.net (Christian Schramm)</managingEditor>
    <webMaster>support@cschramm.net</webMaster>
    <generator>Zend_Feed</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Einen eigenen Debian-Mirror mit apt-mirror erstellen]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/einen-eigenen-debian-mirror-mit-apt-mirror-erstellen.html</link>
      <guid isPermaLink="false">78</guid>
      <description><![CDATA[Hier möchte ich zeigen, wie man in einigen wenigen Schritten einen eigenen Debian-Mirror aufbauen kann. Das kann z.B. sinnvoll sein, um Traffic zu reduzieren und Updates von einem internen Server zu installieren ......]]></description>
      <content:encoded><![CDATA[apt-mirror,mirror.list,apt,debian,ubuntu,deb,deb-amd64,debi386<br/><div>
	Hier m&ouml;chte ich zeigen, wie man in einigen wenigen Schritten einen eigenen Debian-Mirror aufbauen kann.</div>
<div>
	Das kann z.B. sinnvoll sein, um Traffic zu reduzieren und Updates von einem internen Server zu installieren, statt die Updates pro Server von einem externen FTP-Server herunter zu laden.</div>
<div>
	&nbsp;</div>
<div>
	Das hierf&uuml;r ben&ouml;tigte Paket installiert man mit:</div>
<div>
	<pre class="brush:plain;">apt-get install apt-mirror</pre>
</div>
<div>
	Jetzt sollte man die Datei /etc/apt/mirror.list bearbeiten, ein Bsp.:</div>
<div>
	<pre class="brush:plain;">set base_path    /var/spool/apt-mirror
set mirror_path  $base_path/mirror
set skel_path      $base_path/skel
set var_path       $base_path/var
set cleanscript    $var_path/clean.sh
set defaultarch   i386
set nthreads       20
set _tilde             0

deb-amd64 http://ftp2.de.debian.org/debian lenny main contrib
deb-amd64 http://ftp2.de.debian.org/debian lenny main main/debian-installer

deb http://ftp2.de.debian.org/debian lenny main contrib
deb http://ftp2.de.debian.org/debian lenny main main/debian-installer</pre>
</div>
<div>
	ftp2.de.debian.org ist nat&uuml;rlich nur ein Bsp., eine Liste der aktuellen Mirrors findet man <a href="http://www.debian.org/mirror/list" target="_blank">hier</a>.</div>
<div>
	&nbsp;</div>
<div>
	Die Pfade entsprechen der Standard-Debian-Installation, k&ouml;nnen aber bei Bedarf entspr. ge&auml;ndert werden.</div>
<div>
	Standardm&auml;&szlig;ig werden sich die Dateien sp&auml;ter in <strong>/var/spool/apt-mirror</strong> befinden.</div>
<div>
	Die Performance kann man noch mit der Direktive <strong>set nthreads</strong> beeinflussen. Hier legt man fest, wie viele gleichzeitige Download-Prozesse apt-mirror zum&nbsp;Synchronisieren des Repository&#39;s starten darf.</div>
<div>
	&nbsp;</div>
<div>
	In meiner Beispieldatei habe ich i386 als <strong>Standard-Architektur</strong> eingetragen, d.h. <strong>deb und deb-i386</strong> w&auml;ren f&uuml;r die u.a. Zeilen gleichwertig. F&uuml;r den Download der 64-Bit-Dateien leitet man die Zeilen mit <strong>deb-amd64</strong> ein.</div>
<div>
	&nbsp;</div>
<div>
	Nachdem alle &Auml;nderungen abgeschlossen sind, startet man den Download der Dateien mit <em><strong>apt-mirror</strong></em>.</div>
<div>
	Es empfiehlt sich, daf&uuml;r einen Cron-Job anzulegen, der das Repository t&auml;glich aktualisiert und mit den neuesten Updates versorgt.</div>
<div>
	&nbsp;</div>
<div>
	Damit das Repository auch erreichbar ist, ist der einfachste Weg, einen Webserver zu installieren:</div>
<div>
	<pre class="brush:plain;">apt-get install apache2 apache2-mpm-prefork</pre>
</div>
<div>
	Jetzt legt man einen Link im Webserver-Root an, z.B.:</div>
<div>
	<pre class="brush:plain;">cd /var/www &amp;&amp; ln -s /var/spool/apt-mirror/ftp2.de.debian.org/debian debian</pre>
</div>
<div>
	Die Datei <strong>/etc/sites-available/default</strong> habe ich hier stark vereinfacht und mu&szlig; ggf. an die eigenen&nbsp;Sicherheitsanforderungen angepasst werden:</div>
<div>
	<pre class="brush:plain;">&lt;VirtualHost *:80&gt;
        DocumentRoot /var/www/
        &lt;Directory /&gt;
                Options Indexes FollowSymLinks MultiViews
                AllowOverride none
        &lt;/Directory&gt;
        &lt;Directory /var/www/&gt;
                Options Indexes FollowSymLinks MultiViews
                AllowOverride none
        &lt;/Directory&gt;
    LogLevel warn
    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined
&lt;/VirtualHost&gt;</pre>
</div>
<div>
	Nach einen <strong>/etc/init.d/apache2 restart</strong> sollte der Zugriff auf das Repository &uuml;ber einen Browser funktionieren.</div>
<div>
	Je nach Anzahl der Server und der Performance des Mirror-Servers sollte man dann noch die Datei <strong>/etc/apache2/apache2.conf</strong> anpassen, indem man die Werte z.B. in der prefork-Sektion (StartServers, MinSpareServers, MaxSpareServers,MaxClients,...) entspr. erh&ouml;ht. Diese sind standardm&auml;&szlig;ig sehr niedrig eingestellt. Damit die &Auml;nderungen wirksam werden, mu&szlig; man den Webserver neu starten.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt mu&szlig; man das Repository nur noch auf den Clients in der /etc/apt/sources.list eigetragen werden, z.B.:</div>
<div>
	<pre class="brush:plain;">deb http://192.168.1.254/debian lenny main contrib</pre>
</div>
<div>
	Zu Anschauungszwecken habe ich hier eine IP genommen, es empfiehlt sich aber ein <strong>Hostname</strong>.</div>
<div>
	&nbsp;</div>
<div>
	Nach dem &Auml;ndern der Datei sollte ein <strong>apt-get update</strong> die Liste der Updates von dem neuen Mirror herunterladen!</div>
]]></content:encoded>
      <pubDate>Sun, 11 Jul 2010 18:55:55 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Server überwachen mit Munin (Debian Lenny)]]></title>
      <link>http://www.cschramm.net/de/linux/monitoring/server-ueberwachen-mit-munin-debian-lenny.html</link>
      <guid isPermaLink="false">77</guid>
      <description><![CDATA[In diesem Tutorial möchte ich kurz zeigen, wie man Munin in wenigen Schritten installieren kann. Munin erstellt Graphiken zu zahlreichen Diensten, z.B. Apache, MySQL, Mail, etc. und kann einen Überblick über die aktuelle System-Last bieten....]]></description>
      <content:encoded><![CDATA[munin,munin-node,debian,lenny,monitoring,graph<br/><div>
	In diesem Tutorial m&ouml;chte ich kurz zeigen, wie man Munin in wenigen Schritten installieren kann. Munin erstellt Graphiken zu zahlreichen Diensten, z.B. Apache, MySQL, Mail, etc. und kann einen &Uuml;berblick &uuml;ber die aktuelle System-Last bieten.</div>
<div>
	&nbsp;</div>
<div>
	Auf dem Server installieren wir den Munin Server und den Client:</div>
<div>
	<pre class="brush:plain;">apt-get install munin munin-node</pre>
</div>
<div>
	Die Datei <em><strong>/etc/munin/munin-node.conf</strong></em> mu&szlig; f&uuml;r den localhost nicht ge&auml;ndert werden.</div>
<div>
	<pre class="brush:plain;">allow ^127.0.0.1$</pre>
</div>
<div>
	Installiert man munin-node sp&auml;ter auf weiteren Servern, mu&szlig; die Zeile</div>
<div>
	<pre class="brush:plain;">allow ^123.123.123.1$</pre>
</div>
<div>
	am Ende der Datei hinzugef&uuml;gt werden,wobei die IP-Adresse durch die des Servers ersetzt werden mu&szlig;.</div>
<div>
	&nbsp;</div>
<div>
	<strong>Punkte m&uuml;ssen mit einem Backslash maskiert werden.</strong></div>
<div>
	&nbsp;</div>
<div>
	D.h. m&ouml;chte man sp&auml;ter weitere Clients hinzuf&uuml;gen gen&uuml;gt ein einfaches</div>
<div>
	<pre class="brush:plain;">apt-get install munin-node</pre>
</div>
<div>
	und das Hinzuf&uuml;gen oder o.a. allow-Zeile.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Jetzt mu&szlig; noch der Server fertig eingerichtet werden. Die daf&uuml;r zu editierende Datei <em><strong>/etc/munin/munin.conf</strong></em> sollte so aussehen:</div>
<div>
	<pre class="brush:plain;">dbdir   /var/lib/munin
htmldir /var/www/munin
logdir  /var/log/munin
rundir  /var/run/munin
tmpldir /etc/munin/templates

[Administration;munin]
    address 127.0.0.1
    use_node_name yes

[Administration;syslog]
    address 192.168.1.250
    use_node_name yes

[Webserver;server1]
    address 192.168.1.11
    use_node_name yes</pre>
</div>
<div>
	&nbsp;</div>
<div>
	Die Verzeichnisse sind ggf. anzupassen. In diesem Bsp. befinden sich die fertigen Munin-Graphiken sp&auml;ter in /var/www/munin.</div>
<div>
	&nbsp;</div>
<div>
	In diesem Beispiel habe ich 3 Hosts hinzugef&uuml;gt.</div>
<div>
	In Munin ist es m&ouml;glich, Hosts in Gruppen einzuteilen. Das erreicht man durch Voranstellen des Gruppennamens, gefolgt von einem Semikolon. Ich habe in diesem Beispiel die beiden Gruppen Administration und Webserver angelegt.</div>
<div>
	Das Gruppieren der Server ist nicht zwingend erforderlich,aber es kann je nach Anzahl der Server recht praktisch sein.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt sollte man noch sicher gehen, dass der web root - in diesem Fall <em><strong>/var/www/munin</strong></em> existiert und die richtigen Berechtigungen hat:</div>
<div>
	<pre class="brush:plain;">mkdir -p /var/www/munin
chown -R munin:munin /var/www/munin</pre>
	<p>
		Nach &Auml;nderungen an den&nbsp;Dateien sollte man den Dienst neu starten:</p>
	<pre class="brush:plain;">/etc/init.d/munin-node restart</pre>
	Nach einigen Minuten sollte Munin die ersten Graphiken und die passenden HTML-Dateien generiert haben, die man z.B. &uuml;ber eine Apache-Installation aufrufen kann.</div>
<div>
	&nbsp;</div>
<div>
	Ein paar Beispiele:</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/77/munin-example1-mysql_bytes-day.jpg" style="width: 495px; height: 271px;" /></div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/77/munin-example2-load-week.jpg" style="width: 495px; height: 271px;" /></div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/77/munin-example3-memory-day.jpg" style="width: 495px; height: 415px;" /></div>
]]></content:encoded>
      <pubDate>Tue, 29 Jun 2010 11:18:29 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Dateien und Verzeichnisse überwachen mit incron]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/dateien-und-verzeichnisse-ueberwachen-mit-incron.html</link>
      <guid isPermaLink="false">76</guid>
      <description><![CDATA[Der Dienst incron funktioniert nach einem ähnlichen Prinzip wie der cron-Daemon, allerdings kann man incron dazu verwenden, Dateien oder Verzeichnisse zu überwachen und bei bestimmten Ereignissen eine Aktion auszuführen....]]></description>
      <content:encoded><![CDATA[incron,datei,verzeichnis,änderung,überwachten,incrontab,allow,deny<br/><div>
	Der Dienst <u><strong>incron</strong></u> funktioniert nach einem &auml;hnlichen Prinzip wie der cron-Daemon, allerdings kann man incron dazu verwenden, Dateien oder Verzeichnisse zu &uuml;berwachen und bei bestimmten Ereignissen eine Aktion auszuf&uuml;hren.</div>
<div>
	&nbsp;</div>
<div>
	<strong><u>Ein praktisches Beispiel:</u></strong></div>
<div>
	Man m&ouml;chte, dass der Webserver automatisch neu gestartet wird, sobald sich eine der Konfigurationsdateien in /etc/apache2/ &auml;ndert.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<strong><u>Zun&auml;chst zur Installation:</u></strong></div>
<div>
	&nbsp;</div>
<div>
	Auf Debian oder Ubuntu erledigt man die Installation ganz einfach mit:</div>
<div>
	<pre class="brush:plain;">apt-get install incron</pre>
</div>
<div>
	Auf Fedora, CentOS oder RedHat:</div>
<div>
	<pre class="brush:plain;">yum install incron</pre>
</div>
<div>
	(jeweils als root)</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Berechtigungen:</strong></u></div>
<div>
	&nbsp;</div>
<div>
	Standardm&auml;&szlig;ig darf bei einer Debian-Installation kein Benutzer incron benutzen. Die Berechtigungen werden &uuml;ber die beiden Dateien</div>
<div>
	<strong>/etc/incron.allow<br />
	</strong></div>
<div>
	<strong>/etc/incron.deny<br />
	</strong></div>
<div>
	gesteuert.</div>
<div>
	&nbsp;</div>
<div>
	&Auml;hnlich wie bei cron (crontab) gibt es hier den Befehl <strong>incrontab</strong>.</div>
<div>
	<em><strong>incrontab -l</strong></em> listet die aktuellen Eintr&auml;ge auf</div>
<div>
	<em><strong>incrontab -e</strong></em> erm&ouml;glicht das Bearbeiten der Eintr&auml;ge</div>
<div>
	&nbsp;</div>
<div>
	Steht der Benutzer, der den Befehl ausf&uuml;hrt nicht in der Datei /etc/incron.allow, f&uuml;hren diese zu einer Fehlermeldung.</div>
<div>
	M&ouml;chte man z.B. dass der&nbsp;Benutzer root incron benutzen darf, tr&auml;gt man einfach nur den Benutzernamen in die Datei /etc/incron.allow ein.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Incrontab aktualisieren:</strong></u></div>
<div>
	&nbsp;</div>
<div>
	Mit incrontab -e kann man jetzt die entspr. Dateien/Verzeichnisse und die dazugh&ouml;rigen Events und Aktionen eintragen.</div>
<div>
	&nbsp;</div>
<div>
	Ich nehme hier das praktische Bsp. (siehe oben):</div>
<div>
	<pre class="brush:plain;">/etc/apache2/ IN_CLOSE_WRITE /etc/init.d/apache2 reload</pre>
</div>
<div>
	Es k&ouml;nnen Verzeichnisse und Dateien gleicherma&szlig;en eingetragen werden.</div>
<div>
	Die Eintr&auml;ge sind immer in der Form: <strong>Datei/Verzeichnis Event Befehl</strong><datei pfad=""><event><befehl></befehl></event></datei></div>
<div>
	&nbsp;</div>
<div>
	D.h. in diesem Bsp. wird der Webserver neu gestartet, sobald eine Datei im Verzeichnis /etc/apache2/ gespeichert wird.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Die Events:</strong></u></div>
<div>
	&nbsp;</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				IN_ACCESS</td>
			<td>
				Wenn die datei gelesen wird</td>
		</tr>
		<tr>
			<td>
				IN_ATTRIB</td>
			<td>
				Wenn Berechtigungen oder andere Attribute der Datei ge&auml;ndert werden</td>
		</tr>
		<tr>
			<td>
				IN_CLOSE_WRITE</td>
			<td>
				Wenn die Datei zum Schreiben ge&ouml;ffnet war und geschlossen wird</td>
		</tr>
		<tr>
			<td>
				IN_CLOSE_NOWRITE</td>
			<td>
				Wenn die Datei zum Lesen ge&ouml;ffnet war und geschlossen wird</td>
		</tr>
		<tr>
			<td>
				IN_CREATE</td>
			<td>
				Wenn eine Datei im beobachteten Verzeichnis erstellt wird</td>
		</tr>
		<tr>
			<td>
				IN_DELETE</td>
			<td>
				Wenn eine Datei im beobachteten Verzeichnis gel&ouml;scht wird</td>
		</tr>
		<tr>
			<td>
				IN_DELETE_SELF</td>
			<td>
				Wenn das beobachtete Verzeichnis bzw. die Datei selbst gel&ouml;scht wird</td>
		</tr>
		<tr>
			<td>
				IN_MODIFY</td>
			<td>
				Wenn die Datei oder das&nbsp;Verzeichnis modfiziert wird</td>
		</tr>
		<tr>
			<td>
				IN_MOVE_SELF</td>
			<td>
				Wenn das beobachtete Verzeichnis bzw. die Datei verschoben wird</td>
		</tr>
		<tr>
			<td>
				<div>
					IN_MOVED_FROM</div>
			</td>
			<td>
				Wenn ein Verzeichnis bzw. eine Datei aus dem beobachteten Verzeichnis verschoben wird</td>
		</tr>
		<tr>
			<td>
				IN_MOVED_TO</td>
			<td>
				Wenn ein Verzeichnis bzw. eine Datei in das beobachtete Verzeichnis verschoben wird</td>
		</tr>
		<tr>
			<td>
				IN_OPEN</td>
			<td>
				Wenn eine Datei ge&ouml;ffnet wird</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Test:</strong></u></div>
<div>
	&nbsp;</div>
<div>
	Um das ganze zu testen, speichert man den Cron-Tab ab und beendet den Editor (i.d.R. vi oder nano).</div>
<div>
	Sobald man jetzt eine Datei in diesem Verzeichnis speichert sollte in <strong>/var/log/syslog bzw. in /var/log/messages</strong> je nach System ein Eintrag wie dieser zu finden sein:</div>
<div>
	<pre class="brush:plain;">Mar 29 12:34:39 h1643630 incrond[21786]: (root) CMD (/etc/init.d/apache2 reload)

</pre>
</div>
]]></content:encoded>
      <pubDate>Mon, 29 Mar 2010 12:50:59 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Updates mit apt-get und cron-apt auf einem Debian-System]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/updates-mit-apt-get-und-cron-apt-auf-einem-debian-system.html</link>
      <guid isPermaLink="false">75</guid>
      <description><![CDATA[Hier möchte ich kurz zeigen, wie man auf einem Debian-System Updates einspielt und sich automatisch bei Verfügbarkeit neuer Updates per E-mail benachrichtigen lassen kann....]]></description>
      <content:encoded><![CDATA[Debian,apt-get,update,uprade,cron-apt,mail,notify<br/><div>
	Hier m&ouml;chte ich kurz zeigen, wie man auf einem Debian-System Updates einspielt und sich automatisch bei Verf&uuml;gbarkeit neuer Updates per E-mail benachrichtigen lassen kann.</div>
<div>
	&nbsp;</div>
<div>
	Die verf&uuml;gbaren Repositories stehen in der Datei</div>
<div>
	<strong>/etc/apt/sources.list</strong></div>
<div>
	&nbsp;</div>
<div>
	Die aktuelle Liste der Pakete l&auml;dt man normalerweise mit</div>
<div>
	<em><strong>apt-get update</strong></em></div>
<div>
	herunter.</div>
<div>
	&nbsp;</div>
<div>
	Mit</div>
<div>
	<em><strong>apt-get upgrade</strong></em></div>
<div>
	werden die Updates installiert.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt w&auml;re es nat&uuml;rlich von Vorteil, wenn der Server bei Verf&uuml;gbarkeit neuer Updates automatisch eine E-Mail an den Administrator versenden w&uuml;rde.</div>
<div>
	Dazu installieren wir das Paket cron-apt:</div>
<div>
	<em><strong>apt-get install cron-apt</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Das Paket cron-apt wird in regelm&auml;&szlig;igen Abst&auml;nden die Paketlisten aktualiseren (update) und die Pakete herunterladen, aber nicht installieren, sondern eine E-Mail versenden.</div>
<div>
	&nbsp;</div>
<div>
	Dazu editiert man die datei <strong>/etc/cron-apt/config</strong> und entfernt die Kommentarzeichen vor den folgenden beiden Zeilen:</div>
<div>
	<strong>MAILTO=&quot;admin@example.net&quot;<br />
	</strong></div>
<div>
	<strong>MAILON=&quot;upgrade&quot;<br />
	</strong></div>
<div>
	Die E-Mail-Adresse ist nat&uuml;rlich durch die des Administrators zu ersetzen.</div>
<div>
	&nbsp;</div>
<div>
	Damit cron-apt nun auch wirklich eine E-Mail verschickt, mu&szlig; noch ein&nbsp;Skript an die entsprechende Stelle kopiert werden:</div>
<div>
	<em><strong>cp /usr/share/doc/cron-apt/examples/9-notify /etc/cron-apt/action.d/</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Das Verzeichnis action.d enth&auml;lt die Aktionen, die von cron-apt augef&uuml;hrt werden sollen.</div>
<div>
	&nbsp;</div>
<div>
	Ab sofort bekommt der Administrator eine E-Mail bei Verf&uuml;gbarkeit und braucht die Updates i.d.R. nur noch mit</div>
<div>
	<em><strong>apt-get upgrade</strong></em></div>
<div>
	zu installieren.</div>
]]></content:encoded>
      <pubDate>Sat, 02 Jan 2010 15:36:13 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Proprietäre NVidia Graphiktreiber installieren (Fedora 12)]]></title>
      <link>http://www.cschramm.net/de/linux/fedora/proprietaere-nvidia-graphiktreiber-installieren-fedora-12.html</link>
      <guid isPermaLink="false">74</guid>
      <description><![CDATA[In diesem Tutorial zeige ich die Installation der proprietären NVidia-Treiber auf Fedora Core....]]></description>
      <content:encoded><![CDATA[fedora,nvidia,linux,proprietär,Treiber,Kernel,Nouveau,x86,x86_64,Grub<br/><div>
	Hier m&ouml;chte ich kurz zeigen, wie man die propriet&auml;ren Treiber von Nvidia auf einem Fedora-System installiert.</div>
<div>
	&nbsp;</div>
<div>
	Zun&auml;chst l&auml;dt man die Treiber von <a href="http://www.nvidia.de/Download/index.aspx?lang=de">www.nvidia.de</a> herunter.</div>
<div>
	&nbsp;</div>
<div>
	Dann macht man die Datei ausf&uuml;hrbar:</div>
<div>
	<em><strong>chmod +x NVIDIA-Linux-x86_64-190.53-pkg2.run</strong></em></div>
<div>
	Den Dateinamen mu&szlig; man ggf. ersetzen, zum aktuellen Zeitpunkt, ist das die neuste Version.</div>
<div>
	&nbsp;</div>
<div>
	Mit</div>
<div>
	<em><strong>./NVIDIA-Linux-x86_64-190.53-pkg2.run</strong></em></div>
<div>
	startet man das Setup.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt sollte man den Installations-Schritten folgen und den Installer das Kernel-Modul kompilieren und installieren lassen.</div>
<div>
	&nbsp;</div>
<div>
	Nach der Installation kommt jetzt noch ein wichtiger Schritt:</div>
<div>
	F&uuml;r Nvidia-Karten wird automatisch bei der Installation der sogen. <strong>Nouveau-Treiber</strong> geladen. Ist dieser Treiber aktiv, funktionieren die propriet&auml;ren Treiber nicht.</div>
<div>
	&nbsp;</div>
<div>
	M&ouml;chte man nun nicht unbedingt die Nouveau-Treiber via yum deinstallieren oder sonstige Verrenkungen machen, kann man den Treiber mit folgendem, kleinen Schritt ganz einfach ausschalten.</div>
<div>
	Dazu editiert man die Datei <strong>/etc/grub.conf</strong> und sucht die Zeile die mit &quot;<strong>kernel</strong>&quot; eingeleitet wird.</div>
<div>
	Am Ende der Zeile f&uuml;gt man folgendes ein:</div>
<div>
	<em><strong>nouveau.modeset=0</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Jetzt den <strong>Reboot</strong> durchf&uuml;hren.</div>
<div>
	&nbsp;</div>
<div>
	Beim n&auml;chsten Neustart sollte vor dem Start von Gnome, KDE oder einer anderen Oberfl&auml;che das Nvidia-Logo angezeigt werden!</div>
<div>
	Das bedeutet, die Installation hat funktioniert.</div>
<div>
	&nbsp;</div>
<div>
	Um ganz sicher zu sein, kann man noch den Befehl <strong>glxinfo</strong> verwenden.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
]]></content:encoded>
      <pubDate>Wed, 30 Dec 2009 09:20:36 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Flash-Player auf Fedora Linux installieren]]></title>
      <link>http://www.cschramm.net/de/linux/fedora/flash-player-auf-fedora-linux-installieren.html</link>
      <guid isPermaLink="false">73</guid>
      <description><![CDATA[Installation des Adobe Flash Player Plugins auf Fedora Linux...]]></description>
      <content:encoded><![CDATA[Fedora,Flash,Adobe,flash-plugin,nspluginwrapper,selinux,plugin,firefox<br/><div>
	Zuerst ben&ouml;tigt man das RPM <em><strong>adobe-release-i386-1.0-1.noarch.rpm </strong></em>von dieser URL:</div>
<div>
	<a href="http://get.adobe.com/flashplayer/">http://get.adobe.com/flashplayer/</a></div>
<div>
	&nbsp;</div>
<div>
	W&auml;hlt man dort die Version &quot;YUM&nbsp;f&uuml;r Linux&quot; aus, bekommt man ein RPM, &uuml;ber das man das Adobe-Repository auf dem lokalen Rechner einrichten kann, ganz einfach mit:</div>
<div>
	<em><strong>rpm -ivh adobe-release-i386-1.0-1.noarch.rpm</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Danach importiert man noch den Key:</div>
<div>
	<em><strong>rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Die Installation kann man mit</div>
<div>
	<em><strong>yum install flash-plugin nspluginwrapper libcurl<br />
	</strong></em></div>
<div>
	starten. Den nspluginwrapper und die Curl-Bibliothek gibt es als 32- und als 64Bit-Paket.</div>
<div>
	&nbsp;</div>
<div>
	Ist auf dem System SELinux aktiv, empfiehlt sich noch die folgende kleine Anpassung:</div>
<div>
	<em><strong>setsebool -P allow_unconfined_nsplugin_transition=0</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Die obigen Befehle sollten nat&uuml;rlich entweder als root oder via sudo ausgef&uuml;hrt werden.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt noch den Browser neu starten und in die Adresszeile folgendes eingeben:</div>
<div>
	<em><strong>about:plugins</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Das Flash-Plugin sollte jetzt in der Liste auftauchen.</div>
]]></content:encoded>
      <pubDate>Mon, 28 Dec 2009 21:50:47 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Nvidia Graphiktreiber via YUM auf Fedora Linux installieren (RPM Fusion)]]></title>
      <link>http://www.cschramm.net/de/linux/fedora/nvidia-graphiktreiber-via-yum-auf-fedora-linux-installieren-rpm-fusion.html</link>
      <guid isPermaLink="false">72</guid>
      <description><![CDATA[Installation der Nvidia Graphiktreiber via YUM auf Fedora Linux installieren (mit Hilfe von RPM Fusion)...]]></description>
      <content:encoded><![CDATA[rpmfusion,fedora,nvidia,treiber,kernel,kmod,kmod-nvidia,yum,installl<br/><div>
	Die folgenden Befehle sollte man als <strong>root</strong> oder via <strong>sudo</strong> ausf&uuml;hren.</div>
<div>
	&nbsp;</div>
<div>
	Zuerst installiert man die Repositories mit:</div>
<div>
	<em><strong>rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Jetzt mu&szlig; man die SE&nbsp;Linux Einstellungen etwas anpassen, da sonst der Treiber beim&nbsp;Start nicht geladen wird:</div>
<div>
	<em><strong>setsebool -P allow_execstack on</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Jetzt geht es an die Installation der Treiber. F&uuml;r eine aktuelle Graphikkarte gen&uuml;gt ein einfaches</div>
<div>
	<em><strong>yum install kmod-nvidia</strong></em></div>
<div>
	&nbsp;</div>
<div>
	F&uuml;r Graphikkarten der &auml;lteren GeForce 5&nbsp;/ FX&nbsp;Serie:</div>
<div>
	<em><strong>yum install kmod-nvidia-173xx</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Und f&uuml;r GeForce sehr alte Karten der Generation&nbsp;Geforce 2-4:</div>
<div>
	<em><strong>yum install kmod-nvidia-96xx</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Das war&#39;s schon.</div>
<div>
	Jetzt noch den Rechner neu starten.</div>
<div>
	<em><strong>reboot</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Alternativ zum Reboot geht auch Folgendes:</div>
<div>
	<em><strong>init 3<br />
	</strong></em></div>
<div>
	<em><strong>nvidia-config-display enable</strong></em></div>
<div>
	&nbsp;</div>
<div>
	Noch ein Hinweis:</div>
<div>
	Der&nbsp;Befehl nvidia-xconfig sollte nicht verwendet werden, da sonst der Treiber nicht mehr funktioniert.</div>
<div>
	So kann man ggf. das Problem beheben:</div>
<div>
	<em><strong>nvidia-config-display disable</strong></em></div>
<div>
	<em><strong>nvidia-config-display enable</strong></em></div>
<div>
	&nbsp;</div>
<div>
	That&#39;s it</div>
]]></content:encoded>
      <pubDate>Mon, 28 Dec 2009 21:34:03 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix Spamabwehr mit einfachen Mitteln]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-spamabwehr-mit-einfachen-mitteln.html</link>
      <guid isPermaLink="false">71</guid>
      <description><![CDATA[Ich habe schon einige Tutorials veröffentlich, um z.B. Greylisting-Filter, RBLs, u.s.w. in Postfix zu integrieren. Hier sind als Ergänzung noch einige einfache Mittel, mit denen man die Spam-Flut auch noch etwas reduzieren kann....]]></description>
      <content:encoded><![CDATA[postfix,helo,smtpd_helo_required,strict_rfc821_envelopes,disable_vrfy_command,antispam,spam<br/><div>
	Ich habe schon einige Tutorials ver&ouml;ffentlich, um z.B. Greylisting-Filter, RBLs, u.s.w. in Postfix zu integrieren.</div>
<div>
	Hier sind als Erg&auml;nzung noch einige einfache Mittel, mit denen man die Spam-Flut auch noch etwas reduzieren kann.</div>
<div>
	&nbsp;</div>
<div>
	Dazu erg&auml;nzt man die Datei <strong>/etc/postfix/main.cf</strong> um folgende Zeilen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				<div>
					smtpd_helo_required&nbsp;&nbsp;&nbsp;&nbsp; = yes<br />
					strict_rfc821_envelopes = yes<br />
					disable_vrfy_command = yes<br />
					unknown_address_reject_code&nbsp; = 554<br />
					unknown_hostname_reject_code = 554<br />
					unknown_client_reject_code&nbsp;&nbsp; = 554</div>
				<div>
					smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo_check, permit</div>
			</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Die Datei <strong>/etc/postfix/helo_check</strong> mu&szlig; man nat&uuml;rlich noch anlegen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				/^domain.tld$/</td>
			<td>
				550 Don&#39;t use my hostname</td>
		</tr>
		<tr>
			<td>
				/^123.123.123.123$/</td>
			<td>
				550 Don&#39;t use my IP address</td>
		</tr>
		<tr>
			<td>
				/^[123.123.123.123]$/</td>
			<td>
				550 Don&#39;t use my IP address</td>
		</tr>
		<tr>
			<td>
				/^[0-9.]+$/</td>
			<td>
				550 Your software is not RFC 2821 compliant</td>
		</tr>
		<tr>
			<td>
				/^[0-9]+(.[0-9]+){3}$/</td>
			<td>
				550 Your software is not RFC 2821 compliant</td>
		</tr>
	</tbody>
</table>
<div>
	In der Datei ist domain.tld durch den jeweiligen Host, z.B. cplinux.de auszutauschen - ebenso 123.123.123.123 durch die jeweilige IP-Adresse des Servers.</div>
<div>
	&nbsp;</div>
<div>
	Diese Ma&szlig;nahme blockt Spam-Mails bereits ab, bevor sie &uuml;berhaupt vom&nbsp;Server verarbeitet werden, d.h. je nach Masse der E-Mails, kann das die Server-Last sogar etwas senken.</div>
<div>
	&nbsp;</div>
<div>
	Viele Spammer senden keine korrekten Helo-Anfragen, halten sich nicht an die Standards oder versuchen, die eigene Adresse oder Domain zu mi&szlig;brauchen.</div>
<div>
	Solche Mails werden so ganz einfach von vornherein geblockt.</div>
<div>
	&nbsp;</div>
<div>
	Abschlie&szlig;end sollte man noch die Postfix-Konfiguration neu laden: <strong>/etc/init.d/postfix reload</strong></div>
]]></content:encoded>
      <pubDate>Mon, 07 Dec 2009 22:23:01 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postgrey in Postfix integrieren (Greylisting Filter)]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postgrey-in-postfix-integrieren-greylisting-filter.html</link>
      <guid isPermaLink="false">70</guid>
      <description><![CDATA[Integration des Greylisting-Filters Postgrey in Postfix...]]></description>
      <content:encoded><![CDATA[postgrey,postfix,greylisting,graylisting,greylist,antispam,anti-spam<br/><div>
	So einfach kann man Postgrey in eine bestehende Postfix-Installation integrieren:</div>
<div>
	&nbsp;</div>
<div>
	Die Installation erledigt man auf einem Debian-System ganz einfach mit:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				apt-get install postgrey</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Danach kann man (das ist kein Mu&szlig;) noch die Datei /etc/default/postgrey anpassen.</div>
<div>
	Diese enth&auml;lt:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				<div>
					POSTGREY_OPTS=&quot;--inet=127.0.0.1:60000&quot; <em>#Der Dienst benutzt den lokalen Port 60000</em></div>
				<div>
					POSTGREY_TEXT=&quot;Greylisted&quot; <em>#Dieser Parameter ist optional und enth&auml;lt die Greylisting-Meldung</em></div>
			</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Der Greylisting-Filter arbeitet standardm&auml;&szlig;ig mit einer Verz&ouml;gerung von 5 Minuten. Ist einem das zu lang f&uuml;gt man</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				&nbsp;--delay=120</td>
		</tr>
	</tbody>
</table>
<div>
	in den Parameter POSTGREY_OPTS oben mit ein. Die zeit ist in Sekunden, im o.a.&nbsp;Bsp. also 2 Minuten.</div>
<div>
	&nbsp;</div>
<div>
	Wissenswert ist auch noch, dass Postgrey eine Client- und Empf&auml;nger-Whitelist f&uuml;hrt:</div>
<div>
	<div>
		<strong>/etc/postgrey/whitelist_clients<br />
		</strong></div>
	<div>
		<strong>/etc/postgrey/whitelist_recipients</strong></div>
	<div>
		Diese kann man ggf. um eigene Hosts bzw. eigene Eintr&auml;ge erweitern.</div>
</div>
<div>
	&nbsp;</div>
<div>
	Jetzt kommt die Integration in Postfix. Dazu sucht man in der Datei <strong>/etc/postfix/main.cf</strong> die Zeile<strong> smtpd_recipient_restrictions</strong>.</div>
<div>
	Den Parameter erg&auml;nzt man durch:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				check_policy_service inet:127.0.0.1:60000</td>
		</tr>
	</tbody>
</table>
<div>
	und zwar unbedingt <strong>vor dem Permit</strong>, sofern der Parameter in der Zeile vorhanden ist.</div>
<div>
	&nbsp;</div>
<div>
	Die Zeile k&ouml;nnte dann folgenderma&szlig;en aussehen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				smtpd_recipient_restrictions =&nbsp; permit_mynetworks, permit_sasl_authenticated,&nbsp; reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unauth_destination, reject_unlisted_recipient, <strong>check_policy_service inet:127.0.0.1:60000</strong>, reject_unauth_pipelining</td>
		</tr>
	</tbody>
</table>
<div>
	Es ist unbedingt darauf zu achten, dass die Parameter in der Konfigurationsdatei in einer Zeile stehen.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt startet man nochmal die Dienste neu und der Postgrey-Filter verrichtet seinen Dienst!</div>
<div>
	/etc/init.d/postgrey restart</div>
<div>
	/etc/init.d/postfix restart</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
]]></content:encoded>
      <pubDate>Mon, 07 Dec 2009 22:12:32 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[PPK Dateien für OpenSSH unter Linux konvertieren]]></title>
      <link>http://www.cschramm.net/de/linux/ssh-vnc/ppk-dateien-fuer-openssh-unter-linux-konvertieren.html</link>
      <guid isPermaLink="false">69</guid>
      <description><![CDATA[PPK Dateien für OpenSSH unter Linux konvertieren, mit Hilfe der putty-tools (puttygen)...]]></description>
      <content:encoded><![CDATA[ssh,ppk,ssh-add,agent,id_rsa,puttygen,putty-tools,private-openssh,public-openssh<br/><div>
	Dazu ben&ouml;tigt man die putty-tools.</div>
<div>
	Auf einem Debian- oder Ubuntu-basierten System erledigt man die Installation bequem mit:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				apt-get install putty-tools</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Das eigentliche Konvertieren &uuml;bernimmt der Befehl <strong>puttygen</strong>.</div>
<div>
	&nbsp;</div>
<div>
	<div>
		Erstellung des &ouml;ffentlichen Schl&uuml;ssels:</div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					puttygen key.ppk -o id_rsa.pub -O public-openssh</td>
			</tr>
		</tbody>
	</table>
	<div>
		&nbsp;</div>
	Erstellung des privaten Schl&uuml;ssels:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				puttygen key.ppk -o id_rsa -O private-openssh</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Jetzt kopiert man die beiden Dateien id_rsa und id_rsa.pub im entsprechenden Benutzerverzeichnis in das Unterverzeichnis <strong>.ssh/</strong>.</div>
<div>
	Mit dem Befehl <strong>ssh-add</strong> kann man den Key hinzuf&uuml;gen.</div>
<div>
	<strong>ssh-add -l</strong> listet alle aktuellen Identit&auml;ten auf.</div>
]]></content:encoded>
      <pubDate>Wed, 25 Nov 2009 21:52:32 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Eclipse PDT mit Subclipse auf Ubuntu 9.10 einrichten]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/eclipse-pdt-mit-subclipse-auf-ubuntu-9.10-einrichten.html</link>
      <guid isPermaLink="false">68</guid>
      <description><![CDATA[Da es beim Einrichten von Eclipse zu einigen Problemen kommen kann, habe ich mich dazu entschlossen, eine kleine Anleitung zu verfassen...]]></description>
      <content:encoded><![CDATA[eclipse,pdt,ubuntu,subclipse,svn,32bit,64bit,debian,<br/><div>
	Da es beim Einrichten von Eclipse zu einigen Problemen kommen kann, habe ich mich dazu entschlossen, eine kleine Anleitung zu verfassen:</div>
<div>
	&nbsp;</div>
<div>
	Zuerst installiert man Java, und zwar die Version von Sun:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre</td>
		</tr>
	</tbody>
</table>
<div>
	als root oder auch via sudo:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Jetzt kann man schon mal Eclipse PDT&nbsp;herunterladen, die Version f&uuml;r PHP-Entwickler:</div>
<div>
	<a href="http://www.eclipse.org/pdt/downloads/" target="_blank">www.eclipse.org/pdt/downloads/</a></div>
<div>
	Die Version f&uuml;r Linux gibt es als 32Bit- und als 64Bit-Version</div>
<div>
	&nbsp;</div>
<div>
	Jetzt entpackt man das Archiv in den entsprechenden Ordner, z.B. in /usr/local:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				&nbsp;tar -xvpf&nbsp; eclipse-php-galileo-SR1-linux-gtk-x86_64.tar.gz</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Den Dateinamen mu&szlig; man ggf. ab&auml;ndern.</div>
<div>
	&nbsp;</div>
<div>
	In aller Regel wird eclipse&nbsp; die Standard-VM verwenden. Ggf. kann man im Eclipse-Ordner, in der Datei eclipse.ini selbst eine vm bestimmen. Hier ein Beispiel:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				<div>
					-startup<br />
					plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar<br />
					--launcher.library<br />
					plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.200.v20090519<br />
					-product<br />
					org.eclipse.epp.package.php.product</div>
				<div>
					<strong>-vm<br />
					</strong></div>
				<div>
					<strong>/usr/lib/jvm/java-6-sun/jre/bin/java<br />
					</strong>-showsplash<br />
					org.eclipse.platform<br />
					--launcher.XXMaxPermSize<br />
					512m<br />
					-vmargs<br />
					-Dosgi.requiredJavaVersion=1.5<br />
					-XX:MaxPermSize=512m<br />
					-Xms40m<br />
					-Xmx256m</div>
			</td>
		</tr>
	</tbody>
</table>
<div>
	Wie man sieht, l&auml;&szlig;t sich in dieser Datei auch der maximal verwendbare Speicher konfigurieren.</div>
<div>
	&nbsp;</div>
<div>
	Bevor man Eclipse nun startet erstellt man ein kleines Shell-Script <strong>start.sh</strong> im Eclipse-Ordner:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				#!/bin/bash<br />
				export GDK_NATIVE_WINDOWS=true<br />
				/data1/Eclipse/IDE/./eclipse</td>
		</tr>
	</tbody>
</table>
<div>
	Je nach Ubuntu-Installation kann es zu kleinen Problemen bei der Steuerung kommen, z.B. das der Links-Klick der Maus auf einigen Buttons nicht richtig funktioniert. Um dieses Problem - ein bereits gemeldeter Bug zum aktuellen Zeitpunkt - zu beheben, wird vor Programmstart die Variable GDK_NATIVE_WINDOWS gesetzt.</div>
<div>
	&nbsp;</div>
<div>
	Danach mu&szlig; man das Script noch ausf&uuml;hrbar machen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				chmod 777 start.sh</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Ok, Zeit f&uuml;r den ersten Start:<br />
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					sh start.sh</td>
			</tr>
		</tbody>
	</table>
	<div>
		&nbsp;</div>
</div>
<div>
	Standardm&auml;&szlig;ig ist in Eclipse als Versionsverwaltung nur CVS enthalten. Deshalb r&uuml;sten wir jetzt <strong>Subversion in Form des Plugins Subclipse</strong> nach.</div>
<div>
	&nbsp;</div>
<div>
	Dazu klickt man auf <em><strong>Help</strong></em><strong> </strong>-<em> <strong>Install New Software</strong></em>:</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/68/Subclipse1.jpg" style="width: 691px; height: 429px;" /></div>
<div>
	&nbsp;</div>
<div>
	Danach f&uuml;gt man &uuml;ber den Button <em><strong>Add</strong> </em>ein neues Repository hinzu, wie abgebildet:</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/68/Subclipse2.jpg" style="width: 682px; height: 629px;" /></div>
<div>
	&nbsp;</div>
<div>
	Als Namen habe ich Subclipse genommen, die Adresse verweist auf die aktuelle Subclipse-Version:</div>
<div>
	http://subclipse.tigris.org/update_1.6.x</div>
<div>
	&nbsp;</div>
<div>
	Nach der Installation wird Eclipse neu starten. Danach ist die Installation bereits vollst&auml;ndig.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt installieren wir das Paket <strong>libsvn-java</strong>:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				apt-get install libsvn-java</td>
		</tr>
	</tbody>
</table>
<div>
	als root oder via sudo wie ganz oben bereits gezeigt.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt &ouml;ffnet man die Einstellungen via <em><strong>Window</strong></em><strong> </strong>- <em><strong>Preferences</strong></em>.</div>
<div>
	Dort w&auml;hlt man links <em><strong>Team</strong></em> - <em><strong>SVN </strong></em>aus und w&auml;hlt als SVN&nbsp;Interface &quot;<em><strong>SVNKit (Pure Java)..</strong></em>.&quot;, wie abgebildet:</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="/assets/linux/68/Subclipse3.jpg" style="width: 640px; height: 647px;" /></div>
<div>
	&nbsp;</div>
<div>
	Mit ok best&auml;tigen, das war&#39;s!</div>
<div>
	Jetzt kann man Projekte via SVN&nbsp;auschecken!</div>
]]></content:encoded>
      <pubDate>Sun, 22 Nov 2009 11:03:28 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Spamdyke als Anti-Spam-Lösung in eine Plesk-Installation mit Qmail integrieren]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/spamdyke-als-anti-spam-loesung-in-eine-plesk-installation-mit-qmail-integrieren.html</link>
      <guid isPermaLink="false">67</guid>
      <description><![CDATA[Im Folgenden werde ich zeigen, wie man die Anti-Spam-Lösung spamdyke in eine bestehende Plesk-Installation integriert. Standardmäßig verwendet Plesk den Maildienst Qmail....]]></description>
      <content:encoded><![CDATA[Plesk,Spamdyke,Spam,greylist,graylist,whitelist,blacklist,antispam<br/><div>
	Im Folgenden werde ich zeigen, wie man die Anti-Spam-L&ouml;sung <strong>spamdyke </strong>in eine bestehende Plesk-Installation integriert. Standardm&auml;&szlig;ig verwendet Plesk den Maildienst Qmail.</div>
<div>
	&nbsp;</div>
<div>
	Zuerst einmal stellt man sicher, dass alle ben&ouml;tigten Pakete auf dem System installiert sind. Auf einem Debian-System erledigt man das mit:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				apt-get install gcc make libc-dev</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Jetzt l&auml;dt man sich die neueste Version von Spamdyke herunter:</div>
<div>
	http://www.spamdyke.org/download.html</div>
<div>
	&nbsp;</div>
<div>
	Aktuell ist 4.0.10 die neueste Version. Man kann die Datei auch direkt auf dem Server herunterladen und entpacken:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				<div>
					wget http://www.spamdyke.org/releases/spamdyke-4.0.10.tgz</div>
				<div>
					tar -xvzf spamdyke-4.0.10.tgz</div>
				<div>
					cd spamdyke-4.0.10/spamdyke</div>
			</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Jetzt mu&szlig; man das Paket kompilieren:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				<div>
					./configure</div>
				<div>
					make</div>
			</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Nach den beiden Befehlen sollte sich jetzt die ausf&uuml;hrbare Datei spamdyke in dem Verzeichnis befinden. Diese kopiert man jetzt z.B. in /usr/local/bin f&uuml;r die sp&auml;tere Verwendung:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				cp spamdyke /usr/local/bin/</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Soweit so gut, Spamdyke ist installiert!&nbsp;Jetzt mu&szlig; es noch in die Plesk-Konfiguration eingebunden werden.</div>
<div>
	&nbsp;</div>
<div>
	Normalerweise sollte das System xinetd verwenden. Zuerst sichert man die Original-Dateien:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				cp /etc/xinetd.d/smtp_psa /etc/xinetd.d/smtp_psa.orig<br />
				cp /etc/xinetd.d/smtps_psa /etc/xinetd.d/smtps_psa.orig</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Jetzt editiert man die beiden Dateien <strong>smtp_psa</strong> und <strong>smtps_psa</strong>, z.B. mit nano, vim, etc.</div>
<div>
	<strong>Nun f&uuml;gt man den folgenden Befehl ein und zwar direkt vor</strong> <strong>/var/qmail/bin/qmail-smtpd</strong>.</div>
<div>
	Bitte dabei darauf achten, dass der Befehl nicht in eine neue Zeile umbricht.</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				/usr/local/bin/spamdyke -f /etc/spamdyke.conf</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Danach sollte man xinetd neu starten:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				/etc/init.d/xinetd restart</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	<strong>ACHTUNG!</strong></div>
<div>
	Je nach Plesk-Version kann es sein, dass das System <strong>inetd statt xinetd</strong> verwendet.</div>
<div>
	Dann gilt es den Befehl</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				/usr/local/bin/spamdyke -f /etc/spamdyke.conf</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	in der Datei <strong>/etc/inetd.conf</strong> einzutragen, <strong>direkt vor</strong> <strong>/var/qmail/bin/qmail-smtpd</strong><strong>.</strong></div>
<div>
	Den&nbsp;Neustart erledigt man mit:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				/etc/init.d/inetd restart</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Die <strong>Konfigurationsdatei f&uuml;r Spamdyke</strong> fehlt nat&uuml;rlich noch. Dazu legen wir die Datei <strong>/etc/spamdyke.conf </strong>an, mit folgendem Inhalt:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				log-level=2<br />
				local-domains-file=/var/qmail/control/rcpthosts<br />
				max-recipients=20<br />
				idle-timeout-secs=60<br />
				graylist-dir=/var/qmail/spamdyke/greylist<br />
				graylist-min-secs=300<br />
				graylist-max-secs=1814400<br />
				sender-blacklist-file=/var/qmail/spamdyke/blacklist_senders<br />
				sender-whitelist-file=/var/qmail/spamdyke/whitelist_senders<br />
				recipient-blacklist-file=/var/qmail/spamdyke/blacklist_recipients<br />
				ip-in-rdns-keyword-file=/var/qmail/spamdyke/blacklist_keywords<br />
				ip-blacklist-file=/var/qmail/spamdyke/blacklist_ip<br />
				rdns-whitelist-file=/var/qmail/spamdyke/whitelist_rdns<br />
				ip-whitelist-file=/var/qmail/spamdyke/whitelist_ip<br />
				reject-empty-rdns<br />
				reject-unresolvable-rdns<br />
				greeting-delay-secs=5<br />
				check-dnsrbl=bl.spamcop.net<br />
				reject-missing-sender-mx</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Die Konfiguration kann man nat&uuml;rlich noch etwas anpassen.</div>
<div>
	Die o.a. Konfiguration ist f&uuml;r den Anfang denke ich schon mal nicht schlecht. Eine vollst&auml;ndige Liste aller m&ouml;glichen Optionen findet man hier:</div>
<div>
	<a href="http://www.spamdyke.org/documentation/README.html">http://www.spamdyke.org/documentation/README.html</a></div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Ok, jetzt gilt es, die fehlenden Verzeichnisse gem&auml;&szlig; der Konfigurationsdatei anzulegen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				mkdir -p /var/qmail/spamdyke/greylist<br />
				touch /var/qmail/spamdyke/blacklist_ip<br />
				touch /var/qmail/spamdyke/blacklist_recipients<br />
				touch /var/qmail/spamdyke/whitelist_ip<br />
				touch /var/qmail/spamdyke/blacklist_keywords<br />
				touch /var/qmail/spamdyke/blacklist_senders<br />
				touch /var/qmail/spamdyke/whitelist_senders<br />
				touch /var/qmail/spamdyke/whitelist_rdns</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Ich denke, die Namen der Dateien verdeutlichen selbst, wof&uuml;r sie stehen. In die Datei &quot;blacklist_ip&quot; z.B. kann man z.B. zeilenweise die IP-Adressen eintragen, die man sofort blocken m&ouml;chte.</div>
<div>
	<strong>Zu beachten ist, dass nach einer &Auml;nderung xinetd und qmail neu gestartet werden sollten, damit die &Auml;nderungen wirksam werden.<br />
	</strong></div>
<div>
	&nbsp;</div>
<div>
	Die neu angelegten Dateien m&uuml;ssen nun noch die richtigen Berechtigungen bekommen:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				chown -R qmaild:nofiles /var/qmail/spamdyke</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	F&uuml;r bereits existierende E-Mail-Konten m&uuml;ssen nun noch die entsprechenden Greylist-Ordner angelegt werden:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				cd /var/qmail/spamdyke/greylist/<br />
				for i in `ls -1 /var/qmail/mailnames`; do mkdir $i; done<br />
				chown -R qmaild:nofiles /var/qmail/spamdyke</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Damit das nicht f&uuml;r jede neu angelegte Domain wiederholt werden mu&szlig;, erstellt man nun ein kleines Shell-Script, das danach im Plesk Event Manager eingetragen wird. Die Datei kann man z.B. in /usr/local/psa/bin anlegen: <strong>/usr/local/psa/bin/create_greylist_folder.sh</strong></div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				#!/bin/bash<br />
				<br />
				# greylist folder<br />
				greylist_path=&quot;/var/qmail/spamdyke/greylist&quot;<br />
				<br />
				# add new folder<br />
				mkdir $greylist_path/$1<br />
				<br />
				# create proper permissions<br />
				chown qmaild:nofiles $greylist_path/$1<br />
				<br />
				exit</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	I.d.R. d&uuml;rfte das Skript bereits root geh&ouml;ren. Es mu&szlig; aber noch die entsprechenden Berechtigungen bekommen, damit es ausf&uuml;hrbar ist:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				chown root:root /usr/local/psa/bin/create_greylist_folder.sh<br />
				chmod 755 /usr/local/psa/bin/create_greylist_folder.sh</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Das neue Skript tragen wir jetzt im Plesk Event Manager ein. Der <strong>Event Manager </strong>befindet sich im Bereich <strong>Server</strong>.</div>
<div>
	<img alt="" src="/assets/linux/67/spamdyke-plesk-qmail-integration-1.jpg" /></div>
<div>
	&nbsp;</div>
<div>
	Dort klickt man dann auf &quot;Add Event Handler&quot;, um ein Ereignis hinzuzuf&uuml;gen.</div>
<div>
	<img alt="" src="/assets/linux/67/spamdyke-plesk-qmail-integration-2.jpg" /></div>
<div>
	&nbsp;</div>
<div>
	Jetzt tr&auml;gt man das neue Event wie abgebildet ein:</div>
<div>
	<img alt="" src="/assets/linux/67/spamdyke-plesk-qmail-integration-3.jpg" /></div>
<div>
	&nbsp;</div>
<table border="1" cellpadding="1" cellspacing="1" style="width: 449px; height: 98px;">
	<tbody>
		<tr>
			<td>
				Event</td>
			<td>
				Domain created</td>
		</tr>
		<tr>
			<td>
				Priorit&auml;t</td>
			<td>
				Normal</td>
		</tr>
		<tr>
			<td>
				Benutzer</td>
			<td>
				root</td>
		</tr>
		<tr>
			<td>
				Befehl</td>
			<td>
				/usr/local/psa/bin/create_greylist_folder.sh <new_domain_name></new_domain_name></td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Das war&#39;s!&nbsp;Jetzt sollte man sich die Logs ansehen! /var/log/mail.info bzw. /var/log/mail.log</strong></u></div>
]]></content:encoded>
      <pubDate>Tue, 27 Oct 2009 16:22:51 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[BIND 9 Master Domain aufsetzten ( DEBIAN )]]></title>
      <link>http://www.cschramm.net/de/linux/dns-server/bind-9-master-domain-aufsetzten-debian.html</link>
      <guid isPermaLink="false">66</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[bind9 dns namesserver<br/><div>In diesem Artikel befassen wir uns damit nen Bind9 Server f&uuml;r den alt&auml;glichen Gebrauch aufzusetzten, entweder als Firmen DNS Server, oder aber als Master Server in einem Rechenzentrum. Zum Start beginenn wir mit der Packet Installation, Voraussetzung ist eine bereits funktionierende Internetanbindung:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>apt-get install bind9</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Dies installiert uns alle ben&ouml;tigten Pakete. Es ist nun folgendes Verzeichnis verf&uuml;gbar /etc/bind/</div>
<div>welches folgende Dateien enth&auml;lt:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>db.0<br />
            db.127<br />
            db.255<br />
            db.empty<br />
            db.local<br />
            db.root<br />
            named.conf<br />
            named.conf.local<br />
            named.conf.options<br />
            rndc.key<br />
            zones.rfc1918</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Um sp&auml;ter eine klare Struktur zu haben legen wir noch folgenden Ordner an:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>cd /etc/bind/ &amp;&amp; mkdir zones</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Nun ermitteln wir den Namen und die IP Addresse des eigenen Servers und die des Internetanbieters.</div>
<div>Ein Blick auf die Internetseite des Internetdienstleisters sollte uns Aufschlu&szlig; dar&uuml;ber bringen welche DNS Server dieser Verwendet allerdings kann man dies auch mit folgendem command ermitteln:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>grep nameserver /etc/resolv.conf</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>F&uuml;r die eigene IP und den eigenen namen erlangen wie die Weisheit wie folgt:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>ifconfig</div>
            <div>hostname</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Die Angaben notieren wir uns irgendwo damit wir diese sp&auml;ter zur Hand haben.</div>
<div>Nun editieren wir die named.conf.options</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>vim /etc/bind/named.conf.options</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Mit &quot;i&quot; k&ouml;nnen wir text eintragen und mit &quot;ESC&quot; verlassen wir den eingabe modus, mit &quot;:wq&quot; speichern wir die Datei. Die Datei named.conf.options sollte um folgende Angaben erg&auml;nzt werden:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>options {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory &quot;/var/cache/bind&quot;;<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If there is a firewall between you and nameservers you want<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // to talk to, you may need to fix the firewall to allow multiple<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ports to talk.&nbsp; See http://www.kb.cert.org/vuls/id/800113<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If your ISP provided one or more IP addresses for stable<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // nameservers, you probably want to use them as forwarders.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Uncomment the following block, and insert the addresses replacing<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // the all-0's placeholder.<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forwarders {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xxx.xxx.xxx.xxx;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xxx.xxx.xxx.xxx;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth-nxdomain no;&nbsp;&nbsp;&nbsp; # conform to RFC1035<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen-on-v6 { any; };<br />
            };<br />
            <br />
            &nbsp;</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Die xxx.xxx.xxx.xxx in der Forwarders section sollten durch die IP Addressen der Namesserver des Internet Dienstanbieters ersetzt werden. Als n&auml;chstes mu&szlig; die Zone angelegt werden, daf&uuml;r haben wir</div>
<div>ja bereits unseren ordner zones vorbereitet, in diesem erstellen wir jetzt wie folgt eine Datei:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>cd /etc/bind/zones/ &amp;&amp; touch master.zone</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Anschlie&szlig;end editieren wir diese und f&uuml;gen folgenden Inhalt ein:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>$TTL 3D<br />
            <br />
            @&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOA&nbsp;&nbsp;&nbsp;&nbsp; ns1.master.zone.&nbsp;&nbsp;&nbsp;&nbsp; hostmaster.master.zone. (<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 199802151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; serial, todays date + todays serial #<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; refresh, seconds<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; retry, seconds<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; expire, seconds<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1D )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; minimum, seconds<br />
            ;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TXT&nbsp;&nbsp;&nbsp;&nbsp; &quot;master.zone, serving YOUR domain :)&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ns1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Inet Address of name server<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Primary Mail Exchanger<br />
            localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1<br />
            ns1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xxx.xxx.xxx.xxx<br />
            local&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CNAME&nbsp;&nbsp; ns1</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Die xxx.xxx.xxx.xxx ist durch die IP Addresse des Servers zu ersetzten. Die Einstellungen zur Lifetime der Domain k&ouml;nnen entprechend der Kommentare angepasst werden. Die Einstellungen f&uuml;r die ns1 Eintstellungen k&ouml;nnen nach beliben mit weiteren eintr&auml;gen und IP&nbsp;Addressen erg&auml;nzt werden, ein genaueres Beispiel folgt in dem Tutorial f&uuml;r die Slavekonfiguration. Jetzt mu&szlig; der Startkonfiguration des Namensservers noch die Datei bekannt gemacht werden und der Typ auf master eingestellt werden. Dies wird in der named.conf.local eingestellt:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>//<br />
            // Do any local configuration here<br />
            //<br />
            <br />
            // Consider adding the 1918 zones here, if they are not used in your<br />
            // organization<br />
            //include &quot;/etc/bind/zones.rfc1918&quot;;<br />
            zone &quot;master.zone&quot; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file &quot;/etc/bind/zones/master.zone&quot;;<br />
            };</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Damit findet der Bind Server die Zone und wir k&ouml;nnen einen ersten Test starten.</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>/etc/init.d/bind9 restart</div>
            <div>ping google.de</div>
            <div>ping master.zone.local</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Sollten beide Domains erreichbar sein ist dieses Tutorial erfolgreich abgeschlossen. Interessant wird es jetzt wenn eine neue Domain als Slave eingetragen werden soll, dazu folgt das Tutorial Bind9 Slave Domain aufsetzten.</div>]]></content:encoded>
      <pubDate>Mon, 19 Oct 2009 12:04:45 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[clamassassin als Antivirus-Lösung mit Maildrop in Courier-Postfix-Installationen integrieren]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/clamassassin-als-antivirus-loesung-mit-maildrop-in-courier-postfix-installationen-integrieren.html</link>
      <guid isPermaLink="false">65</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[clamav,clamassassin,antivirus,courier,maildrop,postfix<br/><div>Die Integration vom clamassassin in eine Courier-Postfix-Konfiguration ist spielend einfach.</div>
<div>&nbsp;</div>
<div>Zun&auml;chst einmal installiert man clamassassin via:</div>
<div><strong>apt-get install clamassassin clamav clamav-freshclam clamav-daemon clamav-base</strong></div>
<div>&nbsp;</div>
<div>Die Integration in die Konfiguration erfolgt analog zur Integration der Anti-Spam-L&ouml;sung Spamassassin:</div>
<div><a href="http://www.cplinux.de/e-mail-server/spamassassin-mit-maildrop-in-courier-postfix-installationen-integrieren.html">www.cplinux.de/e-mail-server/spamassassin-mit-maildrop-in-courier-postfix-installationen-integrieren.html</a></div>
<div>&nbsp;</div>
<div><strong><br />
</strong>Das Script <strong>/etc/courier/maildroprc</strong> mu&szlig; dann nur noch um folgende Zeilen erg&auml;nzt werden:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>exception {<br />
            xfilter &quot;/usr/bin/clamassassin&quot;<br />
            if (/^X-Virus-Status: Yes/)<br />
            {<br />
            to /dev/null<br />
            }<br />
            }</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Das bewirkt, dass als Virus erkannte Mails direkt gel&ouml;scht werden.</div>
<div>M&ouml;chte man die E-Mails stattdessen erst einmal in einen Quarant&auml;ne-Ordner verschieben, geht das nat&uuml;rlich auch:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>`[ -d $DEFAULT/.Quarantine ]`<br />
            if ( $RETURNCODE == 1 )<br />
            {<br />
            `maildirmake.courier $DEFAULT/.Quarantine`<br />
            }</div>
            <div>&nbsp;</div>
            <div>exception {<br />
            xfilter &quot;/usr/bin/clamassassin&quot;<br />
            if (/^X-Virus-Status: Yes/)<br />
            {<br />
            to &quot;$DEFAULT/.Quarantine/&quot;<br />
            }<br />
            }</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Der erste Teil des Scripts stellt dabei sicher, dass der Ordner Quarantine existiert und legt diesen ggf. an. Der zweite Teil &uuml;bernimmt wie oben die Virus-Pr&uuml;fung und verschiebt die E-Mail bei positiver Erkennung in den Ordner Quarantine.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 03 Oct 2009 13:30:15 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix-Courier/Cyrus mit DES/AES-Verschlüsselung]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-courier-cyrus-mit-des-aes-verschluesselung.html</link>
      <guid isPermaLink="false">64</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[postfix,courier,cyrus,encryption,encrypt,des,aes,sha1,md5<br/><div>Die beiden Tutorials</div>
<div>&nbsp;</div>
<div>
<div><a href="../../../e-mail-server/postfix-mit-mysql-courier-konfiguration.html">www.cplinux.de/e-mail-server/postfix-mit-mysql-courier-konfiguration.html</a></div>
<div><a href="../../../e-mail-server/postfix-mit-mysql-cyrus-konfiguration.html">www.cplinux.de/e-mail-server/postfix-mit-mysql-cyrus-konfiguration.html</a></div>
</div>
<div>&nbsp;</div>
<div>beschreiben, wie man eine Basis-Konfiguration mit Postfix &amp;&nbsp;Courier bzw. Postfix &amp; Cyrus in Verbindung mit mySQL aufsetzt.</div>
<div>&nbsp;</div>
<div>Das Ganze hat prinzipiell nur einen kleinen Nachteil. Derjenige, der Zugriff auf die Datenbank bekommt (normalerweise sollte das nur &uuml;ber localhost und den Benutzer postfix z.B. m&ouml;glich sein), kann nat&uuml;rlich die Passw&ouml;rter im Klartext auslesen.</div>
<div>&nbsp;</div>
<div>Um das zu &auml;ndern, ohne dass man auf die Encrypt-Option zur&uuml;ckgreifen mu&szlig; (die nicht in allen Versionen der Betriebssysteme ohne Patch verf&uuml;gbar ist), kann man z.B. auf die DES-Verschl&uuml;sselung zur&uuml;ckgreifen, die von mySQL unterst&uuml;tzt wird.</div>
<div>So kann man mit Hilfe eines Schl&uuml;ssels, den man selbst definieren kann, ein bestimmtes Passwort verschl&uuml;sseln und wieder entschl&uuml;sseln.</div>
<div>&nbsp;</div>
<div>Im Folgenden gehe ich davon aus, dass die E-Mail-Adresse selbst f&uuml;r die Verschl&uuml;sselung des Passworts verwendet wird. Aus der E-Mail-Adresse k&ouml;nnte man nat&uuml;rlich auch vorher noch einen Hash erzeugen oder diese anderweitig verschl&uuml;sseln (z.B. md5(email), sha1(email), password(email), etc., siehe unten). Das k&ouml;nnte nat&uuml;rlich auch z.B. ein Hash sein, der sich in der gleichen oder einer anderen Tabelle befindet.</div>
<div>Das sollen erst einmal Anregungen sein, um zu zeigen, was man machen k&ouml;nnte.</div>
<div>&nbsp;</div>
<div>Folgende Dateien &auml;ndern sich demnach:</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/sasl/smtp*.conf:</strong> <em>(Zeile austauschen)</em></div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>select DES_DECRYPT(password,email) from users where email='%u@%r' and status='1'</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/mysql_auth.cf:</strong> <em>(komplett)</em></div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = email<br />
            where_field = DES_DECRYPT(password,email)<br />
            additional_conditions = and status='1'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>/etc/courier/authmysqlrc: </strong><em>(Zeile austauschen)</em></div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>MYSQL_CLEAR_PWFIELD&nbsp;&nbsp;&nbsp;&nbsp; DES_DECRYPT(password,email)</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>Anmerkung:</strong></div>
<div>M&ouml;chte man nicht nur die E-Mail-Adresse verwenden, sondern z.B. vorher daraus einen MD5-Hash erzeugen, ersetzt man alle</div>
<div><em><strong>DES_DECRYPT(password,email)</strong></em></div>
<div>durch</div>
<div><em><strong>DES_DECRYPT(password,MD5(email))</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Legt man einen neuen User an, mu&szlig; man das Passwort nat&uuml;rlich verschl&uuml;sseln:</div>
<div><em><strong>INSERT&nbsp;INTO&nbsp;users (user_login, user_password, user_email, user_status)&nbsp;VALUES&nbsp;('testuser', DES_ENCRYPT('testpassword', 'testuser@example.net'), 'testuser@example.net', '1');<br />
</strong></em></div>
<div>bzw.</div>
<div>
<div><em><strong>INSERT&nbsp;INTO&nbsp;users (user_login, user_password, user_email, user_status)&nbsp;VALUES&nbsp;('testuser', DES_ENCRYPT('testpassword', MD5('testuser@example.net')), 'testuser@example.net', '1');<br />
</strong></em></div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Statt DES_ENCRYPT&nbsp;kann man nat&uuml;rlich auch AES_ENCRYPT&nbsp;verwenden.</div>
<div>&nbsp;</div>
<div>Als Resultat kann man die Passw&ouml;rter nun nicht mehr im Klartext aus der Datenbank auslesen, man kann sie aber entschl&uuml;sseln, wenn man den Schl&uuml;ssel kennt.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Danach noch einmal die Dienste neu starten:</div>
<div><strong>/etc/init.d/courier-authdaemon restart<br />
</strong></div>
<div><strong>/etc/init.d/courier-imap restart<br />
</strong></div>
<div><strong>/etc/init.d/postfix restart<br />
</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>That's it.</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 03 Oct 2009 13:18:23 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[SMTP Auth in einer Postfix-mySQL-Konfiguration aufsetzen]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/smtp-auth-in-einer-postfix-mysql-konfiguration-aufsetzen.html</link>
      <guid isPermaLink="false">63</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[postfix,smtp,auth,sasl,autentification,mysql<br/><div>Damit der E-Mail-Versand mit SMTP-Auth via SASL&nbsp;funktioniert, m&uuml;ssen im Verzeichnis</div>
<div><strong>/etc/postfix/sasl</strong> (zu erstellen, wenn es nicht existiert) die beiden Dateien <strong>smtpd.conf und smtp.conf</strong> angelegt werden, jeweils mit dem gleichen&nbsp;Inhalt:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>pwcheck_method: auxprop<br />
            auxprop_plugin: sql<br />
            mech_list: plain login<br />
            sql_engine: mysql<br />
            sql_hostnames: localhost<br />
            sql_user: postfix<br />
            sql_passwd: post<br />
            sql_database: postfix<br />
            sql_verbose: yes<br />
            sql_select: select password from users where email='%u@%r' and status='1'</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Die mySQL-Zugangsdaten f&uuml;r die Datenbank mu&szlig; man hier nat&uuml;rlich ersetzen.</div>
<br />
<div>Das Ganze funktioniert in Verbindung mit diesem beiden Tutorials:</div>
<div><a href="http://www.cplinux.de/e-mail-server/postfix-mit-mysql-courier-konfiguration.html">www.cplinux.de/e-mail-server/postfix-mit-mysql-courier-konfiguration.html</a></div>
<div><a href="http://www.cplinux.de/e-mail-server/postfix-mit-mysql-cyrus-konfiguration.html">www.cplinux.de/e-mail-server/postfix-mit-mysql-cyrus-konfiguration.html</a></div>]]></content:encoded>
      <pubDate>Sat, 03 Oct 2009 13:04:22 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Spamassassin mit Maildrop in Courier-Postfix-Installationen integrieren]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/spamassassin-mit-maildrop-in-courier-postfix-installationen-integrieren.html</link>
      <guid isPermaLink="false">62</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[maildrop,couriermaildrop,spamassassin,spamc,postfix<br/><div>Ich habe im Netz viele Tutorials dazu gefunden, aber keins passte 100% auf die Tutorials, die ich auch auf dieser Seite verfasst habe. Also schreibe ich hier nochmal exakt zusammen, wie man das am problemlosesten anstellt.</div>
<div>&nbsp;</div>
<div>In diesen Tutorials verwalte ich die Mails in Courier in der Form /home/vmail/domain/account/<domain><user></user></domain></div>
<div><a href="http://www.cplinux.de/e-mail-server/courier-imap-mit-mysql.html">www.cplinux.de/e-mail-server/courier-imap-mit-mysql.html</a></div>
<div><a href="http://www.cplinux.de/e-mail-server/postfix-mit-mysql-courier-konfiguration.html">www.cplinux.de/e-mail-server/postfix-mit-mysql-courier-konfiguration.html</a></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>Funktionsweise:</strong></div>
<div>In diesem Tutorial verwende ich Maildrop, um bei Postfix ankommende Mails an maildrop zu &uuml;bergeben, diese zu filtern (Spamassassin) und dann an an Courier auszuliefern.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Zun&auml;chst &auml;ndern wir die Postfix-Konfiguration ab. In der Datei <strong>/etc/postfix/master.cf</strong> tauschen wir die beiden Zeilen f&uuml;r den maildrop-Dienst wie folgt aus:&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>maildrop&nbsp; unix&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
            &nbsp; flags=DRhu user=vmail:vmail argv=/usr/bin/maildrop /etc/courier/maildroprc ${user} ${nexthop} ${sender}</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Dann m&uuml;ssen die folgenden Werte in die <strong>/etc/postfix/main.cf</strong> eingetragen werden. Existierende Eintr&auml;ge m&uuml;ssen ersetzt werden:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>local_destination_concurrency_limit = 1</div>
            <div>mailbox_transport = virtual<br />
            virtual_transport = maildrop<br />
            maildrop_destination_recipient_limit = 1</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt ben&ouml;tigen wir das Paket <strong>courier-maildrop</strong> (alternativ funktioniert das auch mit <strong>maildrop</strong>).</div>
<div>Das Paket installiert man auf Debian mit</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>apt-get install courier-maildrop</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt mu&szlig; die Datei <strong>/etc/courier/maildroprc</strong> (im Falle von maildrop statt courier-maildrop ist es /etc/maildroprc) angelegt werden:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>DEFAULT=&quot;/home/vmail/$2/$1/&quot;<br />
            DOMAINDIR=&quot;/home/vmail/$2&quot;<br />
            <br />
            `[ -d $DOMAINDIR ]`<br />
            if ( $RETURNCODE == 1 )<br />
            {<br />
            `mkdir -p $DOMAINDIR`<br />
            }<br />
            <br />
            `[ -d $DEFAULT ]`<br />
            if ( $RETURNCODE == 1 )<br />
            {<br />
            `maildirmake.courier $DEFAULT`<br />
            }<br />
            <br />
            `[ -d $DEFAULT/.Junk ]`<br />
            if ( $RETURNCODE == 1 )<br />
            {<br />
            `maildirmake.courier $DEFAULT/.Junk`<br />
            }<br />
            <br />
            exception {<br />
            xfilter &quot;/usr/bin/spamc -u vmail&quot;<br />
            if (/^X-Spam-Flag: YES/)<br />
            {<br />
            to &quot;$DEFAULT/.Junk/&quot;<br />
            }<br />
            }</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Das Maildrop-Script pr&uuml;ft mittels <strong>Spamassassin</strong>, ob es sich um Spam handelt und sortiert die Mail ggf. in den Ordner <strong>Junk </strong>ein.&nbsp;Andernfalls landet sie im Posteingang.</div>
<div>&nbsp;</div>
<div>Die oberen Passagen im Script sind dazu da, zu &uuml;berpr&uuml;fen, ob das <strong>Domain-Verzeichnis, das Mailbox-Maildir-Verzeichnis und der Junk-Ordner</strong> existieren. Wenn dem nicht so ist, werden die Ordner<strong> automatisch angelegt</strong>.</div>
<div>&nbsp;</div>
<div>Da das Script von Postfix &uuml;ber den Benutzer vmail ausgef&uuml;hrt wird (siehe Eintrag in der /etc/postfix/master.cf, f&uuml;hrt das zu keinen Berechtigungsproblemen mit Courier.</div>
<div>&nbsp;</div>
<div><strong>Das automatische Anlegen der Ordner</strong> ist auch praktisch, wenn man die Benutzer via mySQL verwaltet. So erspart man sich das manuelle Anlegen des Verzeichnisses auf dem Server. Eine Mail an die neue Adresse zu schicken gen&uuml;gt. :)</div>
<div>&nbsp;</div>
<div>Das Maildrop-Skript l&auml;&szlig;t sich noch beliebig erweitern. Z.B. k&ouml;nnte man Mails ab einem gewissen Spam-Score direkt l&ouml;schen und gar nicht erst ausliefern.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>WICHTIG:</strong></div>
<div>Die Datei <strong>/etc/courier/maildroprc</strong> mu&szlig; jetzt noch die richtigen Berechtigungen bekommen:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>chown vmail:vmail /etc/courier/maildroprc</div>
            <div>chmod 700 /etc/courier/maildroprc</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt noch Postfix neu starten und das war's!</div>
<div><strong>/etc/init.d/postfix restart</strong></div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 23 May 2009 11:04:52 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Mass Virtual Hosting mit mod_rewrite (RewriteMap) und PHP]]></title>
      <link>http://www.cschramm.net/de/linux/web-server/mass-virtual-hosting-mit-modrewrite-rewritemap-und-php.html</link>
      <guid isPermaLink="false">61</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[rewritemap,prg,virtual,hosting,mod_rewrite,rewrite,apache2,mass,php,cli<br/><div>Hier ist eine einfache M&ouml;glichkeit, viele Hosts mit Hilfe eines Scripts (in diesem Fall PHP) zu steuern.</div>
<div>&nbsp;</div>
<div>Voraussetzung ist, dass das Modul <strong>mod_rewrite </strong>geladen ist.</div>
<div>Das erledigt man entweder mit</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>a2enmod rewrite</td>
        </tr>
    </tbody>
</table>
<div>oder auf einem Debian-System mit</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>cd /etc/apache2/mods-enabled</div>
            <div>ln -s ../mods-available/rewrite.load rewrite.load</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Um nun das Url-Rewriting per PHP-Script einzurichten, f&uuml;gt man zun&auml;chst folgendes in der Datei /etc/apache2/apache2.conf am Ende ein:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>RewriteEngine on<br />
            <br />
            RewriteMap lowercase int:tolower<br />
            <br />
            # hier wird die MAP&nbsp;definiert<br />
            RewriteMap vhost prg:/etc/apache2/vhost.php<br />
            <br />
            RewriteLock /var/run/apache2/vhost.lock<br />
            <br />
            # Aliase<br />
            RewriteCond %{REQUEST_URI} !^/icons/<br />
            RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
            RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
            # Rewriting<br />
            RewriteCond ${vhost:%1} ^(/.*)$<br />
            RewriteRule ^/(.*)$ %1/$1<br />
            <br />
            RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
            RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
            RewriteCond ${vhost:%1} ^(/.*)$</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Dann legt man die Datenbank und die erforderliche Tabelle an:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>mysql --user=XXXXXXXXXX --password=XXXXXXXXXX;</div>
            <div>CREATE DATABASE srvadm;<br />
            USE srvadm;<br />
            CREATE TABLE `vhosts` (<br />
            &nbsp; `vhost_id` int(5) NOT NULL auto_increment,<br />
            &nbsp; `domain` varchar(100) NOT NULL,<br />
            &nbsp; `document_root` varchar(255) NOT NULL,<br />
            &nbsp; `created` datetime NOT NULL,<br />
            &nbsp; `lastmodified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,<br />
            &nbsp; PRIMARY KEY&nbsp; (`vhost_id`)<br />
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Dann legt man noch das Script <strong>/etc/apache2/vhosts.php</strong> an:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>#!/usr/bin/php<br />
            &lt;?<br />
            /***************************************/<br />
            //Konfiguration<br />
            define('DB_HOST','localhost');<br />
            define('DB_USER', 'XXXXXXXXXX');<br />
            define('DB_PASSWORD', 'XXXXXXXXXX');<br />
            define('DB_NAME', 'srvadm');<br />
            /***************************************/<br />
            <br />
            $db = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die('COULD NOT CONNECT TO DB');<br />
            mysql_select_db(DB_NAME) or die('DATABASE NOT FOUND OR NOT ACCESSIBLE');<br />
            <br />
            if ($stdin=fopen(&quot;php://stdin&quot;,&quot;r&quot;)) {<br />
            &nbsp;&nbsp;&nbsp; while (!feof($stdin)) {<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Domain name via STDIN&nbsp;auslesen<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $domain = fgets($stdin,4096);<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //document_root anhand der Domain aus der Datenbank auslesen<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = mysql_query(&quot;SELECT document_root FROM vhosts WHERE domain='&quot;.trim($domain).&quot;' &quot;);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr = mysql_fetch_assoc($result);<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Ausgabe generieren<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $output = $arr['document_root'];<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Ausgabe<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($stdout = fopen(&quot;php://stdout&quot;, &quot;w&quot;)) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fwrite($stdout,$output.&quot;n&quot;);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fclose($stdout);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp; fclose($stdin);<br />
            }<br />
            <br />
            mysql_close($db);<br />
            ?&gt;</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div><u><strong>ACHTUNG!</strong></u></div>
<div>F&uuml;r das o.a. Script wird <strong>php5-cli</strong><strong> </strong>und <strong>php5-mysql </strong>ben&ouml;tigt<span style="font-weight: bold;"><strong>.</strong></span></div>
<div><span style="font-weight: bold;"><strong>Beides l&auml;&szlig;t sich per apt-get installieren.</strong></span></div>
<div>&nbsp;</div>
<div><u><span style="font-weight: bold;"><strong>WICHTIG!</strong></span></u></div>
<div>Zu ersetzen sind in dem Script die Zugangsdaten zur mysql-Datenbank im Block <strong>Konfiguration</strong>;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Nach einem Neustart mit <strong>/etc/init.d/apache2 restart</strong>, kann man das URL-Rewriting dann &uuml;ber die Datenbank steuern.</div>
<div>&nbsp;</div>
<div>D.h. anhand der aufgerufenen Domain wird in der Datenbank der document_root ermittelt und die Anfrage wird auf das entsprechende Verzeichnis umgeschrieben.</div>
<div>&nbsp;</div>
<div>That's it.</div>]]></content:encoded>
      <pubDate>Mon, 11 May 2009 23:41:32 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[NFS Server und Clients einrichten (Debian / CentOS)]]></title>
      <link>http://www.cschramm.net/de/linux/samba-nfs/nfs-server-und-clients-einrichten-debian--centos.html</link>
      <guid isPermaLink="false">60</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[nfs,share,server,client,linux,debian,centos<br/><div>NFS (Network File System) erlaubt es, relativ leicht, Shares zwischen Linux-Servern und -Clients zu erstellen.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong><u>Zun&auml;chst installieren wir die ben&ouml;tigen Pakete auf dem Server:</u></strong><u><br />
</u></div>
<div>&nbsp;</div>
<div>Auf einem Debian-System gen&uuml;gt ein:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>apt-get install nfs-kernel-server nfs-common portmap</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Auf CentOS:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>yum install nfs-server nfs-utils portmap</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong><u>Jetzt installieren wir die erforderliche Pakete auf einem Client:</u></strong></div>
<div>&nbsp;</div>
<div>Auf einem Debian-System:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>apt-get install nfs-common portmap</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Auf CentOS:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>yum install nfs-utils portmap</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong><u>Jetzt erstellen wir eine Freigabe:</u></strong></div>
<div>&nbsp;</div>
<div>Zun&auml;chst legen wir auf dem Server ein Verzeichnis an, dass wir sp&auml;ter freigeben, hier /mnt/nfs als Bsp.:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>mkdir /mnt/nfs<br />
            chown nobody:nogroup /mnt/nfs</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Dann geht es an die Konfiguration. Dazu editieren wir die Datei <strong>/etc/exports</strong>:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>/mnt/nfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 123.123.123.123(rw,sync,no_subtree_check,no_root_squash)</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Es gibt hier einige Optionen, hier die wichtigsten:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>rw</td>
            <td>Das Share wird zum Lesen + Schreiben freigegeben (read-write)</td>
        </tr>
        <tr>
            <td>ro</td>
            <td>Das Share wird nur mit Lese-Berechtigungen freigegeben (readonly)</td>
        </tr>
        <tr>
            <td valign="top">no_root_squash&nbsp;&nbsp;&nbsp; </td>
            <td>Diese Option bewirkt, dass der root-Benutzer des Clients mit root-Berechtigungen schreiben darf.</td>
        </tr>
    </tbody>
</table>
<div>In den manpages findet man weitere Informationen: <strong>man nfs</strong></div>
<div>&nbsp;</div>
<div>Das bewirkt, dass das Verzeichnis <strong>/mnt/nfs</strong> f&uuml;r die <strong>IP 123.123.123.123</strong> freigegeben wird.</div>
<div>Nachdem die Datei gespeichert wurde, mu&szlig; noch ein</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>exportfs -a</td>
        </tr>
    </tbody>
</table>
<div>ausgef&uuml;hrt werden, damit die &Auml;nderungen wirksam werden.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong><u>Jetzt mu&szlig; das Share noch auf dem Client ins Dateisystem eingehangen werden:</u></strong></div>
<div>&nbsp;</div>
<div>Z.B. so:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>mkdir /mnt/123nfs</div>
            <div>mount 123.123.123.123:/mnt/nfs /mnt/123nfs</div>
            </td>
        </tr>
    </tbody>
</table>
<div>Hier mu&szlig; man darauf achten, dass man den kompletten, absoluten Pfad des Shares auf dem Server verwendet. In diesem Fall wird das Verzeichnis nfs vom Server in das Verzeichnis 123nfs auf dem Client eingehangen.</div>
<div>&nbsp;</div>
<div>Jetzt kann man das Share noch in die Datei <strong>/etc/fstab</strong> eintragen, damit man es sp&auml;ter einfacher mounten kann:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>123.123.123.123:/mnt/nfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /mnt/123nfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rw,sync,no_subtree_check,no_root_squash</td>
        </tr>
    </tbody>
</table>
<div>Danach gen&uuml;gt nun ein einfaches</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>mount /mnt/12nfs</td>
        </tr>
    </tbody>
</table>
<div>zum Mounten.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>Noch ein Hinweis:</strong></div>
<div>L&auml;uft auf Server und/oder Client eine Firewall, mu&szlig; diese entsprechend angepasst werden.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>That's it.</strong></div>]]></content:encoded>
      <pubDate>Sun, 10 May 2009 14:26:14 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Dynamische Subdomains mit mod_vhost_alias]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/dynamische-subdomains-mit-modvhostalias.html</link>
      <guid isPermaLink="false">58</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[mod_vhost_alias,vhost_alias,vhost,alias,apache2,dynamic,subdomains<br/><div>Wer einen Development-Server oder einen Server mit vielen Domains betreibt und nicht jede Domain einzeln konfigurieren m&ouml;chte, kann sich mit dem Modul <strong>mod_vhost_alias</strong> viel Arbeit ersparen.</div>
<div>&nbsp;</div>
<div>Zun&auml;chst mu&szlig; das Modul aktiviert werden. Normalerweise ist es bei einer&nbsp;Debian-Apache2-Installation bereits enthalten.</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>a2enmod vhost_alias</td>
        </tr>
    </tbody>
</table>
<div>oder</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>cd /etc/apache2/mods-enabled</div>
            <div>ln -s ../mods-available/vhost_alias.load vhost_alias.load</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Jetzt erstellen wir eine VHost-Konfiguration, z.B. so:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>NameVirtualHost *.example.net<br />
            &lt;VirtualHost *.example.net&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerAdmin admin@example.net<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseCanonicalName Off<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VirtualDocumentRoot /var/www/vhosts/example.net/subdomains/%1<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot /var/www/vhosts/example.net/subdomains/<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory /&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # directory options<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory /var/www/vhosts/example.net/subdomains/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # directory options<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache2/error.log<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CustomLog /var/log/apache2/access.log combined<br />
            &lt;/VirtualHost&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Angenommen, der Webserver hat den Namen example.net, <strong>so sucht der Webserver jetzt automatisch alle <br />
</strong></div>
<div><strong>Subdomains in /var/www/vhosts/example.net/subdomains/</strong>.</div>
<div>&nbsp;</div>
<div><strong>Bsp.: </strong></div>
<div>test.example.net</div>
<div>/var/www/vhosts/example.net/subdomains/test</div>
<div>&nbsp;</div>
<div>Das Ganze funktioniert nat&uuml;rlich nicht nur mit Subdomains, so k&ouml;nnte man auch einen <strong>&lt;VirtualHost *&gt;</strong> Eintrag anlegen.</div>
<div>&nbsp;</div>
<div>
<div>Wenn es st&ouml;rt, dass alle Hosts die gleichen Log-Dateien benutzen, kann ggf. das LogFormat so anpassen, dass die Logs leicht aufteilbar werden, z.B. so:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>LogFormat &quot;%V %h %l %u %t &quot;%r&quot; %s %b&quot; vcommon</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
</div>
<div>&nbsp;</div>
<div>Jetzt noch den Webserver neu starten und das war's!</div>
<div><strong>/etc/init.d/apache2 restart</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Tue, 28 Apr 2009 21:15:00 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Wildcard-Domains mit Apache2]]></title>
      <link>http://www.cschramm.net/de/linux/web-server/wildcard-domains-mit-apache2.html</link>
      <guid isPermaLink="false">57</guid>
      <description><![CDATA[Beim Konfigurieren eines Webservers ist es hin wieder recht praktisch, wenn man so genannte Wildcard-Domains anlegen kann. Z.B. ein Webmail-Client sollte für alle Domains funktionieren....]]></description>
      <content:encoded><![CDATA[apache2,wildcard,domain,webserver,vhost,webmail<br/><div>
	Beim Konfigurieren eines Webservers ist es hin wieder recht praktisch, wenn man so genannte Wildcard-Domains anlegen kann.</div>
<div>
	Z.B. ein Webmail-Client sollte f&uuml;r alle Domains funktionieren, ohne, dass man das f&uuml;r jeden VirtualHost &auml;ndern mu&szlig;.</div>
<div>
	&nbsp;</div>
<div>
	Anstatt das f&uuml;r jede Domain einzeln zu definieren, kann man das auch folgenderma&szlig;en tun:</div>
<table border="1" cellpadding="1" cellspacing="1" width="100%">
	<tbody>
		<tr>
			<td>
				&lt;VirtualHost webmail.example.net:80&gt;<br />
				<br />
				&nbsp; ServerName webmail.example.net<br />
				&nbsp; ServerAlias webmail.*<br />
				<br />
				&nbsp; ServerAdmin admin@example.net<br />
				<br />
				&nbsp; DocumentRoot /var/www/webmail<br />
				<br />
				&nbsp; &lt;Directory /var/www/webmail&gt;<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options -Indexes -MultiViews FollowSymLinks<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow from all<br />
				&nbsp; &lt;/Directory&gt;<br />
				<br />
				&nbsp; ErrorLog /var/log/apache2/webmail-error.log<br />
				&nbsp; CustomLog /var/log/apache2/webmail-access.log combined<br />
				<br />
				&lt;/VirtualHost&gt;</td>
		</tr>
	</tbody>
</table>
<div>
	&nbsp;</div>
<div>
	Dabei ist die Zeile <strong>ServerAlias webmail.*</strong> wichtig.</div>
<div>
	Damit kann jede Domain den Webmailer verwenden. Das l&auml;&szlig;t sich nat&uuml;rlich beliebig auf andere Anwendungen ausweiten.</div>
<div>
	&nbsp;</div>
]]></content:encoded>
      <pubDate>Sun, 26 Apr 2009 19:17:15 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Erweitertes Mass Virtual Hosting mit mod_macro]]></title>
      <link>http://www.cschramm.net/de/linux/web-server/erweitertes-mass-virtual-hosting-mit-modmacro.html</link>
      <guid isPermaLink="false">56</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[vhosts,mass,vhost,mod_macro,macro,virtual,host<br/><div>In dem vorhangehenden Tutorial habe ich bereits gezeigt, wie man einfache Hosts mit mod_macro verwalten kann: <a href="http://www.cplinux.de/threads/view/einfaches-mass-virtual-hosting-mit-modmacro.html">www.cplinux.de/threads/view/einfaches-mass-virtual-hosting-mit-modmacro.html</a></div>
<div>&nbsp;</div>
<div>In der Praxis sind die meisten virtuellen Hosts jedoch sehr viel komplexer. Deshalb habe ich folgendes Macro erstellt:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>&lt;Macro VHost $domain $document_root $open_basedir $auth $auth_user&gt;<br />
            &lt;VirtualHost 123.123.123.123:80&gt;<br />
            <br />
            &nbsp; ServerName $domain<br />
            &nbsp; ServerAlias www.$domain<br />
            <br />
            &nbsp; ServerAdmin admin@$domain<br />
            <br />
            &nbsp; DocumentRoot $document_root<br />
            <br />
            &nbsp; php_admin_value open_basedir &quot;/usr/lib/sendmail:/tmp:/usr/share:$open_basedir&quot;<br />
            <br />
            &nbsp; Use Directories $document_root<br />
            <br />
            &nbsp; Use WebmailAlias<br />
            &nbsp; Use CgiAlias<br />
            <br />
            &nbsp; Use $auth $auth_user<br />
            <br />
            &nbsp; Use Logs $domain<br />
            <br />
            &lt;/VirtualHost&gt;<br />
            &lt;/Macro&gt;</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>
<div><strong>ACHTUNG! </strong></div>
<div><strong>Die IP im VirtualHost-Tag mu&szlig; durch die IP-Adresse des Servers ersetzt werden!</strong></div>
<div>&nbsp;</div>
Ok, hier ist die Use-Anweisung in der <strong>vhosts.conf</strong> mit 5 Parametern schon etwas umfangreicher.</div>
<div>Zus&auml;tzlich werden hier die open_basedir-Pfade und Informationen f&uuml;r eine eventuelle HTTP-Authentifizierung mit &uuml;bergeben.</div>
<div>&nbsp;</div>
<div>&Uuml;ber die <strong>open_basedir</strong>-Restriktion definiert man, auf welche Pfade die Domain zugreifen darf. Skripte von Vhost A d&uuml;rfen nicht unbedingt auf Skripte von VHost B zugreifen.</div>
<div>&nbsp;</div>
<div>Einige Domains oder Sub-Domains dienen unter Umst&auml;nden nur administrativen Zwecken und sollten deshalb nicht &ouml;ffentlich zug&auml;nglich sein. Deshalb habe ich hier noch entsprechend 2 Parameter hinzugef&uuml;gt.</div>
<div>Der erste Parameter definiert den Makro-Namen, der zweite den User, der Zugriff haben soll.</div>
<div>&nbsp;</div>
<div>Wie man an dem Beispiel oben sieht, kann man die Makros auch verschachteln. Die untergeordneten Macros k&ouml;nnten also z.B. so aussehen:</div>
<div>&nbsp;</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>&lt;Macro Directories $document_root&gt;<br />
            &nbsp; &lt;Directory $document_root&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options -Indexes -MultiViews FollowSymLinks<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allow from all<br />
            &nbsp; &lt;/Directory&gt;<br />
            &lt;/Macro&gt;</div>
            <div>&nbsp;</div>
            <div>&lt;Macro WebmailAlias&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; Alias /webmail &quot;/var/www/webmail&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory &quot;/var/www/webmail/&quot;&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; Options -Indexes -MultiViews FollowSymLinks<br />
            &nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All<br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
            &lt;/Macro&gt;</div>
            <div>&nbsp;</div>
            <div>&lt;Macro CgiAlias&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; AllowOverride None<br />
            &nbsp;&nbsp;&nbsp;&nbsp; Options ExecCGI -MultiViews +SymLinksIfOwnerMatch<br />
            &nbsp;&nbsp;&nbsp;&nbsp; Order deny,allow<br />
            &nbsp;&nbsp;&nbsp;&nbsp; deny from all<br />
            &nbsp;&nbsp;&nbsp;&nbsp; allow from localhost<br />
            &nbsp;&nbsp;&nbsp;&nbsp; allow from 85.214.80.11 <em>#muss entspr. ersetzt werden</em><br />
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
            &lt;/Macro&gt;</div>
            <div>&nbsp;</div>
            <div>&lt;Macro Auth $htuser&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; AuthName &quot;Restricted area&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; AuthType Basic<br />
            &nbsp;&nbsp;&nbsp;&nbsp; AuthUserFile /var/www/vhosts/.htpasswd<br />
            &nbsp;&nbsp;&nbsp;&nbsp; require $htuser<br />
            &lt;/Macro&gt;<br />
            <br />
            &lt;Macro NoAuth $htuser&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; #No HTTP AUTH for this vhost<br />
            &lt;/Macro&gt;</div>
            <div>&nbsp;</div>
            <div>&lt;Macro Logs $domain&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache2/$domain-error.log<br />
            &nbsp;&nbsp;&nbsp;&nbsp; CustomLog /var/log/apache2/$domain-access.log combined<br />
            &lt;/Macro&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<div>Dabei sollte man auch nicht die vorherige <strong>NameVirtualHost</strong>-Anweisung vergessen:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>NameVirtualHost 123.123.123.123:80</td>
        </tr>
    </tbody>
</table>
<div>Diese Anweisung k&ouml;nnte man vor die nachfolgenden Anweisungen platzieren.</div>
</div>
<div>&nbsp;</div>
<div>Damit sieht eine <strong>Beispiel-Liste f&uuml;r die vhosts.conf</strong> dann so aus:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>Use VHost example1.net /var/www/vhosts/example1.net /var/www/vhosts/example1.net:/tmp:/usr/share/php NoAuth NoUser<br />
            Use VHost example2.net /var/www/vhosts/example2.net /var/www/vhosts/example2.net:/tmp:/usr/share/php Auth Administrator<br />
            Use VHost example3.net /var/www/vhosts/example3.net /var/www/vhosts/example3.net:/tmp:/usr/share/php NoAuth NoUser</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div><strong>D.h. wir verwenden das Macro VHost und &uuml;bergeben der Reihe nach den Domain-Namen, den Document Root, den Open-Basedir-Pfad (getrennt immer durch einen Doppelpunkt) und die beiden Parameter f&uuml;r die HTTP-Authentifizierung.</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Zur <strong>HTTP-Authentifierung</strong>:</div>
<div>Da es hier keine if-else-Anweisungen o.&auml;. gibt, habe ich 2 Macros erstellt, einmal mit und einmal ohne HTTP-Auth. D.h. man &uuml;bergibt entweder <strong>Auth</strong> gefolgt von dem Benutzernamen oder einfach <strong>NoAuth NoUser</strong>, wenn es keine gibt.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Damit sollte sich nun schon einiges anstellen lassen.</div>
<div>Bitte immer daran denken, dass die &Auml;nderungen erst nach einem</div>
<div><strong>/etc/init.d/apache2 reload</strong></div>
<div>wirksam werden. :)</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sun, 26 Apr 2009 13:20:28 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Einfaches Mass Virtual Hosting mit mod_macro]]></title>
      <link>http://www.cschramm.net/de/linux/web-server/einfaches-mass-virtual-hosting-mit-modmacro.html</link>
      <guid isPermaLink="false">55</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[mass,vhost,mod_macro,macro,virtual,host<br/><div>
<div>Angenommen, man hat ser viele Virtual Hosts. Dann hat man in der Webserver-Konfiguration meist sehr viele Dateien (z.B. bei Debian in /etc/apache2/sites-available) oder eine riesige Datei, die alle Vhosts enth&auml;lt.</div>
<div>&nbsp;</div>
<div>Zum Einen verliert man hier sehr leicht die &Uuml;bersicht, zum Anderen gibt es pro Vhost immer wiederkehrende Muster.</div>
</div>
<div>Das Apache-Modul mod_macro bietet hier eine einfache M&ouml;glichkeit, die VHost-Konfiguration zu vereinfachen.</div>
<div>&nbsp;</div>
<div>Installiert wird das Modul auf einem Debian-System einfach mit</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>apt-get install libapache2-mod-macro</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Um das Modul auf einem Debian-System zu aktivieren, mu&szlig; ein symbolischer Link angelegt werden:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>cd /etc/apache2/mods-enabled</div>
            <div>ln -s ../mods-available/macro.load macro.load</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Hier ist ein einfaches Bsp., wie ein Macro aussehen k&ouml;nnte:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>&lt;Macro VHost $domain $document_root&gt;<br />
            &lt;VirtualHost 123.123.123.123:80&gt;<br />
            &nbsp; ServerName $domain<br />
            &nbsp; ServerAlias www.$domain<br />
            &nbsp; ServerAdmin admin@$domain<br />
            &nbsp; DocumentRoot $document_root</div>
            <div>&nbsp; ErrorLog /var/log/apache2/$domain-error.log<br />
            &nbsp; CustomLog /var/log/apache2/$domain-access.log combined<br />
            &lt;/VirtualHost&gt;<br />
            &lt;/Macro&gt;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>Ich habe dieses Macro ini <strong>/etc/apache2/vhosts_macros.conf</strong> gespeichert.</div>
<div>&nbsp;</div>
<div><strong>ACHTUNG! </strong></div>
<div><strong>Die IP im VirtualHost-Tag mu&szlig; durch die IP-Adresse des Servers ersetzt werden!</strong></div>
<div>&nbsp;</div>
<div>Dabei sollte man auch nicht die vorherige <strong>NameVirtualHost</strong>-Anweisung vergessen:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>NameVirtualHost 123.123.123.123:80</td>
        </tr>
    </tbody>
</table>
<div>Diese Anweisung k&ouml;nnte man vor die nachfolgenden Anweisungen platzieren.</div>
<div>&nbsp;</div>
<div>Mit folgenden Zeilen kann man nun entsprechende VirtualHosts deklarieren:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>Use VHost example1.net /var/www/vhosts/example1.net</div>
            <div>Use VHost example3.net /var/www/vhosts/example2.net</div>
            <div>Use VHost example4.net /var/www/vhosts/example3.net</div>
            <div>Use VHost example4.net /var/www/vhosts/example4.net</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Der Use-Befehl leitet das Macro ein, gefolgt von dem Namen des Macros, in diesem Fall <strong>VHost</strong>.</div>
<div>Danach kommen die Domain und der Document Root.</div>
<div>&nbsp;</div>
<div>Diese Use-Anweisungen habe ich in der Datei <strong>/etc/apache2/vhosts.conf</strong> gespeichert.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>D.h. es werden hier 4 virtuelle Hosts angelegt:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><u><strong>Servername<br />
            </strong></u></td>
            <td><u><strong>ServerAlias<br />
            </strong></u></td>
            <td><u><strong>ServerAdmin<br />
            </strong></u></td>
            <td><u><strong>Document Root<br />
            </strong></u></td>
        </tr>
        <tr>
            <td>example1.net</td>
            <td>www.example1.net</td>
            <td>admin@example1.net</td>
            <td>/var/www/vhosts/example1.net</td>
        </tr>
        <tr>
            <td>example2.net</td>
            <td>www.example2.net</td>
            <td>admin@example2.net</td>
            <td>/var/www/vhosts/example2.net</td>
        </tr>
        <tr>
            <td>example3.net</td>
            <td>www.example3.net</td>
            <td>admin@example3.net</td>
            <td>/var/www/vhosts/example3.net</td>
        </tr>
        <tr>
            <td>example4.net</td>
            <td>www.example4.net</td>
            <td>admin@example4.net</td>
            <td>/var/www/vhosts/example4.net</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Die Log-Files gibt es entsprechend auch pro Domain: /var/log/apache2/example1-access.log u.s.w.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Damit die Dateien <strong>vhosts.conf und vhosts_macros.conf</strong> eingebunden werden, ersetzt man die Zeile</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>Include /etc/apache2/sites-enabled/</td>
        </tr>
    </tbody>
</table>
<div>In der Datei<strong> /etc/apache2/apache2.conf</strong> durch:</div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>Include /etc/apache2/vhosts_macros.conf</div>
            <div>Include /etc/apache2/vhosts.conf</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Jetzt fehlt nur noch ein</div>
<div><strong>/etc/init.d/apache2 restart</strong></div>
<div>damit die &Auml;nderungen wirksam werden.</div>
<div>&nbsp;</div>
<div>Um neue Vhosts anzulegen, gen&uuml;gt es jetzt, einen Eintrag in der Datei<strong> vhosts.conf </strong>anzulegen und&nbsp; ein</div>
<div><strong>/etc/init.d/apache2 restart</strong></div>
<div>durchzuf&uuml;hren.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 25 Apr 2009 13:16:15 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[ISO BIN IMG NRG MDF Images mounten mit Furius ISO Mount]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/iso-bin-img-nrg-mdf-images-mounten-mit-furius-iso-mount.html</link>
      <guid isPermaLink="false">51</guid>
      <description><![CDATA[In diesem Artikel möchte ich kurz zeigen, wie man Images in gängigen Formaten (.iso, .bin, .img, .img, .nrg, .mdf) sehr einfach ins lokale Dateisystem einhängen kann....]]></description>
      <content:encoded><![CDATA[furious,furius,iso,mount,bin,img,nrg,mdf,images,mount<br/><div>
	In diesem Artikel m&ouml;chte ich kurz zeigen, wie man Images in g&auml;ngigen Formaten (.iso, .bin, .img, .img, .nrg, .mdf) sehr einfach ins lokale Dateisystem einh&auml;ngen kann.</div>
<div>
	&nbsp;</div>
<div>
	Dazu verwenden wir das Tool <strong>Furius ISO Mount</strong>.</div>
<div>
	&nbsp;</div>
<div>
	Das Tool ben&ouml;tigt folgende Pakete: <em><strong>fuseiso, mono-runtime, libgtk2.0-cil, libmono-system2.0-cil, gksu</strong></em></div>
<div>
	&nbsp;</div>
<div>
	In diesem Beispiel habe ich das Tool auf einem Ubuntu-System installiert:</div>
<div>
	Ein einfaches <strong>apt-get install fuseiso</strong> sollte auf einem Ubuntu-Desktop gen&uuml;gen, um die Abh&auml;ngigkeiten zu erf&uuml;llen.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt geht es an die <u><strong>Installation</strong></u> von Furius Iso Mount.</div>
<div>
	Dazu kann man die folgenden .deb-Pakete verwenden:</div>
<div>
	32Bit: <a href="http://www.cschramm.net/assets/linux/51/furiusisomount_0.9.0.2-1_i386.deb">www.cschramm.net/assets/linux/51/furiusisomount_0.9.0.2-1_i386.deb</a></div>
<div>
	64Bit: <a href="http://www.cplinux.de/downloads/furiusisomount_0.9.0.2-1_i386.deb">www.cschramm.net/assets/linux/51/</a><a href="http://www.cschramm.net/assets/linux/51/furiusisomount_0.9.0.2-1_amd64.deb">furiusisomount_0.9.0.2-1_amd64.deb</a></div>
<div>
	&nbsp;</div>
<div>
	Die .deb-Pakete kann man auf dem Ubuntu-Desktop &uuml;ber einen Doppelklick mit Hilfe des Paketverwaltungstools Synaptic installieren oder &uuml;ber die Konsole:</div>
<div>
	<em><strong>dpkg -i furiusisomount_0.9.0.2-1_i386.deb</strong></em></div>
<div>
	oder</div>
<div>
	<em><strong>dpkg -i furiusisomount_0.9.0.2-1_amd64.deb</strong></em></div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>UPDATE</strong></u></div>
<div>
	Seit dem Zeitpunkt als dieser Artikel verfasst wurde, gibt es wieder eine neuere Version:</div>
<div>
	<a href="http://www.cschramm.net/assets/linux/51/furiusisomount_0.11.1.1-1_i386.deb">www.cschramm.net/assets/linux/51/furiusisomount_0.11.1.1-1_i386.deb</a><br />
	<a href="http://www.cschramm.net/assets/linux/51/furiusisomount_0.11.1.1-1_amd64.deb">www.cschramm.net/assets/linux/51/furiusisomount_0.11.1.1-1_amd64.deb</a></div>
<div>
	&nbsp;</div>
<div>
	Alternativ kann man sich die Installationsdateien hier herunterladen:</div>
<div>
	<a furiusisomount="" href="http://launchpad.net/furiusisomount/+download" https:="" launchpad.net="">launchpad.net/furiusisomount/+download</a></div>
<div>
	&nbsp;</div>
<div>
	Nachdem das Tool installiert wurde kann man es mit <em><strong>furiusisomount</strong></em> aus der Konsole heraus starten (es empfiehlt sich, einen &quot;benutzerdefinierten Anwendungsstarter&quot; im Panel anzulegen).</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;<img alt="" src="/assets/linux/51/furiusisomount.jpg" style="width: 572px; height: 347px;" /></div>
<div>
	&nbsp;</div>
<div>
	Jetzt mu&szlig; nur noch das Image ausgew&auml;hlt werden, dass dann &uuml;ber die Schaltfl&auml;che &quot;Einbinden&quot; ins Dateisystem gemountet wird.</div>
<div>
	&nbsp;</div>
<div>
	Das eingebundene Image erscheint im unteren Bereich in Form einer Liste. Dort k&ouml;nnen die Images dann ausgew&auml;hlt und ggf. wieder aus dem Dateisystem ausgehangen werden.</div>
]]></content:encoded>
      <pubDate>Sun, 09 Nov 2008 13:35:19 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[mysql Datendateien sichern mit mysqlhotcopy]]></title>
      <link>http://www.cschramm.net/de/linux/datenbank-server/mysql-datendateien-sichern-mit-mysqlhotcopy.html</link>
      <guid isPermaLink="false">50</guid>
      <description><![CDATA[Mit Hilfe des Tools mysqlhotcopy kann man eine Kopie der Datendateien einer Datenbank anlegen, ohne den mySQL-Server herunterfahren zu müssen.
mysqlhotcopy ist ein Perl-Script, das mit dem mySQL-Server automatisch mit installiert wird....]]></description>
      <content:encoded><![CDATA[mysqlhotcopy,mysql,hotcopy,datadir,data,mysqlbackup,backup<br/><div>
	Mit Hilfe des Tools mysqlhotcopy kann man eine Kopie der Datendateien einer Datenbank anlegen, ohne den mySQL-Server herunterfahren zu m&uuml;ssen.</div>
<div>
	mysqlhotcopy ist ein Perl-Script, das mit dem mySQL-Server automatisch mit installiert wird.</div>
<div>
	&nbsp;</div>
<div>
	Mit dem folgenden Befehl sichert man z.B. die Datenbank <strong>test1</strong> in das Verzeichnis <strong>/mysql-backup</strong>.</div>
<div>
	<strong>root</strong> und <strong>rootpass</strong> m&uuml;ssen dabei nat&uuml;rlich auch entsprechend ersetzt werden.</div>
<div>
	&nbsp;</div>
<div>
	<strong>mysqlhotcopy --user=root --password=rootpass test1 /mysql-backup</strong></div>
<div>
	&nbsp;</div>
<div>
	Damit wird in <strong>/mysql-backup</strong> ein Verzeichnis mit dem Namen <strong>test1</strong> angelegt, dass die Datendateien enth&auml;lt.</div>
<div>
	&nbsp;</div>
<div>
	M&ouml;chte man erst einmal einen Test-Lauf starten, ohne den Kopiervorgang wirklich durchzuf&uuml;hren, f&uuml;gt man dem Befehl einfach die Option <strong>--dryrun</strong> hinzu.</div>
<div>
	&nbsp;</div>
<div>
	Eine &Uuml;bersicht aller Optionen erh&auml;lt man mit <strong>mysqlhotcopy --help</strong> oder <strong>perldoc /usr/bin/mysqlhotcopy</strong>.</div>
]]></content:encoded>
      <pubDate>Mon, 20 Oct 2008 11:43:56 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Datenbank-Backups mit mysqldump anlegen]]></title>
      <link>http://www.cschramm.net/de/linux/datenbank-server/datenbank-backups-mit-mysqldump-anlegen.html</link>
      <guid isPermaLink="false">49</guid>
      <description><![CDATA[Hier möchte ich kurz zeigen, wie man auf einfache Art und Weise eine mySQL-Datenbank sichern kann....]]></description>
      <content:encoded><![CDATA[mysqldump,mysql,backup,databases,user,password,dump,sql<br/><div>
	Hier m&ouml;chte ich kurz zeigen, wie man auf einfache Art und Weise eine mySQL-Datenbank sichern kann.</div>
<div>
	&nbsp;</div>
<div>
	Erst einmal legen wir mit Hilfe von mysqldump ein Backup der kompletten Datenbank an, d.h. die .sql-Datei enth&auml;lt eine <strong>Sicherung aller Datenbanken inkl. Struktur und Daten</strong>.</div>
<div>
	&nbsp;</div>
<div>
	Ich erstelle die Backups in meinem Beispiel im Ordner /backup. Den Ordner kann man ggf. ersetzen.</div>
<div>
	Gleiches gilt nat&uuml;rlich f&uuml;r den Benutzer <em><strong>root</strong></em> und das Passwort <em><strong>rootpass</strong></em>.</div>
<div>
	&nbsp;</div>
<div>
	Abschlie&szlig;end kann man die .sql-Datei z.B. mit gzip komprimieren, um Speicherplatz zu sparen.</div>
<div>
	Die Datei kann dann sp&auml;ter wieder mit <em><strong>gzip -d dateiname.sql.gz</strong></em> entpackt werden.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					<div>
						mysqldump --user=root --password=rootpass --all-databases &gt; /backup/complete-backup.sql</div>
					<div>
						gzip /backup/*.sql</div>
				</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Jetzt kann es aber sein, dass man eher <strong>Einzelbackups</strong> seiner Datenbanken haben m&ouml;chte. Dazu habe ich ein einfaches Bash-Script erstellt:</div>
<div>
	&nbsp;</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					for i in `mysql --user=root --password=rootpass -e &quot;show databases&quot;`<br />
					do<br />
					if [ $i != &quot;Database&quot; ] &amp;&amp; [ $i != &quot;information_schema&quot; ] &amp;&amp; [ $i != &quot;test&quot; ]; then<br />
					mysqldump --user=root --password=rootpass --databases $i &gt; /backup/$i.sql<br />
					fi<br />
					done<br />
					gzip /backup/*.sql</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	<div>
		Es legt pro Datenbank eine .sql-Datei mit dessen Namen an, ignoriert dabei die Tabellen information_schema und test.</div>
	<div>
		&nbsp;</div>
</div>
<div>
	Das Script kann man z.B. als Cron-Job f&uuml;r eine n&auml;chtliche Sicherung verwenden.</div>
<div>
	&nbsp;</div>
]]></content:encoded>
      <pubDate>Mon, 20 Oct 2008 11:43:30 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Inkrementelle Backups mit rsnapshot]]></title>
      <link>http://www.cschramm.net/de/linux/backups/inkrementelle-backups-mit-rsnapshot.html</link>
      <guid isPermaLink="false">48</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[rsnapshot,rsync,inkrementell,backup,ssh,sync,snapshot,sicherung,weekly,daily,hourly,monthly<br/><div>Ich werde hier zeigen, wie man automatische Backups f&uuml;r einen Server, eine Workstation oder auch einen Linux-PC zu Hause konfigurieren kann.</div>
<div>&nbsp;</div>
<div><strong>Wichtig!</strong></div>
<div>rsnapshot erstellt nicht jedes Mal ein Komplett-Backup, sondern legt sogen. inkrementelle Backups an.</div>
<div>Dabei verwendet rsnapshot &quot;hard links&quot;.&nbsp; Das spart Speicherplatz und schont die Ressourcen.</div>
<div>Es werden Archiv-Verzeichnisse angelegt (z.B. weekly.0, weekly.1, etc.), die im vorgegebenen Rhythmus rotieren.</div>
<div>&nbsp;</div>
<div>Die n&ouml;tigen Pakete installiert man auf Debian mit: <strong>apt-get install rsync rsnapshot</strong></div>
<div>Auf Gentoo-Systemen z.B. l&auml;&szlig;t sich das Paket mit <strong>emerge -av rsnapshot</strong> installieren.</div>
<div>&nbsp;</div>
<div>Nachdem rsnapshot installiert ist, geht es darum die Konfigurationsdatei zu bearbeiten: <strong>/etc/rsnapshot.conf</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>###############################<br />
            # rsnapshot.conf<br />
            ###############################<br />
            <br />
            # Alle Backups werden unterhalb von diesem Pfad gespeichert<br />
            snapshot_root&nbsp;&nbsp;&nbsp; /media/backup/<br />
            &nbsp;<br />
            # Bei einem Backup auf eine externes Medium wie eine USB-Festplatte sollte dieser Paramater<br />
            # aktiviert sein, da rsnapshot ansonsten den Pfad (bzw. Mount-Point) automatisch neu anlegt<br />
            no_create_root&nbsp;&nbsp;&nbsp; 1<br />
            <br />
            # Externe Programme, die Standardwerte sind normalerweise ok<br />
            cmd_cp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /bin/cp<br />
            cmd_rm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /bin/rm<br />
            cmd_rsync&nbsp;&nbsp;&nbsp; /usr/bin/rsync<br />
            cmd_ssh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin/ssh<br />
            cmd_logger&nbsp;&nbsp;&nbsp; /usr/bin/logger<br />
            cmd_du&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin/du<br />
            cmd_rsnapshot_diff&nbsp;&nbsp;&nbsp; /usr/bin/rsnapshot-diff<br />
            <br />
            # Die Backup-Intervalle kann man hier festlegen. Wie viele Backups will man f&uuml;r den Zeitraum<br />
            # r&uuml;ckwirkend erhalten? In diesem Beispiel behalten wir die letzten 8 Backups, die w&ouml;chentl.<br />
            # angefertigt werden.<br />
            interval&nbsp;&nbsp;&nbsp; weekly&nbsp;&nbsp;&nbsp; 8<br />
            <br />
            # Andere Beispiele:<br />
            # interval&nbsp;&nbsp;&nbsp; monthly&nbsp;&nbsp;&nbsp; 2<br />
            # interval&nbsp;&nbsp;&nbsp; hourly&nbsp;&nbsp;&nbsp; 6<br />
            # interval&nbsp;&nbsp;&nbsp; daily&nbsp;&nbsp;&nbsp; 7<br />
            <br />
            # Mehr oder weniger Details ausgeben? M&ouml;gliche Werte sind 1 - 5.<br />
            # Dabei ist 1 der kleinste und 5 der h&ouml;chste Wert. 2 ist Standard.<br />
            verbose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />
            <br />
            # Analog zu verbose, allerdings betrifft das effektiv nur den Output in die Log-Datei<br />
            loglevel&nbsp;&nbsp;&nbsp; 3<br />
            &nbsp;<br />
            # Hier legen wir eine Log-Datei fest<br />
            logfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/log/rsnapshot.log<br />
            <br />
            # Damit nicht mehrere Instanzen gleichzeitig gestartet werden, wird ein Lock-File erstellt.<br />
            lockfile&nbsp;&nbsp;&nbsp; /var/run/rsnapshot.pid<br />
            &nbsp;<br />
            # Hier kann man optional noch bestimmte Dateien/Verzeichnisse ausschlie&szlig;en oder das<br />
            # Backup auf bestimmte Dateien begrenzen. Z.B. lost+found-Verzeichnisse k&ouml;nnte man als<br />
            # exclude eintragen.<br />
            #include&nbsp;&nbsp;&nbsp; ???<br />
            #exclude&nbsp;&nbsp;&nbsp; ???<br />
            #include_file&nbsp;&nbsp;&nbsp; /path/to/include/file<br />
            #exclude_file&nbsp;&nbsp;&nbsp; /path/to/exclude/file<br />
            <br />
            ###############################<br />
            ### BACKUPS<br />
            ###############################<br />
            <br />
            # LOCALHOST<br />
            backup&nbsp;&nbsp;&nbsp; /home/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost/<br />
            backup&nbsp;&nbsp;&nbsp; /etc/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost/<br />
            backup&nbsp;&nbsp;&nbsp; /usr/local/&nbsp;&nbsp;&nbsp; localhost/<br />
            <br />
            # EXAMPLE.COM<br />
            backup&nbsp;&nbsp;&nbsp; root@example.com:/home/&nbsp;&nbsp;&nbsp; example.com/<br />
            backup&nbsp;&nbsp;&nbsp; root@example.com:/etc/&nbsp;&nbsp;&nbsp; example.com/</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Die o.a. Datei ist gedacht f&uuml;r ein w&ouml;chentliches Backup.</div>
<div>Wichtig ist der Bereich ganz unten, die Zeilen die mit <strong>backup</strong> beginnen. Dabei kommt zuerst das Commando backup, dann das Quell- und abschlie&szlig;end das Ziel-Unterverzeichnis (relativ zum <em><strong>snapshot_root</strong></em>).</div>
<div><strong>ACHTUNG! Die Werte hier sind durch Tabs getrennt</strong>, keine Leerzeichen.</div>
<div>&nbsp;</div>
<div>Wie man sieht, kann man nicht nur lokale Verzeichnisse sichern, sondern auch Verzeichnisse anderer Rechner im LAN oder auch Verzeichnisse eines entfernten Servers sichern.</div>
<div>Dazu verbindet sich rsnapshot via SSH. Wie man eine Verbindung ohne Passworteingabe zu konfiguriert, habe ich hier n&auml;her beschrieben:</div>
<div><a href="http://www.cplinux.de/threads/view/ssh-zugriff-ohne-anmeldung.html">www.cplinux.de/threads/view/ssh-zugriff-ohne-anmeldung.html</a></div>
<div>&nbsp;</div>
<div>In meinem Beispiel habe ich die Backups auf eine externe USB-Festplatte gesichert, die in <strong>/media/backup</strong> ins Dateisystem gemountet ist.</div>
<div>Damit ich nun das Backup sehr bequem starten kann, habe ich noch folgendes, kleines Shell-Skript angelegt:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>#!/bin/bash<br />
            <br />
            MOUNTED=`grep -c &quot;/media/backup&quot; /proc/mounts`<br />
            <br />
            if [ $MOUNTED -gt 0 ];then<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rsnapshot -v -c /etc/rsnapshot.conf weekly<br />
            else<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;/media/backup is not mounted! Cannot start backup!&quot;;<br />
            fi</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Da z.B. Ubuntu und Debian das Laufwerk automatisch mounten, habe ich hier auf eine entspr. Anweisung im Script verzichtet.</div>
<div>Einen entspr. Befehl k&ouml;nnte man aber in Zeile 2 noch einf&uuml;gen, z.B. <em><strong>mount /dev/sdh1 /media/backup</strong></em></div>
<div><em>Bitte unbedingt beim Kopieren des Skripts auf die Einhaltung der Leerzeichen achten!</em></div>
<div>&nbsp;</div>
<div>So, jetzt kann man das Backup prinzipiell starten.</div>
<div>Entweder f&uuml;hrt man dazu das o.a. Shell-Script aus oder man startet es durch den Befehl:</div>
<div><strong>rsnapshot -v -c /etc/rsnapshot.conf weekly</strong></div>
<div>&nbsp;</div>
<div>Das Intervall weekly mu&szlig; man ggf. (je nach Konfigurationsdatei) durch daily, hourly, etc. ersetzen.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sun, 19 Oct 2008 16:03:31 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Remote Verzeichnisse per SSHFS mounten]]></title>
      <link>http://www.cschramm.net/de/linux/ssh-vnc/remote-verzeichnisse-per-sshfs-mounten.html</link>
      <guid isPermaLink="false">47</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>So kann man auf einem Debian-System Verzeichnisse anderer Server, zu denen man SSH-Zugriff hat, in das lokale Dateisystem einh&auml;ngen.</div>
<div>&nbsp;</div>
<div>Erst mu&szlig; das erforderliche Paket installiert werden:</div>
<div><strong>apt-get install sshfs</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Ok, wenn das Paket installiert ist, mu&szlig; nun das Kernel-Modul aktiviert werden:</div>
<div><strong>modprobe fuse</strong></div>
<div>&nbsp;</div>
<div>Jetzt erstellen wir einen Mount-Point, z.B.:</div>
<div><strong>mkdir /mnt/sshfs_dir</strong></div>
<div>&nbsp;</div>
<div>Jetzt h&auml;ngen wir das Verzeichnis noch ein:</div>
<div><strong>sshfs user@192.168.2.20:/home/user /mnt/sshfs_dir</strong></div>
<div>&nbsp;</div>
<div>Der Beispiel-Befehl h&auml;ngt das Verzeichnis /home/user des Servers/PCs 192.168.2.20 in das lokale Dateisystem /mnt/sshfs_dir ein. Als Benutzername f&uuml;r 192.168.2.20 wird user verwendet.</div>
<div>&nbsp;</div>
<div><strong><u>Die am h&auml;ufigsten ben&ouml;tigten Optionen:</u></strong></div>
<ul>
    <li>Mit der Option<strong> -p 222</strong> kann man statt dem Standard-Port 22 einen anderen verwenden</li>
    <li>Mit der Option -o kann man f&uuml;r das gemountete Verzeichnis u.a. eine umask (z.B. <strong>umask=0777</strong>), eine User-ID (<strong>uid=501</strong>), eine Gruppen-ID (<strong>gid=1000</strong>) und vieles mehr setzen.</li>
</ul>
<div>&nbsp;</div>
<div>Ein komplettes Beispiel:</div>
<div>
<div>&nbsp;</div>
<div><strong>sshfs user@192.168.2.20:/home/user /mnt/sshfs_dir -p 2244 -o umask=0775,uid=1001,gid=1000</strong></div>
</div>
<div>&nbsp;</div>
<div>F&uuml;r eine Liste aller Optionen, siehe <strong>sshfs --help</strong></div>
<div>&nbsp;</div>
<div>Wenn man auf die Eingabe des Passworts beim Einh&auml;ngen verzichten will, empfiehlt es sich, so vorzugehen:</div>
<div><a href="http://www.cplinux.de/threads/view/ssh-zugriff-ohne-anmeldung.html">www.cplinux.de/threads/view/ssh-zugriff-ohne-anmeldung.html</a></div>
<div>&nbsp;</div>
<div>That's it.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 27 Sep 2008 08:48:26 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[XEN-Installation auf CentOS 5.2]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/xen-installation-auf-centos-52.html</link>
      <guid isPermaLink="false">46</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div><strong>Betriebssysteminstallation:</strong></div>
<div>W&auml;hrend der Installation mu&szlig; in Anaconda der Punkt Virtualisierung ausgew&auml;hlt werden. Dadurch werden automatisch der XEN-Kernel und die entsprechenden Tools installiert.</div>
<div>&nbsp;</div>
<div><strong>XEN nachinstallieren:</strong></div>
<div>Als root kann man die Pakete mit <strong>yum install xen-kernel xen</strong> nachinstallieren.</div>
<div>Danach mu&szlig; ein reboot durchgef&uuml;hrt werden, um den neuen Kernel zu booten.<br />
Bei den aktuellen Versionen von CentOS ist kein manuelles Eingreifen in den Bootloader notwendig.</div>
<div>Ein <strong>uname -a</strong> nach dem Reboot sollte den XEN-Kernel zeigen.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Soweit so gut, jetzt geht es daran, ein erstes Image anzulegen. Als Betriebsystem nehme ich als Beispiel ebenfalls CentOS. Mit dem Befehl <strong>virt-install</strong> startet man die Installation.</div>
<div>&nbsp;</div>
<div><em>What is the name of your virtual machine? </em><strong>xen01</strong><br />
<em>How much RAM should be allocated (in megabytes)?</em> <strong>256</strong><br />
<em>What would you like to use as the disk (path)?</em> <strong>/xen/xen01.img</strong><br />
<em>How large would you like the disk (/xen/xen01.img) to be (in gigabytes)?</em> <strong>10</strong><br />
<em>Would you like to enable graphics support?</em> (yes or no) <strong>no</strong><br />
<em>What is the install location?</em> <strong>ftp://ftp.tu-chemnitz.de/pub/linux/centos/5.2/os/i386</strong></div>
<div><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>oder<strong>&nbsp; http://mirror.centos.org/centos/5.2/os/i386</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>Anmerkung:</strong></div>
<div>M&ouml;chte man z.B. Debian, Ubuntu oder eine andere Distribution als Gast mit Hilfe eines ISO/CD-Images installieren kann man das tun, indem man virt-install die entsprechende Option direkt mitgibt.</div>
<div>Eine Liste aller Optionen kann man mit <strong>virt-install --help </strong>einsehen.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Danach beginnt dann die <strong>Installation</strong>.</div>
<div>W&auml;hrend der Installation sind noch wie bei der eigentlichen CentOS-Installation auch die Partitionen und das Netzwerk einzurichten, Pakete auszuw&auml;hlen, etc.</div>
<div>Nach der Installation sollte sich eine Konfigurationsdatei mit allen wichtigen Angaben in /etc/xen/ befinden.</div>
<div>Der Dateiname orientiert sich am Namen des Images: xen01&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt noch einige <strong>Befehle</strong>:</div>
<ul>
    <li><strong>xm list</strong> zeigt eine Liste aller verf&uuml;gbaren Images.</li>
    <li><strong>xm create -c /etc/xen/xen01 </strong>startet das Image.</li>
    <li><strong>xm shutdown xen01</strong> beendet das Image.</li>
    <li><strong>xm destroy xen01</strong> beendet das Image direkt, ohne das OS herunterzufahren.</li>
    <li><strong>xm console xen01</strong> erm&ouml;glicht es, sich auf der Konsole des Gastes einzuloggen.</li>
    <li><strong>xm help </strong>zeigt eine &Uuml;bersicht aller verf&uuml;gbaren Befehle.</li>
</ul>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>M&ouml;chte man ein oder mehrere Images beim Systemstart automatisch hochfahren, mu&szlig; man einen Symlink auf die Konfigurationsdatei im Verzeichnis <strong>/etc/xen/auto</strong> erstellen:</div>
<div><em><strong>mkdir /etc/xen/auto</strong></em></div>
<div><em><strong>ln -s /etc/xen/xen01 /etc/xen/auto/xen01</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><br />
That's it.</div>]]></content:encoded>
      <pubDate>Sun, 14 Sep 2008 11:22:40 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[STARTTLS auf Funktion testen]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/starttls-auf-funktion-testen.html</link>
      <guid isPermaLink="false">44</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Man kann sehr leicht pr&uuml;fen, ob STARTTLS funktioniert. Dazu verwendet man den folgenden Befehl:</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>stunnel -D 7 -n smtp -f -c -r ip_oder_name_des_mailservers:25</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Die Optionen im Detail:</div>
<div>
<ul>
    <li><strong>D 7</strong> Je h&ouml;her der Wert, desto mehr Informationen bekommt man und umgekehrt. D steht f&uuml;r Debug Level.</li>
    <li><strong>n smtp</strong> gibt das zu verwendende Protokoll an</li>
    <li><strong>f</strong> bedeutet, dass der Prozess im Vordergrund l&auml;uft, also direkt von der Commandline</li>
    <li><strong>c</strong> aktiviert den Client Mode (mit SSL auf Remote-Seite)</li>
    <li><strong>r ip_oder_name_des_mailservers:25</strong> gibt stunnel an, auf welchen Server und &uuml;ber welchen Port sich das Tool verbinden soll.</li>
</ul>
</div>]]></content:encoded>
      <pubDate>Fri, 12 Sep 2008 07:08:46 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Screenshots auf der Konsole mit kwebdesktop]]></title>
      <link>http://www.cschramm.net/de/linux/skripte/screenshots-auf-der-konsole-mit-kwebdesktop.html</link>
      <guid isPermaLink="false">43</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[kwebdesktop,screenshot,web,linux,console,vnc,server<br/><div>F&uuml;r Suchmaschinen, Webverzeichnisse oder andere Webseiten ist es w&uuml;nschenswert, f&uuml;r die gelisteten Seiten Screenshots zu haben.</div>
<div>&nbsp;</div>
<div>Screenshots lassen sich mit Linux automatisiert erstellen, ohne gleich den kompletten Desktop zu installieren.</div>
<div>&nbsp;</div>
<div>Zuerst installiert man die ben&ouml;tigten Pakete, in <u><strong>Debian Etch</strong></u>:</div>
<div><strong>apt-get install vncserver kdesktop xfonts-base xfonts-100dpi xfonts-75dpi xfonts-intl-european xfonts-scalable xfonts-terminus xfonts-terminus-dos</strong></div>
<div>&nbsp;</div>
<div>In <u><strong>Debian Lenny</strong></u> gen&uuml;gt ein <strong>apt-get install vnc4server</strong></div>
<div>&nbsp;</div>
<div>Das Paket kdesktop enth&auml;lt das Tool <strong>kwebdesktop</strong>, das f&uuml;r die Erstellung der Screenshots verwendet wird.</div>
<div>Damit man nicht den kompletten Desktop installieren mu&szlig;, nehmen wir hier einfach einen VNC-Server zu Hilfe.</div>
<div>&nbsp;</div>
<div>Nach Installation der Pakete und deren Abh&auml;ngigkeiten geht es jetzt daran, den <strong>VNC-Server</strong> zu starten.</div>
<div>&nbsp;</div>
<div>Bei der Installation auf Debian Etch ist mir aufgefallen, dass in der Datei <strong>/usr/bin/vncserver</strong> einige Font-Verzeichnisse angegeben sind, die auf meinem Test-System nicht existierten.</div>
<div>Die entsprechende Passage im Source-Code mu&szlig; man ggf. anpassen:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>if (!$fontPath) {<br />
            &nbsp;&nbsp;&nbsp; $fontPath = &quot;usr/share/fonts/X11/misc/,&quot;.<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;usr/share/fonts/X11/Type1/,&quot;.<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;usr/share/fonts/X11/75dpi/,&quot;.<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;usr/share/fonts/X11/100dpi/,&quot;<br />
            }</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Mit dem nachfolgenden Befehl starten wir jetzt den VNC-Server. Den ersten Aufruf sollte man manuell ausf&uuml;hren, da nach einem Passwort gefragt wird.</div>
<div><strong>vncserver :1 -geometry 1024x768 -depth 24</strong></div>
<div>In Debian Lenny ist das ensprechend: <strong>vnc4server :1 -geometry 1024x768 -depth 24</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>1024x768 ist dabei die Aufl&ouml;sung (H&ouml;hexBreite in px) und 24 die Farbtiefe (24Bit).</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Es empfiehlt sich, falls die Maschine von anderen Maschinen erreichbar ist, eine Firewall-Regel einzurichten. Der VNC-Server benutzt die Ports<strong> 5901/tcp und 5801/tcp</strong>.</div>
<div>&nbsp;</div>
<div>L&auml;uft der VNC-Server, kann man mit dem folgenden Befehl einen Screenshot erstellen:</div>
<div>&nbsp;</div>
<div><strong>kwebdesktop --display :1 1024 768 cplinux.png http://www.cplinux.de</strong></div>
<div>&nbsp;</div>
<div>Wie man schon vermutet, ist 1024 in diesem Fall die Breite und 768 die H&ouml;he des Screenshots.</div>
<div>Die Display-Option ist wichtig, damit kwebdesktop den VNC-Screen verwendet.</div>
<div>&nbsp;</div>
<div>Das entstandene png kann man z.B. wie <a href="http://www.cplinux.de/threads/view/bilder-mit-imagemagick-bearbeiten.html">hier</a> beschrieben bearbeiten.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt sollte es ein Leichtes sein, das Ganze mit Hilfe eines PHP-, Perl- oder Bash-Scriptes zu automatisieren.</div>]]></content:encoded>
      <pubDate>Thu, 04 Sep 2008 11:41:13 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[SSH-Zugriffe verhindern per hosts.deny]]></title>
      <link>http://www.cschramm.net/de/linux/ssh-vnc/ssh-zugriffe-verhindern-per-hostsdeny.html</link>
      <guid isPermaLink="false">41</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Mit Hilfe der beiden Dateien <strong>/etc/hosts.allow</strong> und <strong>/etc/hosts.deny</strong> ist es m&ouml;glich, sehr leicht und ohne Neustart irgendwelcher Dienste Verbindungen - z.B. zu SSH - zu blockieren oder explizit zu erlauben.</div>
<div>&nbsp;</div>
<div>Die Zeilen werden eingeleitet mit <strong>ALL: </strong>(alle Anfragen) oder <strong>ALL EXCEPT</strong> (alle Anfragen au&szlig;er).</div>
<div>&nbsp;</div>
<div>Im nachfolgenden Beispiel werden alle Anfragen von 123.123.123.123, dem Bereich 124.124.124. und alle Anfragen der Domain example.net geblockt.</div>
<div><strong>/etc/hosts.deny</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>ALL: 123.123.123.123 124.124.124. example.net</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Genauso wie mit der ALL-Anweisung l&auml;&szlig;t sich eine Ausnahmeregelung mit ALL EXCEPT realisieren:</div>
<div><strong>/etc/hosts.allow</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>ALL EXCEPT 123.123.123.123 124.124.124. example.net</td>
        </tr>
    </tbody>
</table>
</div>
<div>In die Datei hosts.deny tr&auml;gt man also IP-Adressen, Hostnamen oder Domains ein, die man blocken m&ouml;chte.</div>
<div>In der Datei hosts.allow kann man Verbindungen explizit zulassen.</div>
<div>&nbsp;</div>
<div>Es gibt nun auch die M&ouml;glichkeit, Traffic generell zu blocken und Verbindungen nur f&uuml;r eine oder einige Hosts zuzulassen:</div>
<div><strong>/etc/hosts.deny</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>ALL EXCEPT 123.123.123.123</td>
        </tr>
    </tbody>
</table>
Jetzt werden alle Verbindungen geblockt, au&szlig;er von 123.123.123.123.</div>
<div>Das ist z.B. sinnvoll, wenn die Verbindungen immer von einer statischen IP-Adresse oder einen bestimmten Bereich aus erfolgen.</div>
<div>&nbsp;</div>
<div><strong>Bitte unbedingt beachten, dass alle &Auml;nderungen sofort wirksam sind!</strong></div>]]></content:encoded>
      <pubDate>Sat, 16 Aug 2008 11:30:32 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix Content-Filter mit Spamassassin]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-content-filter-mit-spamassassin.html</link>
      <guid isPermaLink="false">40</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Hier werde ich erkl&auml;ren, wie man in wenigen Schritten einen einfachen Content-Filter mit Spamassassin in den Postfix-SMTP-Server integrieren kann.</div>
<div>&nbsp;</div>
<div>Zuerst legen wir einen neuen Benutzer an, unter dem der Filter laufen soll, in diesem Fall simpel <strong>filter</strong>:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>groupadd -g 5002 filter<br />
            useradd -u 5002 -g 5002 -d /home/filter -s /bin/false filter</div>
            <div>mkdir /home/filter/tempfs</div>
            <div>chown filter:filter /home/filter/tempfs</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Nat&uuml;rlich sollte spamassassin auf dem Server installiert sein. Unter Debian installiert man ih mit:</div>
<div><strong>apt-get install spamassassin spamc</strong></div>
<div>&nbsp;</div>
<div>Nach der Installation mu&szlig; man noch in der Datei<strong> /etc/default/spamassassin</strong> den Parameter <strong>ENABLED=1</strong> setzen und den Dienst mit <strong>/etc/init.d/spamassassin restart</strong> neu starten.</div>
<div>&nbsp;</div>
<div>Jetzt wird das eigentliche Skript erstellt: <strong>/home/filter/spamchk</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>#!/bin/sh<br />
            <br />
            SENDMAIL=&quot;/usr/sbin/sendmail -i&quot;<br />
            EGREP=/bin/egrep<br />
            EX_UNAVAILABLE=69<br />
            <br />
            # (SPAMLIMIT 5.5 = &quot;*****&quot; )<br />
            SPAMLIMIT=7<br />
            <br />
            # Aufr&auml;umen im Fehlerfall oder bei Abbruch<br />
            trap &quot;rm -f /home/filter/tempfs/out.$$&quot; 0 1 2 3 15<br />
            <br />
            # Via Pipe wird die Mail an spamc &uuml;bergeben<br />
            cat | /usr/bin/spamc -u filter &gt; /home/filter/tempfs/out.$$<br />
            <br />
            # Spamlimit checken<br />
            if $EGREP -q &quot;^X-Spam-Level: *{$SPAMLIMIT,}&quot; &lt; /home/filter/tempfs/out.$$<br />
            then<br />
            &nbsp; # Lernvorgang f. SPAM<br />
            &nbsp; /usr/bin/sa-learn -u filter --spam /home/filter/tempfs/out.$$ <br />
            &nbsp; # Alternativ kann man hier auch die Nachricht l&ouml;schen</div>
            <div>&nbsp; # rm -f /home/filter/tempfs/out.$$<br />
            &nbsp; # oder beliebige andere Aktionen durchf&uuml;hren.<br />
            else<br />
            &nbsp; # Lernvorgang f. HAM<br />
            &nbsp; /usr/bin/sa-learn -u filter --ham /home/filter/tempfs/out.$$<br />
            &nbsp; # Alternativ kann man die sendmail-Anweisung (siehe unten) hier her <br />
            &nbsp; # kopieren und nur zustellen, wenn sie nicht als Spam erkannt wurde.<br />
            fi<br />
            <br />
            # Sende E-Mail in jedem Fall an Empf&auml;nger.<br />
            # Wenn der E-Mail-Client so konfiguriert ist, dass er die Kopfzeilen von<br />
            # Spamassassin erkennt, wird er die E-Mail in den Junk-Ordner verschieben,<br />
            # wenn sie als Spam eingestuft wurde.<br />
            $SENDMAIL &quot;$@&quot; &lt; /home/filter/tempfs/out.$$<br />
            <br />
            # Tempor&auml;re Datei wieder l&ouml;schen<br />
            rm -f /home/filter/tempfs/out.$$<br />
            <br />
            # Jetzt noch den sendmail exit status zur&uuml;ckgeben<br />
            exit $?</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Jetzt mu&szlig; noch die Postfix-Konfiguration angepasst werden, und zwar in der Datei <strong>/etc/postfix/master.cf</strong>.</div>
<div>&nbsp;</div>
<div>Weiter unten in der Datei tr&auml;gt man den neuen Dienst ein:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>spamchk&nbsp;&nbsp; unix&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
            &nbsp; flags=Rq user=filter argv=/home/filter/spamchk -f ${sender} -- ${recipient}</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Jetzt modifiziert man den Dienst SMTP, damit er das Skript benutzt:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>smtp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; smtpd<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o content_filter=spamchk:dummy</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>So, jetzt noch Postfix neu starten: <strong>/etc/init.d/postfix restart</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Noch eine <strong>Anmerkung</strong>: Hat man seinen E-Mail-Client, so konfiguriert, dass er Spamassassin-Header erkennt, gen&uuml;gt auch schon folgendes Skript:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>#!/bin/sh<br />
            <br />
            SENDMAIL=&quot;/usr/sbin/sendmail -i&quot;<br />
            EGREP=/bin/egrep<br />
            EX_UNAVAILABLE=69<br />
            SPAMLIMIT=7<br />
            <br />
            # Aufr&auml;umen im Fehlerfall oder bei Abbruch<br />
            trap &quot;rm -f /home/filter/tempfs/out.$$&quot; 0 1 2 3 15<br />
            <br />
            # Via Pipe wird die Mail an spamc &uuml;bergeben<br />
            cat | /usr/bin/spamc -u filter &gt; /home/filter/tempfs/out.$$<br />
            <br />
            # Sende E-Mail in jedem Fall an Empf&auml;nger.<br />
            $SENDMAIL &quot;$@&quot; &lt; /home/filter/tempfs/out.$$<br />
            <br />
            # Tempor&auml;re Datei wieder l&ouml;schen<br />
            rm -f /home/filter/tempfs/out.$$<br />
            <br />
            # Jetzt noch den sendmail exit status zur&uuml;ckgeben<br />
            exit $?</td>
        </tr>
    </tbody>
</table>
</div>
<div>Die Einstellungen in Thunderbird findet man unter Bearbeiten -&gt; Konten -&gt; Junk-Filter -&gt; &quot;Junk-Kopfzeilen dieses externen Filters vertrauen&quot;.</div>
<div>Damit kommen die Mails zwar an, werden aber aussortiert.</div>
<div>Es empfiehlt sich in diesem Fall, in der Datei<strong> /etc/spamassassin/local.cf</strong> oder in <strong>/home/filter/.spamassassin/user_prefs</strong> die Option <strong>bayes_auto_learn 1</strong> zu setzen.</div>]]></content:encoded>
      <pubDate>Sat, 16 Aug 2008 11:28:51 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Dateien und Verzeichnisse suchen mit dem Linux-Tool find]]></title>
      <link>http://www.cschramm.net/de/linux/skripte/dateien-und-verzeichnisse-suchen-mit-dem-linux-tool-find.html</link>
      <guid isPermaLink="false">39</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Das Tool <strong>find</strong> ist normalerweise in jeder g&auml;ngigen Linux-Distribution enthalten.</div>
<div>&nbsp;</div>
<div><u>Hier sind einige Befehle, die bei der t&auml;glichen Arbeit und beim Auffinden von Dateien sehr hilfreich sein k&ouml;nnen:</u></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>find /home -name &quot;test.txt&quot; -type f</strong></div>
<div>Dieser Befehl sucht nach allen Dateien mit dem Namen <em><strong>test.txt</strong></em> unterhalb von <em><strong>/home</strong></em>.</div>
<div>
<div>Die Option <em><strong>-type f</strong></em> (file) bewirkt hier, dass nur nach Dateien gesucht wird.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><em><strong>find /home -name &quot;testdir&quot; -type d</strong></em></div>
<div>
<div>
<div>Dieser Befehl sucht nach allen Verzeichnissen mit dem Namen <em><strong>testdir</strong></em> unterhalb von <em><strong>/home</strong></em>.</div>
<div>Die Option <em><strong>-type d</strong></em> (directory) bewirkt hier, dass nur nach Verzeichnissen gesucht wird.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
</div>
<div><strong>find /home -name &quot;test&quot; -type l</strong></div>
<div>
<div>
<div>
<div>Dieser Befehl sucht nach allen Links (symbolische Links, hard links) mit dem Namen <em><strong>test</strong></em> unterhalb von <em><strong>/home</strong></em>.</div>
<div>Die Option <em><strong>-type l</strong></em> (link) bewirkt hier, dass nur nach eben diesen Links gesucht wird.</div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
</div>
<div><strong>find /home -name &quot;testdir&quot; -type d -exec rm -rf {}\;</strong></div>
Findet alle Verzeichnisse mit dem Namen <em><strong>testdir</strong></em> unterhalb von <em><strong>/home</strong></em> und l&ouml;scht sie.</div>
<div>Dass das Verzeichnis gel&ouml;scht wird, erreicht man durch die Option <em><strong>-exec</strong></em>. Statt <em><strong>rm -rf</strong></em> k&ouml;nnte man auch beliebige andere Befehle einf&uuml;gen.</div>
<div>Die beiden Klammern sind dabei der Platzhalter f&uuml;r das Ergebnis der Suche.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Eine Liste aller Optionen bekommt man mit</div>
<div><strong>find --help</strong></div>
<div>bzw.</div>
<div><strong>man find</strong></div>
</div>
</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 16 Aug 2008 11:26:49 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Bilder mit Imagemagick bearbeiten]]></title>
      <link>http://www.cschramm.net/de/linux/skripte/bilder-mit-imagemagick-bearbeiten.html</link>
      <guid isPermaLink="false">38</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Das Paket Imagemagick bringt unter Linux ein das Programm <strong>convert</strong> mit, dass sich normalerweise in /usr/bin befindet.</div>
<div>&nbsp;</div>
<div>Auf Debian-basierenden Systemen l&auml;&szlig;t es sich mit <strong>apt-get install imagemagick</strong> installieren.</div>
<div>Auf einem Gentoo-System mit <strong>emerge imagemagick</strong>, auf CentOS mit <strong>yum install imagemagick</strong>.</div>
<div>&nbsp;</div>
<div>Mit Hilfe dieses Tools, lassen sich &uuml;ber die Konsole schnell und einfach Bilder konvertieren, Thumbnails generieren und bearbeiten.</div>
<div>&nbsp;</div>
<div>Einige Beispiele:</div>
<div>&nbsp;</div>
<div><strong>Aus allen jpg-Bildern eines Ordners 120px gro&szlig;e Thumbnails generieren:</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>mkdir thumbs</div>
            <div>for i in `ls *.jpg`</div>
            <div>do</div>
            <div>convert -thumbnail 120 $i thumbs/$i</div>
            <div>done</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>Alternativ kann man die Option resize verwenden, um die Bildgr&ouml;&szlig;e zu &auml;ndern:</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>convert -resize 640x480 $i thumbs/$i</td>
        </tr>
    </tbody>
</table>
</div>
<div>Dabei ist 640 die Breite und 480 die H&ouml;he in Pixeln. Man kann stattdessen auch 640x oder x480 mitgeben, um nur eine Seite mit fester L&auml;nge zu haben.</div>
<div>&nbsp;</div>
<div>Prinzipiell kann man alle Befehle so auf der Konsole eintippen - Zeile f&uuml;r Zeile - oder sie in ein Shell-Skript umwandeln.</div>
<div>Shell-Skripte auf der Bash beginnen in der 1. Zeile mit <strong>#!/bin/bash</strong> und haben i.d.R. die Dateiendung <strong>.sh</strong>.</div>
<div>Um also z.B. <strong>aus allen Bildern eines Verzeichnisses, dass man als Parameter &uuml;bergibt, Thumbnails zu generieren</strong>, k&ouml;nnte man ein Skript wie folgt aufbauen:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>#!/bin/bash</div>
            <div>
            <div>cd $1</div>
            <div>mkdir thumbs</div>
            <div>for i in `ls *.jpg`</div>
            <div>do</div>
            <div>convert -thumbnail 120 $i thumbs/$i</div>
            <div>done</div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
Das Skript kann man nun z.B. als convImages.sh abspeichern und mit</div>
<div><strong>sh convImages.sh /home/user/bilder</strong></div>
<div>aufrufen, um aus allen Bildern dort Thumbnails zu generieren.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt kann man mit convert aber nicht nur die Gr&ouml;&szlig;e von Bildern &auml;ndern.</div>
<div>Man kann auch das Format &auml;ndern, einfach durch Eingabe von:</div>
<div><strong>convert bild.png bild.jpg</strong></div>
<div>Der Befehl konvertiert das Bild von png nach jpg.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>M&ouml;chte man <strong>Bilder drehen</strong>, geht das mit der Option <strong>rotate</strong>:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>convert -rotate &quot;+90&quot; bild.jpg bild_rotiert.jpg</td>
        </tr>
    </tbody>
</table>
Dabei wird das Bild, wie man schon vermuten kann um 90Grad gedreht.</div>
<div>Das + bewirkt eine Drehung im Uhrzeigersinn, ein - eine Drehung gegen den Uhrzeigersinn.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Damit lassen sich kleine Bildsammlungen relativ schnell und komfortabel in das gew&uuml;nschte Format konvertieren, drehen oder verkleinern.</div>]]></content:encoded>
      <pubDate>Sat, 16 Aug 2008 11:25:30 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[VSERVER VirtualBox: Guest-Ports auf dem Host bereitstellen]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/vserver-virtualbox-guest-ports-auf-dem-host-bereitstellen.html</link>
      <guid isPermaLink="false">37</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Wenn man einfach nur einen Guest-Port aus einem Image auf dem Host bereitstellen will, kann man das mit folgenden Befehlen bew&auml;ltigen. In dem Beispiel habe ich den SSH-Port aus dem Image VBOX01 auf dem Host bereitgestellt.</div>
<div>&nbsp;</div>
<div><em><strong>VBoxManage setextradata VBOX01 &quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort&quot; 2222<br />
VBoxManage setextradata </strong></em><em><strong>VBOX01</strong></em><em><strong> &quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort&quot; 22<br />
VBoxManage setextradata </strong></em><em><strong>VBOX01</strong></em><em><strong> &quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/UDP&quot; 0</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Bitte aber dabei beachten, dass das Image vorher beendet und danach neu gestartet werden mu&szlig;:</div>
<div><em><strong>VBoxManage controlvm &quot;VBOX01&quot; poweroff</strong></em></div>
<div><em><strong>....</strong></em></div>
<div><em><strong>VBoxManage startvm &quot;VBOX01&quot; -type vrdp</strong></em></div>
<div>&nbsp;</div>
<div>Jetzt kann man sich via SSH &uuml;ber die IP des Hosts und den Port 2222 auf das Image VBOX01 verbinden.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Fri, 02 May 2008 12:59:07 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[VSERVER VirtualBox: Netzwerk-Bridge]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/vserver-virtualbox-netzwerk-bridge.html</link>
      <guid isPermaLink="false">36</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>So richtet mann schnell und unkompliziert eine <strong>Netzwerk-Bridge auf dem Host</strong> ein:</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>1. Zuerst m&uuml;ssen die erforderlichen Pakete installiert werden:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>apt-get install bridge-utils</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>2. Jetzt muss ein neues Interface in der Datei /etc/network/interfaces eingetragen werden:</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>auto br0</div>
            <div>iface br0 inet dhcp</div>
            <div>bridge_ports eth0</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>3. Jetzt das Netzwerk neu starten mit</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>/etc/init.d/networking restart</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>4. Jetzt legen wir ein Interface vbox0 f&uuml;r Virtualbox an, dass wir der Bridge zuordnen.</div>
<div>&nbsp;&nbsp;&nbsp; USER mu&szlig; dabei durch den Benutzer ersetzt werden, unter dem Virtualbox ausgef&uuml;hrt wird.</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>VBoxAddIF vbox0 USER br0</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>5. Jetzt ordnen wir noch das neue Interface dem Virtualbox-Image zu.</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>VBoxManage modifyvm &quot;Name des Virtualbox Images&quot; -hostifdev1 vbox0</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt das Image neu starten!</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Fri, 02 May 2008 12:58:49 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[VirtualBox: Images per Init-Script starten]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/virtualbox-images-per-init-script-starten.html</link>
      <guid isPermaLink="false">35</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Hierzu empfiehlt es sich, ein kleines Shell-Skript zu erstellen. In diesem Beispiel ist das Virtualbox-Verzeichnis <strong>/virtualbox</strong> und das Tool <strong>VBoxManage</strong> befindet sich in /usr/bin (Standard).</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>
            <div>#!/bin/bash</div>
            <div>&nbsp;</div>
            <div>test -x /usr/bin/VBoxManage || exit 0</div>
            <div>&nbsp;</div>
            <div>
            <div>for i in `ls /virtualbox/Machines/`</div>
            do</div>
            <div>&nbsp;</div>
            <div>case &quot;$1&quot; in<br />
            &nbsp; start)</div>
            <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n &quot;Starting Virtualbox-Image $i&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VBoxManage startvm $i -type vrdp<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;.&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br />
            &nbsp; stop)<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n &quot;Stopping Virtualbox-Image $i&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VBoxManage controlvm $i poweroff<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;.&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br />
            &nbsp; restart)<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n &quot;Restarting Virtualbox-Image $i&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VBoxManage controlvm $i poweroff<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VBoxManage startvm $i -type vrdp<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;.&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br />
            &nbsp; *)<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;Usage: /etc/init.d/vboxctl {start|stop|restart}&quot;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit 1<br />
            esac</div>
            <div>&nbsp;</div>
            <div>done</div>
            <div><br />
            exit 0</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Das Skript habe ich <strong>vboxctl</strong> getauft.</div>
<div>Es l&auml;&szlig;t sich mit den Parametern start, stop und restart aufrufen. Nachdem man es in <strong>/etc/init.d/ </strong>platziert hat, mu&szlig; man es nur noch mit dem Befehl <strong>update-rc.d</strong> f&uuml;r den Systemstart hinzuf&uuml;gen.</div>
<div>&nbsp;</div>
<div>So werden die Images beim Start des Servers automatisch gestartet und beim Herunterfahren automatisch beendet.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Fri, 02 May 2008 12:57:48 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Festplatte leeren / Daten sicher löschen]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/festplatte-leeren-daten-sicher-loeschen.html</link>
      <guid isPermaLink="false">34</guid>
      <description><![CDATA[Wer seine alte Festplatte entsorgt oder verkauft, sollte vorher sicher gehen, dass die alten Daten auch wirklich gelöscht sind. Unter Linux gibt es dazu eine einfache Möglichkeit mit dem Befehl dd....]]></description>
      <content:encoded><![CDATA[Festplatte,leeren,löschen,dd,if,of,wipe,zero,random,conv,noerror<br/><div>
	Wer seine alte Festplatte entsorgt oder verkauft, sollte vorher sicher gehen, dass die alten Daten auch wirklich gel&ouml;scht sind. Unter Linux gibt es dazu eine einfache M&ouml;glichkeit mit dem Befehl <strong>dd</strong>.</div>
<div>
	&nbsp;</div>
<div>
	Der folgende Befehl beschreibt die komplette Festplatte mit Zufallswerten:</div>
<div>
	<strong>dd if=/dev/urandom of=/dev/sdb</strong></div>
<div>
	Die Laufwerksangabe /dev/sdb mu&szlig; entsprechend durch das Laufwerk ersetzt werden.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt kann man die Festplatte noch mit Null-Werten vollschreiben.</div>
<div>
	<div>
		<strong>dd if=/dev/zero of=/dev/sdb</strong></div>
	<div>
		&nbsp;</div>
	<div>
		Da das eine ganze Weile dauern kann, w&uuml;rde ich empfehlen, die Blocksize anzupassen<br />
		Dazu h&auml;ngt man an den befehl einfach <strong>bs=2M </strong>(2MB)<strong> </strong>an.</div>
	<div>
		Das sollte den Vorgang etwas beschleunigen.</div>
	<div>
		&nbsp;</div>
	Jetzt kann es noch vorkommen, dass die Festplatte defekte Sektoren hat.</div>
<div>
	<div>
		Normalerweise bricht der Befehl dann ab. Damit das nicht passiert, h&auml;ngt man an den Befehl den Parameter <strong>conv=noerror</strong> an.</div>
</div>
<div>
	<div>
		&nbsp;</div>
	<div>
		&nbsp;</div>
	<div>
		<div>
			<strong>Anmerkung:</strong></div>
		<div>
			Damit erschwert man es Programmen, Dateien auf der Festplatte wiederherzustellen, macht es aber nicht unm&ouml;glich. Dazu m&uuml;&szlig;te man den Vorgang etwa <strong>30-40 Mal</strong> wiederholen.</div>
		<div>
			&nbsp;</div>
		<div>
			Hier ist ein kleines Shell-Script, das hier Abhilfe schafft:</div>
		<div>
			<table border="1" cellpadding="1" cellspacing="1" width="100%">
				<tbody>
					<tr>
						<td>
							<div>
								#!/bin/bash</div>
							<div>
								for i in `seq 1 10`<br />
								do<br />
								dd if=/dev/zero of=/dev/sda bs=2M conv=noerror<br />
								dd if=/dev/urandom of=/dev/sda bs=2M conv=noerror<br />
								wipe -T -x 1 -o 2097152 -a | dd of=/dev/sda bs=2M conv=noerror<br />
								done</div>
						</td>
					</tr>
				</tbody>
			</table>
		</div>
		<div>
			Dazu wird neben dem Tool <strong>dd</strong> aber auch noch das Tool <strong>wipe</strong> ben&ouml;tigt (<strong>apt-get install wipe</strong>).</div>
	</div>
</div>
]]></content:encoded>
      <pubDate>Fri, 02 May 2008 11:59:02 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[VSERVER Virtualbox: Windows-Image auf Debian Server]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/vserver-virtualbox-windows-image-auf-debian-server.html</link>
      <guid isPermaLink="false">33</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[VBoxManage,Virtualbox,Vserver,Virtual,VRDP,createvm,modifyvm,registerimage,createvdi,vrdpport,vrdpaddress,vrdpauthtype<br/><div><strong><u>Schnell und einfach ein Windows-Image auf einem Virtualbox-Linux-Server installieren:</u></strong></div>
<div>&nbsp;</div>
<div><strong>1.</strong> Zuerst legen wir ein Image an:<em> <strong>VBoxManage createvm -name &quot;WinXP&quot; -register</strong></em></div>
<div><br />
<strong>2.</strong> Jetzt weisen wir dem Image 512MB RAM zu, aktivern ACPI, konfigurieren das erste Boot-Device als DVD-Laufwerk, damit wir sp&auml;ter von der Installations-CD booten k&ouml;nnen. Die Netzwerkkarte wird auf NAT konfiguriert.</div>
<div><strong><em>VBoxManage modifyvm &quot;WinXP&quot; -memory &quot;512MB&quot; -acpi on -boot1 dvd -nic1 nat</em><br />
</strong></div>
<div>&nbsp;</div>
<div><strong>3.</strong> Jetzt legen wir eine virtuelle Disk an, in diesem Fall mit 10GB Speicherplatz.</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage createvdi -filename &quot;WinXP.vdi&quot; -size 10000 -register</strong></em></div>
<div>&nbsp;</div>
<div><strong>4.</strong> Die neue, virtuelle Disk weisen wir jetzt dem VirtualBox-Image zu:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage modifyvm &quot;WinXP&quot; -hda &quot;WinXP.vdi&quot;</strong></em></div>
<div>&nbsp;</div>
<div><strong>5.</strong> Jetzt registrieren wir das ISO-Image der Installations-CD zur Verwendung mit VirtualBox:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage registerimage dvd /full/path/to/iso.iso</strong></em></div>
<div><strong>&nbsp;&nbsp;&nbsp; </strong>Ein neues ISO-Image kann man schnell und einfach mit <em><strong>dd if=/dev/dvd of=/full/path/to/iso.iso</strong></em> anlegen (/dev/dvd und den Pfad mu&szlig; man entspr. ersetzen).</div>
<div>&nbsp;</div>
<div><strong>6.</strong> Jetzt weisen wir das neue ISO-Image unserem VirtualBox-Image zu:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage modifyvm &quot;WinXP&quot; -dvd /full/path/to/iso.iso</strong></em></div>
<div>&nbsp;</div>
<div><strong>7.</strong> Jetzt wird es Zeit, noch ein paar Kleinigkeiten einzustellen:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage modifyvm &quot;WinXP&quot; -vrdpport 3389 -vrdpaddress 192.168.96.1 -vrdpauthtype null</strong></em></div>
<div>&nbsp;&nbsp;&nbsp; vrdpport: Standard ist 3389, bei mehreren Images, braucht man i.d.R. aber auch mehrere Ports</div>
<div>&nbsp;&nbsp;&nbsp; vrdpaddress: IP-Adresse des Servers</div>
<div>&nbsp;&nbsp;&nbsp; vrdpaauthtype: none = keine Authentifizierung, external = PAM (Linux Benutzer)</div>
<div>&nbsp;</div>
<div><strong>8.</strong> So, das war's. Jetzt wird es Zeit f&uuml;r einen ersten Start:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxVRDP -startvm &quot;WinXP&quot;</strong></em></div>
<div><strong>&nbsp;&nbsp;&nbsp; </strong>oder im Hintergrund via VBoxManage:</div>
<div><em>&nbsp;&nbsp;&nbsp; <strong>VBoxManage startvm &quot;WinXP&quot; -type vrdp</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Zum Aush&auml;ngen der ISO-Datei aus dem Image nach der Installation macht man folgendes:</div>
<div><em><strong>&nbsp;&nbsp;&nbsp; VBoxManage controlvm &quot;WinXP&quot; poweroff</strong></em></div>
<div><em><strong>&nbsp;&nbsp;&nbsp; VBoxManage modifyvm &quot;WinXP&quot; -dvd none</strong></em></div>
<div>M&ouml;chte man die ISO-Datei danach komplett entfernen:</div>
<div><em><strong>&nbsp;&nbsp;&nbsp; VBoxManage unregisterimage /full/path/to/iso.iso</strong></em></div>
<div>&nbsp;</div>
<div>Per <strong>rdesktop unter Linux</strong> oder <strong>RemoteDesktopClient unter Windows</strong> kann man sich jetzt auf das Image verbinden.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Wed, 27 Feb 2008 00:02:32 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[VSERVER Virtualbox: Installation Debian]]></title>
      <link>http://www.cschramm.net/de/linux/virtual-machines/vserver-virtualbox-installation-debian.html</link>
      <guid isPermaLink="false">32</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div><u><strong>Eine</strong><strong> Schnellstart-Anleitung f&uuml;r Debian:</strong></u></div>
<div>&nbsp;</div>
<div>1. wget <a href="http://www.virtualbox.org/debian/innotek.asc">www.virtualbox.org/debian/innotek.asc</a></div>
<div>&nbsp;</div>
<div>2. apt-key add innotek.asc</div>
<div>&nbsp;</div>
<div>3. Jetzt mu&szlig; in der Datei /etc/apt/sources.list folgende Zeile hinzugef&uuml;gt werden:</div>
<div>&nbsp;&nbsp;&nbsp; deb http://www.virtualbox.org/debian etch non-free</div>
<div>&nbsp;</div>
<div>4. apt-get update</div>
<div>&nbsp;</div>
<div>5.<strong> apt-get install virtualbox</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><u><strong>Alternative Installation mit einem .deb-Package:</strong></u></div>
<div>&nbsp;</div>
<div>Das Paket kann man von <a href="http://www.virtualbox.org/wiki/Downloads">www.virtualbox.org/wiki/Downloads</a> (Link Binaries) herunterladen.</div>
<div>&nbsp;</div>
<div><strong>apt-get install bcc iasl xsltproc xalan libxalan110-dev uuid-dev zlib1g-dev libidl-dev libsdl1.2-dev libxcursor-dev libqt3-headers libqt3-mt-dev libasound2-dev libstdc++5 linux-headers-`uname -r` build-essential</strong></div>
<div>&nbsp;</div>
<div><strong>dpkg -i&nbsp; virtualbox_1.5.6-28266_Debian_etch_i386.deb<br />
</strong></div>
<div>&nbsp;</div>
<div>Der erste Befehl installiert die von VirtualBox ben&ouml;tigten Pakete, der zweite das eigentl. Paket.</div>
<div>Den Dateinamen mu&szlig; man dann entspr. der aktuellen Version ersetzen.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><u><strong>Hinweis zu Ubuntu:</strong></u></div>
<div>Die Open-Source-Version von VirtualBox kann ab der Version 8.04 direkt per Synaptic oder apt-get installiert werden: <strong>apt-get install virtualbox-ose</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><u><strong>Hinweis zu den Berechtigungen:</strong></u></div>
<div>Benutzer, die die Berechtigung haben sollen, VirtualBox-Images zu starten und zu administrieren, m&uuml;ssen der Gruppe <strong>vboxusers</strong> hinzugef&uuml;gt werden, z.B. <strong>usermod -G vboxusers -a root</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Wed, 27 Feb 2008 00:00:38 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Virtual VACATION mit Postfix und mySQL]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/virtual-vacation-mit-postfix-und-mysql.html</link>
      <guid isPermaLink="false">31</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[vacation,virtual,postfix,mysql,autoreply,recipient_bcc_maps,mysql_vacation,postfixadmin,Abwesenheit<br/><div>Im Netz gibt es verschiedene Anleitungen f&uuml;r Auto-Responder.</div>
<div>Einige basieren z.B. auf vacation-Messages, die sich im home-Verzeichnis des jeweiligen Benutzers befinden.</div>
<div>Hier m&ouml;chte ich eine Konfiguration aufzeigen, die komplett mit mySQL funktioniert.</div>
<div>&nbsp;</div>
<div>Ich verwende in meinem Beispiel als <strong>Basis</strong> diese Konfiguration: <a href="http://www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html">www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html</a></div>
<div>&nbsp;</div>
<div>Daf&uuml;r wird das Paket <strong>vacation</strong> und einige <strong>Perl</strong>-Pakete ben&ouml;tigt.</div>
<div>&nbsp;</div>
<div><em><strong>apt-get install libemail-mime-encodings-perl libmime-perl libemail-mime-contenttype-perl libmime-types-perl libperl5.8 libdbd-mysql-perl libclass-dbi-mysql-perl libemail-valid-perl libmail-sendmail-perl vacation</strong></em></div>
<div>&nbsp;</div>
<div>Bei Debian Etch hatte ich das Problem, dass die beiden Pakete <strong>libmime-charset-perl</strong> und <strong>libmime-encwords-perl</strong> noch nicht verf&uuml;gbar waren (aktueller Stand: testing). Daher habe ich sie mir von</div>
<div><a target="_blank" href="ftp://ftp.debian.org/debian/pool/main/libm/libmime-charset-perl/">ftp.debian.org/debian/pool/main/libm/libmime-charset-perl/</a></div>
<div>und</div>
<div><a target="_blank" href="ftp://ftp.debian.org/debian/pool/main/libm/libmime-encwords-perl/">ftp.debian.org/debian/pool/main/libm/libmime-encwords-perl/</a></div>
<div>heruntergeladen und per</div>
<div><strong>dpkg -i libmime-encwords-perl_0.040-3_all.deb libmime-charset-perl_0.044-1_all.deb<br />
</strong></div>
<div>installiert. Die Version kann abweichen, dann lauten die Dateinamen entspr. anders.</div>
<div>Alternativ:</div>
<div><a href="http://www.cplinux.de/downloads/libmime-charset-perl_0.044-1_all.deb">www.cplinux.de/downloads/libmime-charset-perl_0.044-1_all.deb</a></div>
<div><a href="http://www.cplinux.de/downloads/libmime-encwords-perl_0.040-3_all.deb">www.cplinux.de/downloads/libmime-encwords-perl_0.040-3_all.deb</a></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Zuerst legen wir den vacation-Benutzer und die Gruppe an:</div>
<div><em><strong>useradd vacation</strong></em></div>
<div><em><strong>groupadd vacation</strong></em></div>
<div>&nbsp;</div>
<div>Als n&auml;chstes legen wir nun die Tabellen an. Bei einer laufenden Postfix-mySQL-Konfiguration kann man die Tabellen in der gleichen Datenbank ablegen.</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>
            <div><strong>CREATE TABLE `vacation` </strong>(<br />
            &nbsp; `email` varchar(255) NOT NULL default '',<br />
            &nbsp; `subject` varchar(255) NOT NULL default '',<br />
            &nbsp; `body` text NOT NULL,<br />
            &nbsp; `cache` text NOT NULL,<br />
            &nbsp; `domain` varchar(255) NOT NULL default '',<br />
            &nbsp; `created` datetime NOT NULL default '0000-00-00 00:00:00',<br />
            &nbsp; `active` tinyint(4) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`email`),<br />
            &nbsp; KEY `email` (`email`)<br />
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix - Virtual Vacation';</div>
            <div>&nbsp;</div>
            <div><strong>CREATE TABLE `vacation_notification`</strong> (<br />
            &nbsp; `on_vacation` varchar(255) NOT NULL default '',<br />
            &nbsp; `notified` varchar(255) NOT NULL default '',<br />
            &nbsp; `notified_at` timestamp NOT NULL default CURRENT_TIMESTAMP<br />
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix - Virtual Vacation Notifications';</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Als Grundlage f&uuml;r mein Vorhaben habe ich das <strong>postfixadmin</strong>-Paket heruntergeladen:</div>
<div><a href="http://www.cplinux.de/downloads/postfixadmin-2.2.0-RC1.tar.gz">www.cplinux.de/downloads/postfixadmin-2.2.0-RC1.tar.gz</a></div>
<div>&nbsp;</div>
<div>Und die dort enthaltene <strong>vacation.pl</strong> modifiziert. Hier gibt es die modifizierte Version zum Download:</div>
<div><a href="http://www.cplinux.de/downloads/vacation.pl">www.cplinux.de/downloads/vacation.pl</a></div>
<div>&nbsp;</div>
<div>In der Datei <strong>vacation.pl</strong> m&uuml;ssen nun noch einige Punkte ge&auml;ndert werden. Im Bereich Konfiguration ganz oben m&uuml;ssen der Datenbank-Server, Benutzername und Passwort und der Name der Datenbank angegeben werden.</div>
<div>&nbsp;</div>
<div>Das Skript sollte dann nach <strong>/var/spool/vacation</strong> kopiert werden:</div>
<div><em><strong>mkdir /var/spool/vacation</strong></em></div>
<div><em><strong>cp vacation.pl /var/spool/vacation</strong></em></div>
<div><em><strong>chown -R vacation.vacation /var/spool/vacation</strong></em></div>
<div>&nbsp;</div>
<div>Standardm&auml;&szlig;ig habe ich das Logging aktiviert, die Debugging-Logs aber deaktiviert. Daf&uuml;r sollte man noch das Verzeichnis anlegen:</div>
<div><em><strong>mkdir /var/log/vacation</strong></em></div>
<div><em><strong>touch /var/log/vacation/vacation.log</strong></em></div>
<div>
<div><em><strong>touch /var/log/vacation/vacation.debug<br />
</strong></em></div>
<div><em><strong>chown -R vacation.vacation /var/log/vacation/</strong></em></div>
<div>&nbsp;</div>
</div>
<div>&nbsp;</div>
<div>Jetzt m&uuml;ssen f&uuml;r die Domains, f&uuml;r die wir die autoreply-Funktion nutzen wollen, in die <strong>Transport-Map</strong> von Postfix eingetragen werden.</div>
<div>Dabei nehme ich Subdomains in der Form: <strong>auto-reply.meinedomain.tld</strong></div>
<div>Als Ziel in der Transport-Map tr&auml;gt man <strong>vacation</strong> ein.</div>
<div>&nbsp;&nbsp;</div>
<div>Ich verwende in meinem Beispiel diese Konfiguration: <a href="http://www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html">www.cplinux.de/postfix-mit-mysql-courier-konfiguration.view.html</a>,</div>
<div>soda&szlig; die Werte nur in der entspr. Tabelle eingetragen werden m&uuml;ssen.<strong> That's it.</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Damit der Dienst <strong>vacation</strong> auch in Postfix bekannt ist, mu&szlig; er in der Datei <strong>/etc/postfix/master.cf</strong> eingetragen werden:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td><strong>vacation&nbsp;&nbsp;&nbsp;&nbsp; unix&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
            &nbsp; flags=Rhu user=vacation argv=/var/spool/vacation/vacation.pl</strong></td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Ok, schlu&szlig;endlich mu&szlig; nun eine Kopie unserer Mails an den neuen Dienst ge-&quot;pipe&quot;t werden. Findet der Dienst zu der zugeh&ouml;rigen E-Mail-Adresse einen aktiven Eintrag in der Tabelle vacation wird eine Auto-Reply ausgel&ouml;st, ansonsten passiert nichts.</div>
<div>Wurde vorher schon eine Auto-Reply an diese Adresse ausgel&ouml;st, passiert auch nichts (das speichert vacation in der Tabelle vacation_notification).</div>
<div>&nbsp;</div>
<div>Um das zu Realisieren, habe ich mich der <strong>recipient_bcc_maps</strong> bedient. Das bedeutet, dass eine Blindkopie aller Mails an vacation geleitet wird.</div>
<div>Dazu ist ein Eintrag in der <strong>/etc/postfix/main.cf</strong> notwendig: <strong>recipient_bcc_maps = mysql:/etc/postfix/mysql_vacation.cf</strong></div>
<div>&nbsp;</div>
<div>Die Map selbst sieht dann folgenderma&szlig;en aus und bedient sich aus der Tabelle user:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>
            <div>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = CONCAT(SUBSTRING_INDEX(email,'@',1),'@auto-reply.',SUBSTRING_INDEX(email,'@',-1))<br />
            where_field = email</div>
            <div>additional_conditions = and email IN (SELECT email from vacation WHERE active='1')<br />
            hosts = localhost</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>So, jetzt noch Postfix neu starten. Das war's.</div>
<div>&nbsp;</div>
<div>Damit jetzt eine Auto-Reply ausgel&ouml;st wird, mu&szlig; es nun nur noch <strong>einen aktiven Eintrag in der Tabelle vacation</strong> geben!</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 19 Jan 2008 15:42:44 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DNS Load Balancing Konfiguration]]></title>
      <link>http://www.cschramm.net/de/linux/dns-server/dns-load-balancing-konfiguration.html</link>
      <guid isPermaLink="false">30</guid>
      <description><![CDATA[Es gibt verschiedene Arten des Load Balancing's. In diesem Artikel werde ich das DNS Load Balancing und dessen Implementierung erläutern....]]></description>
      <content:encoded><![CDATA[Load Balancing,Load,Balancing,DNS,Round Robin, Round, Robin, A-Records,CNAME, Bind<br/><div>
	Es gibt verschiedene Arten des Load Balancing&#39;s.</div>
<div>
	&nbsp;</div>
<div>
	Eine Variante w&auml;re ein <strong>Software Load Balancer</strong> (z.B. ipvsadm), der auf einem extra Server l&auml;uft, der zwischen z.B. Webservern und WAN sitzt.</div>
<div>
	Der Load Balancer steuert in diesem Fall, welche Anfrage zu welchem Server durchgereicht wird.</div>
<div>
	Das wird aber Thema eines anderen Tutorials sein.</div>
<div>
	&nbsp;</div>
<div>
	M&ouml;chte man auf einen zus&auml;tzlichen Server verzichten, gibt es auch die M&ouml;glichkeit, den <strong>DNS-Server</strong> diese Arbeit erledigen zu lassen.</div>
<div>
	Genau genommen ist das eigentlich kein Load Balancing sondern Load Sharing, da der DNS-Server die &quot;Entscheidung&quot; nicht danach trifft, wie viele Verbindungen bereits bestehen oder wieviel Last der Server hat, sondern im Prinzip rein zuf&auml;llig.</div>
<div>
	&nbsp;</div>
<div>
	<strong>Das Prinzip:</strong></div>
<div>
	&nbsp;</div>
<div>
	Statt einem Domainnamen, z.B. www.example.net nur eine IP-Adresse zuzuordnen, werden dem Domainnamen gleich mehrere IP&#39;s zugeordnet. Der DNS-Server reicht die Anfragen abwechselnd an die zugewiesenen Adressen weiter - das nennt man <strong>DNS Round Robin</strong>.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<strong>Implementierung:</strong></div>
<div>
	&nbsp;</div>
<div>
	Es gibt 2 Arten der Implementierung:<br />
	<strong> </strong></div>
<ol>
	<li>
		<strong>Multiple A records</strong></li>
	<li>
		<strong>Multiple CNAME&#39;s</strong></li>
</ol>
<div>
	&nbsp;</div>
<div>
	<strong>Bsp. f&uuml;r 1.:</strong></div>
<div>
	&nbsp;</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					www.example.net 60 IN A 123.45.67.81<br />
					www.example.net 60 IN A 123.45.67.82<br />
					www.example.net 60 IN A 123.45.67.83<br />
					www.example.net 60 IN A 123.45.67.84</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	60 ist dabei der TTL-Wert, d.h. die &quot;time to live&quot;. Der Wert sollte relativ klein gehalten werden, in diesem Fall 60 Sekunden, damit der DNS-Cache &ouml;fter aktualisiert wird.</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<strong>Bsp. f&uuml;r 2.:</strong></div>
<div>
	&nbsp;</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					<div>
						www1 IN A 123.45.67.81<br />
						www2 IN A 123.45.67.82<br />
						www3 IN A 123.45.67.83<br />
						www4 IN A 123.45.67.84</div>
					<div>
						&nbsp;</div>
					<div>
						www IN CNAME www1.example.net.<br />
						IN CNAME www2.example.net.<br />
						IN CNAME www3.example.net.<br />
						IN CNAME www4.example.net.</div>
				</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	F&uuml;r &auml;ltere DNS-Server (z.B. Bind8) ist bei Bsp.2&nbsp; ein zus&auml;tzlicher Parameter in der Konfiguration notwendig:</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					options {<br />
					multiple-cnames yes;<br />
					};</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<strong>Generell w&uuml;rde ich eher Bsp.1 empfehlen. Das wird von den meisten, aktuellen DNS-Servern (z.B. Bind9) unterst&uuml;tzt!</strong></div>
]]></content:encoded>
      <pubDate>Sat, 19 Jan 2008 15:15:45 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: 64Bit sources.list Flash Multimedia]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/debian-64bit-sourceslist-flash-multimedia.html</link>
      <guid isPermaLink="false">29</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Wer schon mal ein <strong>64Bit Debian Etch</strong> als Arbeitsplatz eingerichtet hat, wird gemerkt haben, dass einige Features, sowie z.B. das Flash-Plugin im Browser, noch nicht in der 64Bit-Version verf&uuml;gbar sind.</div>
<div>&nbsp;</div>
<div>Das kann man aber durch Erweiterung der <strong>/etc/apt/sources.list</strong> realisieren:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td># Multimedia Debianpakete <br />
            deb <a class="moz-txt-link-freetext" href="http://www.debian-multimedia.org/">http://www.debian-multimedia.org</a> etch main <br />
            deb-src <a class="moz-txt-link-freetext" href="http://www.debian-multimedia.org/">http://www.debian-multimedia.org</a> etch main <br />
            <br />
            # Flashplayer libgtk32 <br />
            deb <a class="moz-txt-link-freetext" href="http://www.dipconsultants.com/debian">http://www.dipconsultants.com/debian</a> etch main <br />
            deb-src <a class="moz-txt-link-freetext" href="http://www.dipconsultants.com/debian">http://www.dipconsultants.com/debian</a> etch main <br />
            <br />
            # Virtualbox <br />
            deb <a class="moz-txt-link-freetext" href="http://www.virtualbox.org/debian">http://www.virtualbox.org/debian</a> etch non-free</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>F&uuml;r debian-multimedia.org mu&szlig; man noch einen key installieren:</div>
<div><em><strong>wget http://debian-multimedia.org/gpgkey.pub -O - | apt-key add - && apt-get install debian-multimedia-keyring     </strong></em></div>
<div>&nbsp;</div>
<div>Danach nat&uuml;rlich <strong>apt-get update</strong>.</div>
<div>&nbsp;</div>
<div>Wer noch weitere Quellen hat, kann Sie mir gerne per E-Mail oder als Kommentar zu diesem Artikel posten.</div>]]></content:encoded>
      <pubDate>Sat, 19 Jan 2008 15:14:33 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: Greylisting Daemon mit Postfix]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/debian-greylisting-daemon-mit-postfix.html</link>
      <guid isPermaLink="false">28</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div><strong>Greylisting</strong> ist eine relativ neue, aber effektive Methode der Spam-Bek&auml;mpfung. Ich zeige hier, wie man den Deamon <strong>GLD</strong> in <strong>Postfix</strong> integriert.</div>
<div>&nbsp;</div>
<div>Ich setze dabei voraus, dass bereits eine Basis-Installation von Postfix vorhanden ist.</div>
<div>Wenn nicht, gibt es hier einige Anleitungen: <a href="http://www.cplinux.de/e-mail-server.category.html">www.cplinux.de/e-mail-server.category.html</a></div>
<div>&nbsp;</div>
<div>Zuerst mu&szlig; das ben&ouml;tigte Paket installiert werden: <em><strong>apt-get install postfix-gld</strong></em></div>
<div>&nbsp;</div>
<div>Damit der Dienst korrekt gestartet werden kann, mu&szlig; er in <strong>/etc/default/gld</strong> aktiviert werden: <strong>ENABLED=1</strong></div>
<div>&nbsp;</div>
<div>Jetzt wird es Zeit, den Dienst zu konfigurieren. Die Konfigurationsdatei ist <strong>/etc/gld.conf</strong></div>
<div>Eine Beispielkonfiguration w&auml;re:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>
            <div><strong>PORT=2525</strong></div>
            <div>#Der Port, den GLD benutzt</div>
            <div>&nbsp;</div>
            <div><strong>LOOPBACKONLY=1</strong></div>
            <div>#Nur lokal erreichbar? (empfohlen!)</div>
            <div>&nbsp;</div>
            <div><strong>CLIENTS=127.0.0.1/32</strong></div>
            <div>#Netzwerke, die sich mit GLD verbinden d&uuml;rfen</div>
            <div>&nbsp;</div>
            <div><strong>USER=postfix-gld</strong></div>
            <div>#Standard-Benutzer f. GLD</div>
            <div>&nbsp;</div>
            <div><strong>GROUP=postfix-gld</strong></div>
            <div>#Standard-Gruppe f. GLD</div>
            <div>&nbsp;</div>
            <div><strong>MAXCON=100</strong></div>
            <div>#Max. Anzahl gleichzeitiger Verbindungen</div>
            <div>&nbsp;</div>
            <div><strong>MINTIME=60</strong></div>
            <div>#Anz. Sek., die GLD warten soll, bis eine Greylist-Mail akzeptiert wird</div>
            <div>&nbsp;</div>
            <div><strong>LIGHTGREY=0</strong></div>
            <div>#GLD grey-listet nur Klasse C IPs, statt indiv. IP-Adr.</div>
            <div>&nbsp;</div>
            <div><strong>MXGREY=0</strong></div>
            <div>#Eine Variation des Greylist Algorithmus</div>
            <div>&nbsp;</div>
            <div><strong>WHITELIST=1</strong></div>
            <div>#GLD Whitelist-Tabelle benutzen?</div>
            <div>&nbsp;</div>
            <div><strong>ERRACCEPT=1</strong></div>
            <div>#Art der Fehlerr&uuml;ckgabe</div>
            <div>&nbsp;</div>
            <div><strong>SYSLOG=1</strong></div>
            <div>#Syslog benutzen?</div>
            <div>&nbsp;</div>
            <div><strong>FACILITY=mail</strong></div>
            <div>#In welche Logs soll GLD schreiben?</div>
            <div>&nbsp;</div>
            <div><strong>MESSAGE=Service temporarily unavailable, please try later</strong><br />
            #Die Nachricht kann ge&auml;ndert werden. Der Code ist standardm&auml;&szlig;ig 450, <br />
            #ansonsten mu&szlig; er in der Nachricht mitgegeben werden.</div>
            <div>&nbsp;</div>
            <div><strong>TRAINING=0</strong></div>
            <div>#Zu Testzwecken, z.B. Performance-Tests. Es erfolgt kein Greylisting in diesem Modus</div>
            <div>&nbsp;</div>
            <div><strong>SQLHOST=localhost</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
            <div>#Server IP oder idealerweise localhost bzw. 127.0.0.1</div>
            <div><strong>SQLUSER=gld</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
            <div>#Benutzername f. die Datenbank</div>
            <div><strong>SQLPASSWD=xxxxxxxx</strong>&nbsp;&nbsp;</div>
            <div>#Passwort</div>
            <div><strong>SQLDB=glddb</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
            <div>#Datenbank f. GLD</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Die Datenbank f&uuml;r GLD m&uuml;ssen wir nat&uuml;rlich noch anlegen. Das kann man als root in der mysql-Konsole mit:</div>
<div><strong><em>CREATE DATABASE glddb;</em></strong></div>
<div><strong><em>GRANT ALL ON glddb.* TO `gld`@`localhost` IDENTIFIED BY 'xxxxxxxx';</em></strong></div>
<div><strong><em>FLUSH PRIVILEGES;</em></strong></div>
<div>&nbsp;</div>
<div>Danach m&uuml;ssen noch die beiden Tabellen angelegt werden:</div>
<div><strong><em>cd /usr/share/gld</em></strong></div>
<div><strong><em>cat tables.mysql | mysql --user=gld --password=</em></strong><strong>xxxxxxxx </strong><strong><em>--database=glddb --host=localhost</em></strong></div>
<div>
<div><strong><em>cat table-whitelist.mysql | mysql --user=gld </em></strong><strong><em>--password=</em></strong><strong>xxxxxxxx </strong><strong><em>--database=glddb --host=localhost<br />
</em></strong></div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Jetzt kann der Daemon gestartet werden: <strong>/etc/init.d/gld start</strong></div>
<div>&nbsp;</div>
<div>Damit Postfix GLD nun auch verwendet mu&szlig; in der Datei <strong>/etc/postfix/main.cf</strong> noch folgender Eintrag erfolgen:</div>
<div><strong>check_policy_service inet:127.0.0.1:2525</strong></div>
<div>&nbsp;</div>
<div>Der Eintrag geh&ouml;rt in die <strong>smtpd_recipient_restrictions</strong>, idealerweise ans Ende der Zeile.</div>
<div>&nbsp;</div>
<div>Jetzt noch Postfix neustarten: <em><strong>/etc/init.d/postfix restart</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Nun sollte man noch einen Cronjob anlegen, der die Datenbank hin und wieder leert.</div>
<div>Dazu hilft folgendes Script:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>#!/bin/bash<br />
            <br />
            EXPIRE_GREYLIST=43200<br />
            EXPIRE_WHITELIST=$((35 * 86400))<br />
            <br />
            MYSQL_HOST=&quot;localhost&quot;<br />
            MYSQL_USER=&quot;gld&quot;<br />
            MYSQL_PASSWORD=&quot;xxxxxxxx&quot;<br />
            MYSQL_DATABASE=&quot;glddb&quot;<br />
            <br />
            echo &quot; DELETE FROM greylist WHERE last&lt;$((`date +%s` - EXPIRE_WHITELIST)); DELETE FROM greylist WHERE n=1 AND first&lt;$((`date +%s` - EXPIRE_GREYLIST)); &quot; | mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --database=$MYSQL_DATABASE</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>That's it.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 19 Jan 2008 13:16:21 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix: Realtime Blackhole Lists]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-realtime-blackhole-lists.html</link>
      <guid isPermaLink="false">25</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Was ist die <strong>Aufgabe von Realtime Blackhole Lists (RBL's)</strong>?</div>
<div>In den meisten RBL's werden IP-Adressen oder Namen von Servern/Rechnern gelistet, von denen in der Vergangenheit Spam oder Malware versendet wurde.</div>
<div>Durch die RBL's kann man einen gro&szlig;en Teil der ankommenden Spam- und Malware-Flut direkt abblocken, bevor sie auf dem Mailserver zugestellt wird.</div>
<div>&nbsp;</div>
<div><strong>Beispiele </strong>f&uuml;r RBL's:</div>
<ul>
    <li>sbl-xbl.spamhaus.org</li>
    <li>bl.spamcop.net</li>
</ul>
<div>Weitere RBL's: <a href="http://spamlinks.net/filter-dnsbl-lists.htm">spamlinks.net/filter-dnsbl-lists.htm</a></div>
<div>&nbsp;</div>
<div><u><strong>So wird das Ganze </strong><strong>in Postfix integriert:</strong></u></div>
<div>&nbsp;</div>
<div>In der Datei <strong>/etc/postfix/main.cf</strong> mu&szlig; in der Zeile <strong>smtpd_recipient_restrictions</strong> folgendes hinzugef&uuml;gt werden (Beispiel):</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td><strong>reject_rbl_client </strong>sbl-xbl.spamhaus.org</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Man sollte meiner Meinung nach maximal 2-3 Blacklists eintragen. Die Zeile k&ouml;nnte dann so aussehen:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>smtpd_recipient_restrictions =&nbsp; permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,<br />
            reject_unknown_sender_domain, reject_unknown_recipient_domain, <strong>reject_unauth_destination, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl-xbl.spamhaus.org,</strong> reject_unauth_pipelining</td>
        </tr>
    </tbody>
</table>
</div>
<div><strong>Achtung!</strong> Bitte darauf achten, dass die Werte <strong><em>durch Kommata</em></strong> <em><strong>getrennt </strong></em>werden. Die Zeile sollte <strong><em>keine Zeilenumbr&uuml;che</em></strong> enthalten.</div>
<div>&nbsp;</div>
<div>Jetzt bleibt noch die Frage, ob wir demjenigen, der den Spam schickt, eine Fehlermeldung ausgeben?</div>
<div>Das kann man durch Hinzuf&uuml;gen der folgenden beiden Zeilen in der <strong>/etc/postfix/main.cf </strong>realisieren:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>
            <div>rbl_code = 554</div>
            <div>default_rbl_reply = $rbl_code RBL! Ihre E-Mail konnte nicht gesendet werden!</div>
            </td>
        </tr>
    </tbody>
</table>
<strong> rbl_code ist dabei optional</strong> und mu&szlig; nicht angegeben werden.</div>
<div>&nbsp;</div>
<div>Jetzt noch die neue Konfiguration laden: <strong>/etc/init.d/postfix reload</strong></div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Mon, 12 Nov 2007 16:09:13 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix: mySQL-Host-Blacklist]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-mysql-host-blacklist.html</link>
      <guid isPermaLink="false">24</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Wer kennt das nicht? Man wird immer wieder von bestimmten Mail-Servern zugespammt.</div>
<div>Neben den Realtime Blackhole Lists (RBL's) kann auch eine eigene Blacklist Abhilfe schaffen - ich sehe das als Erg&auml;nzung dazu.</div>
<div>&nbsp;</div>
<div>In der Datei <strong>/etc/postfix/main.cf</strong> mu&szlig; in der Zeile mit dem Parameter <strong>smtpd_recipient_restrictions</strong> folgendes hinzugef&uuml;gt werden:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>check_client_access mysql:/etc/postfix/mysql_trusted.cf</td>
        </tr>
    </tbody>
</table>
</div>
<div>Die Werte werden durch Kommata getrennt.</div>
<div>&nbsp;</div>
<div>Die Zeile k&ouml;nnte z.B. so aussehen:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>smtpd_recipient_restrictions =&nbsp; permit_mynetworks, permit_sasl_authenticated, check_client_access mysql:/etc/postfix/mysql_trusted.cf, reject_invalid_hostname, reject_non_fqdn_hostname,<br />
            reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_destination, reject_unlisted_recipient, reject_unauth_pipelining</td>
        </tr>
    </tbody>
</table>
</div>
<div><strong>Achtung!</strong> Bitte darauf achten, dass alles in einer Zeile steht, ohne Zeilenumbr&uuml;che!&nbsp;</div>
<div>&nbsp;</div>
<div>Die Tabelle <strong>trusted</strong> mu&szlig; jetzt noch angelegt werden, in meinem Bsp. in der Datenbank postfix:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>CREATE TABLE `trusted` (<br />
            &nbsp; `id` int(5) NOT NULL auto_increment,<br />
            &nbsp; `host` varchar(100) NOT NULL,<br />
            &nbsp; `access` enum('OK','REJECT') NOT NULL default 'OK',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Jetzt m&uuml;ssen wir die noch fehlende <strong>/etc/postfix/mysql_trusted.cf</strong> erstellt werden:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = trusted<br />
            select_field = access<br />
            where_field = host<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
Den Datenbank-Namen (dbname) und die Zugangsdaten (user, password) mu&szlig; man entspr. anpassen.</div>
<div>&nbsp;</div>
<div>Jetzt sollte man die neuen Einstellungen testen: <strong>/etc/init.d/postfix reload </strong>wenn der Dienst l&auml;uft, ansonsten <strong>/etc/init.d/postfix start</strong>.</div>
<div>&nbsp;</div>
<div>F&uuml;r den Test mu&szlig; ein entsprechender Hostname oder eine IP-Adresse hier eingetragen und entweder mit dem Wert <strong>REJECT </strong>abgewiesen oder mit dem Wert <strong>OK </strong>authorisiert werden.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Mon, 12 Nov 2007 16:07:54 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix: Mail-Anh&auml;nge filtern]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-mail-anhaenge-filtern.html</link>
      <guid isPermaLink="false">23</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>M&ouml;chte man bei Postfix verhindern, dass z.B. E-Mail-Anh&auml;nge wie .exe, .bat, .pif etc. verschickt werden, kann man das folgenderma&szlig;en l&ouml;sen.<br />
<br />
In der Datei <strong>/etc/postfix/main.cf </strong>ist folgende Zeile einzutragen:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>mime_header_checks=pcre:/etc/postfix/header_check</td>
        </tr>
    </tbody>
</table>
<br />
Das veranlasst Postfix im Header nach dem regul&auml;ren Ausdruck in der Datei header_check zu suchen.<br />
Der Ausdruck sieht etwas komplex aus:<br />
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>/^((Content-(Disposition: attachment;|Type:).*| +)| *)(file)?name *= *&quot;?.*.(lnk|hlp|ocx|reg|bat|cmd|exe|dll|pif|scr|wmf)&quot;? *$/ REJECT attachment type not allowed</td>
        </tr>
    </tbody>
</table>
<br />
Der Ausdruck <strong>verhindert, dass Dateien mit den Endungen lnk, hlp, ocx, reg, bat, cmd, exe, dll, pif, scr, wmf verschickt werden</strong>.<br />
Noch beim Versenden der Mail erh&auml;lt man die Meldung &quot;attachment type not allowed&quot;.<br />
<br />
Nach den &Auml;nderungen sollte man nun noch die Postfix-Konfiguration neu laden: <strong>/etc/init.d/postfix reload</strong></div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Mon, 12 Nov 2007 13:59:15 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[GENTOO: PureFTPd mit mySQL]]></title>
      <link>http://www.cschramm.net/de/linux/ftp-server/gentoo-pureftpd-mit-mysql.html</link>
      <guid isPermaLink="false">21</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Beschrieben wird hier die Installation von PureFTPd auf einem Gentoo-System.</div>
<div>Die Konfiguraiton der Accounts erfolgt &uuml;ber mySQL.</div>
<div>&nbsp;</div>
<div>Erst einmal die Installation: <strong>USE=&quot;pam ssl mysql&quot; emerge pure-ftpd</strong></div>
<div>&nbsp;</div>
<div>
<div>Die IP des mySQL-Servers und die des FTP-Server m&uuml;ssen nicht unbedingt gleich sein. In diesem Bsp. habe ich <strong>123.45.67.88 f&uuml;r den mySQL-Server</strong> und <strong>123.45.67.89 f&uuml;r den FTP-Server </strong>verwendet.</div>
<div>Wenn sich beides auf dem gleichen Server befindet, kann man stattdessen getrost <strong>localhost</strong> eintragen.</div>
<div><br />
Es gibt nun 2 Konfigurationsdateien, die im Verzeichnis /etc/conf.d angelegt werden m&uuml;ssen:</div>
</div>
<div>&nbsp;</div>
<div><strong>/etc/conf.d/pure-ftpd</strong></div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>#Der Server startet nur, wenn diese Variable auf &quot;yes&quot; gestellt ist<br />
            IS_CONFIGURED=&quot;yes&quot;<br />
            <br />
            #Server Port<br />
            SERVER=&quot;-S 21&quot;<br />
            <br />
            #Max. Anzahl gleichzeitiger Verbindungen insg. und pro IP<br />
            MAX_CONN=&quot;-c 30&quot;<br />
            MAX_CONN_IP=&quot;-C 10&quot;<br />
            <br />
            # Als Daemon (&quot;-D&quot;) oder im Hintergrund (&quot;-B&quot;) starten?<br />
            DAEMON=&quot;-B&quot;<br />
            <br />
            # Keine Uploads zulassen, wenn die Partition zu mehr als 90% gef&uuml;llt ist<br />
            DISK_FULL=&quot;-k 90%&quot;<br />
            <br />
            # Wenn der Server hinter einer Firewall ist<br />
            # USE_NAT=&quot;-N&quot;<br />
            <br />
            # Authentifizierung via mySQL<br />
            AUTH=&quot;-l mysql:/etc/conf.d/pure-ftpd-mysql&quot;<br />
            <br />
            # Max. IDLE<br />
            # TIMEOUT=&quot;-I &lt;timeout&gt;'&quot;<br />
            <br />
            # Welche facility soll zum Loggen verwendet werden? z.B. syslog<br />
            # Wenn nicht angegeben, ist es standardm&auml;&szlig;ig: &quot;ftp&quot;<br />
            # Deaktivieren mit &quot;-f none&quot;<br />
            # LOG=&quot;-f facility&quot;<br />
            <br />
            # Hier statt 123.45.67.89 die IP des Servers eintragen, die per FTP erreichbar sein soll<br />
            MISC_OTHER=&quot;-A -j -u 80 -p 50000:65535 -P 123.45.67.89&quot;<br />
            <br />
            # Weitere Details: &quot;http://pureftpd.sourceforge.net/README&quot;</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>/etc/conf.d/pure-ftpd-mysql</strong></div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>MYSQLServer&nbsp;&nbsp;&nbsp;&nbsp; 123.45.67.89 <br />
            #MYSQLSocket&nbsp;&nbsp;&nbsp; /var/run/mysqld/mysqld.sock<br />
            MYSQLUser&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp<br />
            MYSQLPassword&nbsp;&nbsp; XXXXXXXX <br />
            MYSQLDatabase&nbsp;&nbsp; pureftpd<br />
            MYSQLCrypt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MD5<br />
            MYSQLGetPW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT Password FROM pureftpd WHERE User=&quot;L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MYSQLGetUID&nbsp;&nbsp;&nbsp;&nbsp; SELECT Uid FROM pureftpd WHERE User=&quot;L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MYSQLGetGID&nbsp;&nbsp;&nbsp;&nbsp; SELECT Gid FROM pureftpd WHERE User=&quot;L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MYSQLGetDir&nbsp;&nbsp;&nbsp;&nbsp; SELECT Dir FROM pureftpd WHERE User=&quot;L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MySQLGetBandwidthUL SELECT ULBandwidth FROM pureftpd WHERE User=&quot;L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MySQLGetBandwidthDL SELECT DLBandwidth FROM pureftpd WHERE User=&quot;L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MySQLGetQTASZ&nbsp;&nbsp; SELECT QuotaSize FROM pureftpd WHERE User=&quot;L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;R&quot;)<br />
            MySQLTransactions Off</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>Den mySQL-Benutzer und die Tabellen mu&szlig; man ggf. noch anlegen:</strong></div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>CREATE DATABASE pureftpd;<br />
            <br />
            GRANT ALL ON pureftpd.* TO 'ftp'@'123.45.67.89' IDENTIFIED BY 'XXXXXXXX';<br />
            <br />
            FLUSH PRIVILEGES;<br />
            <br />
            USE pureftpd;<br />
            <br />
            CREATE TABLE `users` (<br />
            &nbsp; `User` varchar(50) NOT NULL default '',<br />
            &nbsp; `Password` varchar(64) binary NOT NULL default '',<br />
            &nbsp; `Uid` int(11) NOT NULL default '2100',<br />
            &nbsp; `Gid` int(11) NOT NULL default '2100',<br />
            &nbsp; `Dir` varchar(128) NOT NULL default '/home/pureftpd',<br />
            &nbsp; `QuotaFiles` int(10) NOT NULL default '5000',<br />
            &nbsp; `QuotaSize` int(10) NOT NULL default '30000',<br />
            &nbsp; `ULBandwidth` int(10) NOT NULL default '80',<br />
            &nbsp; `DLBandwidth` int(10) NOT NULL default '80',<br />
            &nbsp; `Ipaddress` varchar(15) NOT NULL default '*',<br />
            &nbsp; `Comment` tinytext,<br />
            &nbsp; `Status` enum('0','1') NOT NULL default '1',<br />
            &nbsp; `ULRatio` smallint(5) NOT NULL default '1',<br />
            &nbsp; `DLRatio` smallint(5) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`User`),<br />
            &nbsp; UNIQUE KEY `User` (`User`)<br />
            ) TYPE=MyISAM;</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Jetzt den Dienst starten: <strong>/etc/init.d/pure-ftpd start</strong></div>
<div>&nbsp;</div>
<div>Die Benutzer k&ouml;nnen jetzt ganz einfach &uuml;ber die mySQL-Tabelle <strong>users</strong> verwaltet werden.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sun, 04 Nov 2007 19:55:32 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: ProFTPd mit mySQL]]></title>
      <link>http://www.cschramm.net/de/linux/ftp-server/debian-proftpd-mit-mysql.html</link>
      <guid isPermaLink="false">20</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Im folgenden wird eine <strong>ProFTPd-Konfiguration mit mySQL als Backend </strong>beschrieben.<br />
<br />
<strong>Warum mit mySQL?</strong> Die Antwort ist ganz einfach: Die Administration wird dadurch schneller und einfacher.<br />
Man k&ouml;nnte z.B. auch ein Web-Interface erstellen, um die Benutzer dar&uuml;ber zu verwalten.<br />
Besonders, wenn man viele Benutzer hat, bleibt es so einigerma&szlig;en &uuml;bersichtlich.<br />
<br />
Erst einmal installieren wir die ben&ouml;tigten Pakete:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>apt-get install proftpd proftpd-mysql</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Die Konfigurationsdateien befinden sich in <strong>/etc/proftpd</strong>.</div>
<div>&nbsp;</div>
<div>Zuerst &uuml;berpr&uuml;fen wir die Datei <strong>modules.conf</strong>. Die Datei mu&szlig; folgende Zeilen enthalten (ohne f&uuml;hrende #):</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>LoadModule mod_sql.c<br />
            LoadModule mod_sql_mysql.c</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>
<div><u>Anmerkung:</u></div>
<div>ftp.example.net ist in dem Beispiel der Server, auf dem proftpd l&auml;uft.</div>
<div>db.example.net der Server, auf dem mySQL l&auml;uft.<br />
Es k&ouml;nnen je nach Konfiguration auch beide Dienste auf dem gleichen Server laufen.</div>
<div>Statt der Namen kann man nat&uuml;rlich auch IP-Adressen verwenden.</div>
<div>&nbsp;</div>
</div>
<div>Jetzt sollte die folgende Tabelle in einer beliebigen Datenbank angelegt werden.</div>
<div>Ich nenne die Datenbank in dem Beispiel <strong>proftpd </strong>und die Tabelle <strong>ftpuser</strong>.</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>CREATE DATABASE proftpd;<br />
            USE proftpd;<br />
            CREATE TABLE `ftpuser` (<br />
            &nbsp; `id` int(3) NOT NULL auto_increment,<br />
            &nbsp; `username` varchar(60) character set latin1 collate latin1_bin default NULL,<br />
            &nbsp; `uid` int(11) default NULL,<br />
            &nbsp; `gid` int(11) default NULL,<br />
            &nbsp; `password` varchar(30) default NULL,<br />
            &nbsp; `homedir` varchar(250) default NULL,<br />
            &nbsp; `shell` varchar(60) default NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Jetzt brauchen wir einen Benutzer, der Zugriff auf die Tabelle bekommt:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>GRANT ALL ON proftpd.ftpuser TO `ftp`@`db.example.net` IDENTIFIED BY 'ratemal';<br />
            FLUSH PRIVILEGES;</td>
        </tr>
    </tbody>
</table>
</div>
<div>
<div>In meinem Bsp. hei&szlig;t der Benutzer &quot;ftp&quot; und das Passwort &quot;ratemal&quot;.</div>
<div>db.example.net sollte man dann noch durch die IP oder den Hostnamen des jeweiligen Servers ersetzen.</div>
</div>
<div>&nbsp;</div>
<div>Jetzt kommt die Haupt-Konfigurationsdatei von Proftpd: <strong>/etc/proftpd/proftpd.conf</strong></div>
<div>Die letzten 9 Zeilen, mit &quot;SQL&quot; beginnend sind dabei sehr wichtig! Dar&uuml;ber wird der mySQL-Zugriff gesteuert.</div>
<div>Neben dem Hostnamen sollte man auch daran denken, evtl. Log-Files zu verwenden.</div>
<div>&nbsp;</div>
<div>Anbei ein <strong>Beispiel</strong>:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>
            <div>Include /etc/proftpd/modules.conf<br />
            UseIPv6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off<br />
            ServerName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;ftp.example.net&quot;<br />
            ServerType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; standalone<br />
            DeferWelcome&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off<br />
            MultilineRFC2228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on<br />
            DefaultServer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on<br />
            ShowSymlinks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on<br />
            TimeoutNoTransfer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 600<br />
            TimeoutStalled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 600<br />
            TimeoutIdle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1200<br />
            DisplayLogin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; welcome.msg<br />
            DisplayFirstChdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .message<br />
            ListOptions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;-l&quot;<br />
            DenyFilter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *.*/<br />
            Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21<br />
            MaxInstances&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30<br />
            User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proftpd<br />
            Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nogroup<br />
            Umask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 022&nbsp; 022<br />
            AllowOverwrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on<br />
            DefaultRoot ~<br />
            TransferLog /var/log/proftpd/xferlog<br />
            SystemLog&nbsp;&nbsp; /var/log/proftpd/proftpd.log             <br />
            &lt;IfModule mod_tls.c&gt;<br />
            TLSEngine off<br />
            &lt;/IfModule&gt;<br />
            <br />
            &lt;IfModule mod_quota.c&gt;<br />
            QuotaEngine on<br />
            &lt;/IfModule&gt;<br />
            <br />
            &lt;IfModule mod_ratio.c&gt;<br />
            Ratios on<br />
            &lt;/IfModule&gt;<br />
            <br />
            &lt;IfModule mod_delay.c&gt;<br />
            DelayEngine on<br />
            &lt;/IfModule&gt;<br />
            <br />
            &lt;IfModule mod_ctrls.c&gt;<br />
            ControlsEngine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on<br />
            ControlsMaxClients&nbsp;&nbsp;&nbsp; 2<br />
            ControlsLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/log/proftpd/controls.log<br />
            ControlsInterval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
            ControlsSocket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/run/proftpd/proftpd.sock<br />
            &lt;/IfModule&gt;<br />
            <br />
            &lt;IfModule mod_ctrls_admin.c&gt;<br />
            AdminControlsEngine on<br />
            &lt;/IfModule&gt;</div>
            <div><br />
            SQLAuthTypes Backend Plaintext Crypt<br />
            SQLAuthenticate users*<br />
            SQLConnectInfo proftpd@db.example.net ftp ratemal<br />
            SQLDefaultGID 65534<br />
            SQLDefaultUID 65534<br />
            SQLMinUserGID&nbsp; 100<br />
            SQLMinUserUID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 500<br />
            SQLUserInfo ftpuser username password uid gid homedir shell<br />
            SQLLOGFILE /var/log/proftpd/proftpd.sql.log</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Das Verzeichnis /var/log/proftpd mu&szlig; man noch anlegen, wenn man die Log-Files verwenden m&ouml;chte.</div>
<div>Zur &Uuml;berwachung und f&uuml;r evtl. Debugging ist das sehr hilfreich.</div>
<div>&nbsp;</div>
<div><strong>Jetzt noch den Dienst starten: </strong><strong>/etc/init.d/proftpd start</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Mit der o.a. Konfiguration kann man jetzt einen Beispieluser erzeugen:</div>
<div><em><strong>INSERT INTO ftpuser </strong></em></div>
<div><em><strong>&nbsp;(username,password,homedir,shell) </strong></em></div>
<div><em><strong>VALUES </strong></em></div>
<div><em><strong>('testuser', ENCRYPT('testpasswort'), '/home/testuser', '/bin/bash');</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Anbei nochmal <u><strong>die wichtigsten SQL-Optionen</strong></u> erkl&auml;rt:</div>
<div>&nbsp;</div>
<div><strong><u>SQLAuthTypes</u></strong></div>
<div>Sollen die Passw&ouml;rter in der Datenbank verschl&uuml;sselt oder in Plain-Text hinterlegt werden.</div>
<div>M&ouml;gliche Werte:</div>
<div>
<table height="118" width="446" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td width="80">Crypt</td>
            <td>Crypt-Verschl&uuml;sselung</td>
        </tr>
        <tr>
            <td>Plaintext</td>
            <td>Passwort wird als Klartext in der Datenbank hinterlegt.</td>
        </tr>
        <tr>
            <td>Empty</td>
            <td>Leere Passw&ouml;rter erlaubt</td>
        </tr>
        <tr>
            <td>OpenSSL</td>
            <td>Angabe im Format '{digest-name}hashed-value'</td>
        </tr>
        <tr>
            <td>Backend</td>
            <td>Authentifizierung mit Hilfe von mySQL's PASSWORD()-Funktion</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><u><strong>SQLConnectInfo</strong></u></div>
<div>Format: datenbankname@mysql-server benutzername passwort</div>
<div>&nbsp;</div>
<div><u><strong>SQLUserInfo</strong></u></div>
<div>Mit diesen Parametern wird die SQL-Abfrage zusammengesetzt.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Man k&ouml;nnte zu ProFTPd noch weitaus mehr schreiben. Ich m&ouml;chte das Tutorial aber kurz und einfach halten.</div>
<div>Die komplette Dokumentation findet man hier: <a href="http://www.proftpd.org/docs/">www.proftpd.org/docs/</a></div>]]></content:encoded>
      <pubDate>Sun, 04 Nov 2007 19:54:38 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: Chroot'ed SFTP-Server]]></title>
      <link>http://www.cschramm.net/de/linux/ftp-server/debian-chrooted-sftp-server.html</link>
      <guid isPermaLink="false">19</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Bei der Distribution <strong>Debian Etch</strong> bietet sich f&uuml;r den chroot'ed SFTP-Server das Projekt <strong>mySecureShell </strong>an.</div>
<div>Die Installation ist sehr leicht und der Konfigurationsaufwand gering.</div>
<div>&nbsp;</div>
<div><strong><u>Installation:</u></strong></div>
<div><br />
Als <strong>Vorraussetzung </strong>m&uuml;ssen folgende Pakete installiert werden:<br />
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>apt-get install libssl0.9.7 ssh openssh-server</td>
        </tr>
    </tbody>
</table>
<br />
Jetzt wird das <strong>Debian-Package f&uuml;r mySecureShell</strong> ben&ouml;tigt:<br />
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>wget http://www.cplinux.de/downloads/mysecureshell_0.95_i386.deb<br />
            dpkg -i mysecureshell_0.95_i386.deb</td>
        </tr>
    </tbody>
</table>
<br />
Nach der Installation sollte nun der Dienst schon laufen.<br />
<br />
Damit ein Benutzer den Dienst nutzt, mu&szlig; die Shell auf <strong>/bin/MySecureShell</strong> umgestellt werden.<br />
<br />
Einen vorhandenen Benutzer kann man mit<br />
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>usermod -s /bin/MySecureShell benutzername</td>
        </tr>
    </tbody>
</table>
modifizieren. <br />
<br />
Einen neuen Benutzer kann man mit<br />
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>useradd -s /bin/MySecureShell benutzername</td>
        </tr>
    </tbody>
</table>
anlegen. Man sollte nicht vergessen, mit passwd noch ein Passwort zu setzen.<br />
<br />
Damit sollte einem Login nun nichts mehr im Wege stehen.<br />
Das home-Verzeichnis des Benutzers (im Bsp. /home/benutzername) sollte nat&uuml;rlich existieren und der Benutzer sollte die Berechtigung darauf haben.<br />
<u><strong><br />
Anmerkung zur Konfiguration:</strong></u></div>
<div><br />
F&uuml;r das Fine-Tuning kann man die Datei<strong> /etc/ssh/sftp_config </strong>anpassen.<br />
Die Datei sieht folgenderma&szlig;en aus:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>## MySecureShell Configuration File ##<br />
            #Default rules for everybody<br />
            &lt;Default&gt;<br />
            &nbsp;&nbsp;&nbsp; GlobalDownload&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 50k&nbsp;&nbsp;&nbsp; #total speed download for all clients<br />
            &nbsp;&nbsp;&nbsp; # o -&gt; bytes&nbsp;&nbsp; k -&gt; kilo bytes&nbsp;&nbsp; m -&gt; mega bytes<br />
            &nbsp;&nbsp;&nbsp; GlobalUpload&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #total speed download for all clients (0 for unlimited)<br />
            &nbsp;&nbsp;&nbsp; Download &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 5k&nbsp;&nbsp;&nbsp; #limit speed download for each connection<br />
            &nbsp;&nbsp;&nbsp; Upload &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #unlimit speed upload for each connection<br />
            &nbsp;&nbsp;&nbsp; StayAtHome&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #limit client to his home<br />
            &nbsp;&nbsp;&nbsp; VirtualChroot&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #fake a chroot to the home account<br />
            &nbsp;&nbsp;&nbsp; LimitConnection&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp; #max connection for the server sftp<br />
            &nbsp;&nbsp;&nbsp; LimitConnectionByUser&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; #max connection for the account<br />
            &nbsp;&nbsp;&nbsp; LimitConnectionByIP&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; #max connection by ip for the account<br />
            &nbsp;&nbsp;&nbsp; Home&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /home/$USER&nbsp;&nbsp;&nbsp; #overrite home of the user but if you want you can use<br />
            &nbsp;&nbsp;&nbsp; IdleTimeOut&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 300&nbsp;&nbsp;&nbsp; #(in second) deconnect client is idle too long time<br />
            &nbsp;&nbsp;&nbsp; ResolveIP&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #resolve ip to dns<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; IgnoreHidden&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #treat all hidden files as if they don't exist<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; DirFakeUser&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #Hide real file/directory owner (just change displayed permissions)<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; DirFakeGroup&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #Hide real file/directory group (just change displayed permissions)<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; DirFakeMode&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0400&nbsp;&nbsp;&nbsp; #Hide real file/directory rights (just change displayed permissions)<br />
            &nbsp;&nbsp;&nbsp; #Add execution right for directory if read right is set<br />
            &nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; HideFiles&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;^(lost+found|public_html)$&quot;&nbsp;&nbsp;&nbsp; #Hide file/directory (POSIX regex)<br />
            &nbsp;&nbsp;&nbsp; HideNoAccess&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #Hide file/directory which user has no access<br />
            &nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; MaxOpenFilesForUser&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp; #limit user to open x files on same time<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; MaxWriteFilesForUser&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp; #limit user to x upload on same time<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; MaxReadFilesForUser&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp; #limit user to x download on same time<br />
            &nbsp;&nbsp;&nbsp; DefaultRights&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0640 0750&nbsp;&nbsp;&nbsp; #Set default rights for new file and new directory<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; PathDenyFilter&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;^.&quot;&nbsp;&nbsp;&nbsp; #deny upload of directory/file which match this extented POSIX regex<br />
            &nbsp;&nbsp;&nbsp; ShowLinksAsLinks&nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #show links as their destinations<br />
            &nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; ConnectionMaxLife&nbsp;&nbsp;&nbsp; 1d&nbsp;&nbsp;&nbsp; #limits connection lifetime to 1 day<br />
            <br />
            &nbsp;&nbsp;&nbsp; Charset&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;ISO-8859-15&quot;&nbsp;&nbsp;&nbsp; #set charset of computer<br />
            &nbsp;&nbsp;&nbsp;             #&nbsp;&nbsp;&nbsp; GMTTime&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; +1&nbsp;&nbsp;&nbsp; #set GMT Time (change if necessary)<br />
            &lt;/Default&gt;<br />
            <br />
            #Rules only for group ftp<br />
            #&lt;Group ftp&gt;<br />
            #&nbsp;&nbsp;&nbsp; Download&nbsp;&nbsp;&nbsp; 25 k/s<br />
            #&lt;/Group&gt;<br />
            <br />
            #&lt;Group sftp_administrator&gt;<br />
            #&nbsp;&nbsp;&nbsp; IsAdmin&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #can admin the server<br />
            #&nbsp;&nbsp;&nbsp; VirtualChroot&nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #you must disable chroot to have a full support of admin<br />
            #&nbsp;&nbsp;&nbsp; StayAtHome&nbsp;&nbsp;&nbsp; true<br />
            #&nbsp;&nbsp;&nbsp; IdleTimeOut&nbsp;&nbsp;&nbsp; 0<br />
            #&lt;/Group&gt;<br />
            <br />
            #&lt;Group old_client&gt;<br />
            #&nbsp;&nbsp;&nbsp; SftpProtocol&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; #force protocol SFTP<br />
            #&nbsp;&nbsp;&nbsp; DisableAccount&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #disable account<br />
            #&lt;/Group&gt;<br />
            <br />
            #Rules only for group ftpnolimit<br />
            #&lt;Group ftpnolimit&gt;<br />
            #&nbsp;&nbsp;&nbsp; Download&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #0 = unlimited<br />
            #&nbsp;&nbsp;&nbsp; IdleTimeOut&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #no timeout<br />
            #&nbsp;&nbsp;&nbsp; DirFakeUser&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #show real user on file/directory<br />
            #&nbsp;&nbsp;&nbsp; DirFakeGroup&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #show real group on file/directory<br />
            #&nbsp;&nbsp;&nbsp; DirFakeMode&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #show real rights on file/directory<br />
            #&nbsp;&nbsp;&nbsp; HideFiles&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&quot;&nbsp;&nbsp;&nbsp; #show all files<br />
            #&nbsp;&nbsp;&nbsp; MaxReadFilesForUser&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #0 = unlimited but still have the restriction MaxOpenFilesForUser<br />
            #&lt;/Group&gt;<br />
            <br />
            #&lt;IpRange 192.168.0.1-192.168.0.5&gt;<br />
            #&nbsp;&nbsp;&nbsp; ByPassGlobalDownload&nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #bypass GlobalDownload restriction<br />
            #&nbsp;&nbsp;&nbsp; ByPassGlobalUpload&nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; #bypass GlobalUpload restriction<br />
            #&nbsp;&nbsp;&nbsp; Download&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0<br />
            #&nbsp;&nbsp;&nbsp; DisableAccount&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #enable account<br />
            #&nbsp;&nbsp;&nbsp; IdleTimeOut&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #disable timeout<br />
            #&nbsp;&nbsp;&nbsp; LimitConnectionByIP&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #no limit<br />
            #&lt;/IpRange&gt;<br />
            <br />
            #&lt;Group trusted_users&gt;<br />
            #&nbsp;&nbsp;&nbsp; Shell&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /bin/tcsh&nbsp;&nbsp;&nbsp; #give a shell access to TRUSTED clients !!!<br />
            #&lt;/Group&gt;<br />
            <br />
            #&lt;VirtualHost *:22&gt; <br />
            #&nbsp;&nbsp;&nbsp; DirFakeUser&nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #show real user on file/directory<br />
            #&nbsp;&nbsp;&nbsp; DirFakeGroup&nbsp;&nbsp;&nbsp; false&nbsp;&nbsp;&nbsp; #show real group on file/directory<br />
            #&nbsp;&nbsp;&nbsp; DirFakeMode&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; #show real rights on file/directory<br />
            #&nbsp;&nbsp;&nbsp; HideNoAccess&nbsp;&nbsp;&nbsp; false<br />
            #&nbsp;&nbsp;&nbsp; IgnoreHidden&nbsp;&nbsp;&nbsp; false<br />
            #&lt;/VirtualHost&gt;<br />
            <br />
            #Include /etc/my_sftp_config_file&nbsp;&nbsp;&nbsp; #include this valid configuration file</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sun, 04 Nov 2007 19:41:33 +0100</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[SSH-Zugriff ohne Anmeldung]]></title>
      <link>http://www.cschramm.net/de/linux/ssh-vnc/ssh-zugriff-ohne-anmeldung.html</link>
      <guid isPermaLink="false">18</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>M&ouml;chte man Daten zwischen mehreren Servern per SSH / SCP austauschen, ohne sich jedes Mal mit dem Passwort anmelden zu m&uuml;ssen, gibt es hier einen einfachen Weg:</div>
<div>&nbsp;</div>
<div>Zuerst generieren wir die Schl&uuml;sselpaare auf beiden Servern mit: <em><strong>ssh-keygen -t rsa</strong></em></div>
<div>&nbsp;</div>
<div>Jetzt wechseln wir in das Home-Verzeichnis des angemeldeten Benutzers und dann in das versteckte Unterverzeichnis: <strong>.ssh</strong></div>
<div>&nbsp;</div>
<div>Der &ouml;ffentliche Schl&uuml;ssel befindet sich in der Datei <strong>id_rsa.pub</strong>, den wir nun auf das Zielsystem kopieren:</div>
<div>&nbsp;</div>
<div><em><strong>scp id_rsa.pub benutzer@ip-des-testsystems:/home/benutzer/</strong></em></div>
<div>Bsp. f&uuml;r Benutzer root und IP 192.168.0.1: scp id_rsa.pub root@192.168.0.1:/root/</div>
<div>&nbsp;</div>
<div>Jetzt h&auml;ngen wir den Hinhalt der Datei id_rsa.pub an die Datei .ssh/authorized_keys an, bzw. erstellen die Datei mit dem Inhalt, falls sie noch nicht existiert.</div>
<div>&nbsp;</div>
<div>Jetzt wechseln wir <strong>in das Home-Verzeichnis des Benutzers auf dem Zielsystem</strong> und f&uuml;hren folgenden Befehl aus:</div>
<div><strong><em>cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</em></strong></div>
<div>Danach den kopierten Schl&uuml;ssel wieder l&ouml;schen:</div>
<div><em><strong>rm id_rsa.pub</strong></em></div>
<div>&nbsp;</div>
<div>Das war's! Jetzt kann man sich per SSH ohne Passwort auf das Zielsystem verbinden.</div>
<div>Damit das in die Gegenrichtigung auch funktioniert, f&uuml;hrt man die o.a. Schritte auf dem anderen Server auch noch aus.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 20 Oct 2007 14:41:29 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Postfix mit mySQL Courier-Konfiguration]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-mit-mysql-courier-konfiguration.html</link>
      <guid isPermaLink="false">17</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[postfix,mysql,courier,imap,smtp,main.cf,auth,aliases,destination,recipient_canonical,sender_canonical,transport,forwarding<br/><div>Vorbemerkung: Dieses Tutorial ist mit dem <strong><a href="http://www.cplinux.de/e-mail-server/courier-imap-mit-mysql.html">CourierIMAP-Tutorial</a></strong> kombinierbar.</div>
<div>
<div>&nbsp;</div>
<div>Mit <strong>apt-get install postfix postfix-mysql</strong> kann man die ben&ouml;tigten Pakete installieren.<br />
Dies ist eine Beispielkonfiguration von Postfix mit mySQL als Backend:</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/main.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)<br />
            biff = no<br />
            <br />
            append_dot_mydomain = no<br />
            delay_warning_time = 2h<br />
            <br />
            bounce_queue_lifetime = 1d<br />
            transport_retry_time = 10s<br />
            trigger_timeout = 20s<br />
            <br />
            myhostname = mail.example.net<br />
            mydomain = mail.example.net<br />
            alias_maps = mysql:/etc/postfix/mysql_aliases.cf<br />
            sender_canonical_maps = mysql:/etc/postfix/mysql_sender_canonical.cf<br />
            recipient_canonical_maps = mysql:/etc/postfix/mysql_recipient_canonical.cf<br />
            transport_maps = mysql:/etc/postfix/mysql_transport.cf<br />
            mydestination = mysql:/etc/postfix/mysql_destination.cf<br />
            virtual_mailbox_domains = mysql:/etc/postfix/mysql_destination_virtual.cf<br />
            virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailboxes.cf<br />
            virtual_alias_maps = mysql:/etc/postfix/mysql_email2email.cf mysql:/etc/postfix/mysql_forwarding.cf<br />
            <br />
            virtual_uid_maps = static:5000<br />
            virtual_gid_maps = static:5000<br />
            virtual_mailbox_base = /home/vmail<br />
            mailbox_transport = virtual<br />
            <br />
            mynetworks = 127.0.0.0/8<br />
            message_size_limit = 8000000<br />
            inet_interfaces = all<br />
            myorigin = mail.example.net<br />
            <br />
            smtpd_sasl_auth_enable = yes<br />
            smtpd_sasl_security_options = noanonymous<br />
            smtpd_sasl_local_domain = $mydestination<br />
            <br />
            smtpd_helo_required = yes<br />
            smtpd_delay_reject = yes<br />
            smtpd_recipient_restrictions =&nbsp; permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_destination, reject_unlisted_recipient, reject_unauth_pipelining<br />
            <br />
            broken_sasl_auth_clients = yes<br />
            remote_header_rewrite_domain = $mydestination<br />
            local_header_rewrite_clients = $mydestination</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>
<div>Der Zugriff auf die verschiedenen Maps erfolgt &uuml;ber mySQL.<br />
Nachfolgend gehe ich davon aus, dass die Tabellen in der <strong>Datenbank postfix</strong> abgelegt werden. B<strong>enutzername und Passwort in dem Bsp. ist post</strong>.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE DATABASE postfix;<br />
            GRANT ALL ON postfix.* TO post@localhost IDENTIFIED BY 'post';</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><br />
<strong><u> Es m&uuml;ssen nun folgende Tabellen angelegt werden:</u></strong></div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `aliases` (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `alias` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;</td>
        </tr>
    </tbody>
</table>
Diese Tabelle enth&auml;lt Aliase f&uuml;r bestimmte Linux-Benutzer. Z.B. kann man die Post f&uuml;r root hier an webmaster weiterleiten.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `destination` (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; `virtual` int(1) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;</td>
        </tr>
    </tbody>
</table>
Diese Tabelle enth&auml;lt alle Domains, f&uuml;r die der Mailserver E-Mails annehmen darf. In unserem Beispiel example.net.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `forwarding` (<br />
            &nbsp; `id` int(5) NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(100) NOT NULL,<br />
            &nbsp; `destination` varchar(100) NOT NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=51 ;</td>
        </tr>
    </tbody>
</table>
M&ouml;chte man E-Mails an bestimmte Adressen automatisch an einen oder mehrere Personen weiterleiten, k&ouml;nnen die Adressen hier eingetragen werden. Mehrfacheintr&auml;ge f&uuml;r eine Adresse sind also kein Problem. Bsp.:<br />
ID1: verteiler@example.net -&gt; personA@example.net<br />
ID2: verteiler@example.net -&gt; personB@example.net<br />
u.s.w.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `recipient_canonical` (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;</td>
        </tr>
    </tbody>
</table>
Hier k&ouml;nnen ankommende Mails an bestimmte E-Mail-Accounts weitergeleitet werden.<br />
Bsp.: jmd. sendet eine E-Mail an max.mustermann@example.net.<br />
Hier kann man festlegen, dass diese E-Mail an das Postfach mustermann@example.net geht.<br />
Die Mailbox max.mustermann mu&szlig; dabei nicht existieren.<br />
<br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `sender_canonical` (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=53 ;</td>
        </tr>
    </tbody>
</table>
Hier werden ausgehende Mails maskiert. Sendet mustermann@example.net eine E-Mail wird sie vor dem Versand z.B. als max.mustermann@example.net maskiert.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE TABLE `transport` (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `domain` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`),<br />
            &nbsp; UNIQUE KEY `domain` (`domain`)<br />
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</td>
        </tr>
    </tbody>
</table>
Hier kann man festlegen, dass ausgehende Mails an bestimmte Domains &uuml;ber andere Server bzw. Dienste zugestellt werden sollen.<br />
Bsp.: cplinux.de -&gt; smtp:mail.cplinux.de:25</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `users` </strong>(<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(100) NOT NULL,<br />
            &nbsp; `password` varchar(100) NOT NULL default '',<br />
            &nbsp; `status` int(1) NOT NULL default '1',<br />
            &nbsp; `quota` varchar(20) NOT NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;</td>
        </tr>
    </tbody>
</table>
<strong> Hier werden die E-Mail-Adressen mit Passwort gef&uuml;hrt. </strong>Das Feld Quota in der tabelle ist optional. Steuert man z.B. nicht nur Postfix, sondern auch z.B. einen IMAP-Server wie Cyrus &uuml;ber mySQL, k&ouml;nnte man hier auch gleich die Quota mit verwalten. Der Status ist in diesem Bsp. 0 (deaktiviert) oder 1 (aktiviert).<br />
Je nach dem ob cyrus-sasl mit Crypt-Support installiert wurde oder nicht, mu&szlig; das Passwort im Klartext oder mit verschl&uuml;sselt (mySQL-Funktion ENCRYPT) in der Datenbank abgelegt werden.</div>
<div><em><strong>Diese Tabelle wird auch von Courier verwendet!</strong></em><br />
<br />
Die <strong>Postfix-Konfigurationsdateien</strong> f&uuml;r die verschiedenen Tabellen sehen so aus:<br />
<br />
<strong> /etc/postfix/mysql_aliases.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = aliases<br />
            select_field = destination<br />
            where_field = alias<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_auth.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = email<br />
            where_field = password<br />
            additional_conditions = and status='1'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_destination.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = destination<br />
            select_field = destination<br />
            where_field = destination<br />
            additional_conditions = and virtual='0'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_destination_virtual.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = destination<br />
            select_field = destination<br />
            where_field = destination<br />
            additional_conditions = and virtual='1'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_email2email.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = email<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_forwarding.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = forwarding<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_mailboxes.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_recipient_canonical.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = recipient_canonical<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<strong><br />
/etc/postfix/mysql_sender_canonical.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = sender_canonical<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<br />
<strong> /etc/postfix/mysql_transport.cf</strong><br />
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = postfix<br />
            password = post<br />
            dbname = postfix<br />
            table = transport<br />
            select_field = destination<br />
            where_field = domain<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Jetzt sollte man noch SMTP-Auth konfigurieren, damit man die E-Mails auch nach extern versenden kann. Wie das geht, steht hier.</div>
<div><a href="http://www.cplinux.de/e-mail-server/smtp-auth-in-einer-postfix-mysql-konfiguration-aufsetzen.html">www.cplinux.de/e-mail-server/smtp-auth-in-einer-postfix-mysql-konfiguration-aufsetzen.html</a></div>
<div><br />
Ist Postfix fertig konfiguriert, ist es Zeit f&uuml;r einen ersten Start: <strong>/etc/init.d/postfix start</strong></div>
</div>
</div>
<div>&nbsp;</div>
</div>]]></content:encoded>
      <pubDate>Thu, 30 Aug 2007 21:26:01 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Courier IMAP mit mySQL]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/courier-imap-mit-mysql.html</link>
      <guid isPermaLink="false">16</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Ok, zu allererst installieren wir die ben&ouml;tigten Pakete:</div>
<div><strong>apt-get install courier-authdaemon courier-authlib courier-authlib-mysql courier-base courier-imap</strong></div>
<div>&nbsp;</div>
<div>Nachfolgend erl&auml;utere ich eine Multi-Domain-Konfiguration f&uuml;r den Courier-IMAP-Server.</div>
<div>Die Authentifizierung der Benutzer erfolgt &uuml;ber mySQL.</div>
<div>So wird das Anlegen und Verwalten neuer Benutzer stark vereinfacht.</div>
<div>&nbsp;</div>
<div>Die mySQL-Tabelle f&uuml;r die Benutzerauthentifierung sieht in dieser Konfiguration folgenderma&szlig;en aus:</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `users`</strong> (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(100) NOT NULL,<br />
            &nbsp; `password` varchar(100) NOT NULL default '',<br />
            &nbsp; `status` int(1) NOT NULL default '1',<br />
            &nbsp; `quota` varchar(20) NOT NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Der Verzeichnisaufbau f&uuml;r diese Konfiguration ist folgenderma&szlig;en:</div>
<div><strong>/home/vmail/&lt;domain&gt;/&lt;benutzername&gt;</strong></div>
<div>&nbsp;</div>
<div>In der Tabelle users im Feld email steht sp&auml;ter die komplette E-Mail-Adresse. Die Adresse ist sp&auml;ter auch der Login.</div>
<div>&nbsp;</div>
<div>Jetzt sollte man einen Benutzer vmail anlegen:</div>
<div><em><strong>groupadd -g 5000 vmail<br />
</strong></em></div>
<div><em><strong>useradd -g 5000 -u 5000 -d /home/vmail </strong></em><em><strong>vmail</strong></em></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Der Benutzer vmail mu&szlig; immer Lese- und Schreib-Berechtigungen f&uuml;r den Ordner haben, sonst kommt es sp&auml;ter zu Problemen.</div>
<div>&nbsp;</div>
<div>Falls jmd. jetzt schon ein Domainverzeichnis angelegt hat, sollte man zur Sicherheit nochmal ein</div>
<div><strong><em>chown -R vmail /home/vmail && chgrp -R vmail /home/vmail</em></strong></div>
<div>ausf&uuml;hren.</div>
<div>&nbsp;</div>
<div>Nun m&uuml;ssen noch ein paar Dateien angepasst werden. Die Konfigurationsdateien befinden sich in <strong>/etc/courier</strong>.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>/etc/courier/authdaemonrc</strong></div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>....<br />
            authmodulelist=&quot;authmysql&quot;<br />
            ....</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>/etc/courier/authmodulelist</strong></div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>authdaemon</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong>/etc/courier/authmysqlrc</strong></div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>....<br />
            MYSQL_SERVER&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; localhost<br />
            MYSQL_USERNAME&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; meinBenutzername<br />
            MYSQL_PASSWORD&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; meinPasswort<br />
            MYSQL_PORT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3306<br />
            MYSQL_DATABASE&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; postfix<br />
            MYSQL_USER_TABLE&nbsp;&nbsp;&nbsp; users<br />
            #MYSQL_CRYPT_PWFIELD&nbsp;&nbsp;&nbsp; crypt&nbsp; #optionale Crypt-Verschl&uuml;sselung der Passw&ouml;rter<br />
            MYSQL_CLEAR_PWFIELD&nbsp;&nbsp;&nbsp; password&nbsp; #Passwort im Klartext<br />
            #DEFAULT_DOMAIN&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; example.com&nbsp; #wenn keine Domain angegeben wird<br />
            MYSQL_UID_FIELD&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; '5000'<br />
            MYSQL_GID_FIELD&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; '5000'<br />
            MYSQL_LOGIN_FIELD&nbsp;&nbsp;&nbsp; email<br />
            MYSQL_HOME_FIELD&nbsp;&nbsp;&nbsp; CONCAT('/home/vmail/',SUBSTRING_INDEX(email,'@',-1),'/')<br />
            MYSQL_MAILDIR_FIELD&nbsp;&nbsp;&nbsp; CONCAT(SUBSTRING_INDEX(email,'@',1),'/')<br />
            MYSQL_WHERE_CLAUSE&nbsp;&nbsp;&nbsp; status='1'<br />
            ....</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>Ok, das war's schon. Jetzt wird es Zeit f&uuml;r einen ersten Start.</div>
<div>
<div><strong>/etc/init.d/courier-authdaemon restart</strong></div>
<strong>/etc/init.d/courier-imap restart</strong></div>
<div>&nbsp;</div>
<div>Postf&auml;cher werden nun ganz einfach durch Anlegen/&Auml;ndern des Datenbankeintrags verwaltet.</div>
<div>&nbsp;</div>
<div>Um entsprechende Maildir's auf dem Server anzulegen gibt es den Befehl <strong>maildirmake</strong> bzw. bei Debian auch <strong>maildirmake.courier</strong>.</div>
<div>Damit kann man in /home/vmail ganz einfach ein neues anlegen, z.B.: <strong>maildirmake.courier webmaster</strong></div>
<div>&nbsp;</div>
<div>Der <strong>Status in der Tabelle users</strong> dient dazu, evtl. Benutzer sperren zu k&ouml;nnen (Status 1 = aktiv).</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Sat, 18 Aug 2007 17:55:56 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Debian: apt-get Grundlagen]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/debian-apt-get-grundlagen.html</link>
      <guid isPermaLink="false">15</guid>
      <description><![CDATA[In diesem Artikel will ich kurz einige wichtige Befehle zur Installation von Updates und Paketen zeigen....]]></description>
      <content:encoded><![CDATA[apt-get,apt,sources.list,squeeze,lenny,etch,sarge,unstable,stable,apt-cache,dist-upgrade,search<br/><div>
	In diesem Artikel will ich kurz einige wichtige Befehle zur Installation von Updates und Paketen zeigen.</div>
<div>
	F&uuml;r das Paket-Management bei Debian ist <strong>apt-get</strong> verantwortlich.</div>
<div>
	&nbsp;</div>
<div>
	Dar&uuml;ber, welche Pakete f&uuml;r das Betriebssystem installiert werden k&ouml;nnen, bestimmt die Datei sources.list. Hier ein Beispiel:</div>
<div>
	&nbsp;</div>
<div>
	<strong>/etc/apt/sources.list:</strong></div>
<div>
	deb <a class="moz-txt-link-freetext" href="http://ftp.de.debian.org/debian/">http://ftp.de.debian.org/debian/</a> etch main<br />
	deb-src <a class="moz-txt-link-freetext" href="http://ftp.de.debian.org/debian/">http://ftp.de.debian.org/debian/</a> etch main<br />
	deb <a class="moz-txt-link-freetext" href="http://security.debian.org/">http://security.debian.org/</a> etch/updates main contrib<br />
	deb-src <a class="moz-txt-link-freetext" href="http://security.debian.org/">http://security.debian.org/</a> etch/updates main contrib</div>
<div>
	&nbsp;</div>
<div>
	Der Name <strong>etch</strong> steht hier f&uuml;r den Codenamen der aktuellen Stable-Distribution.</div>
<div>
	Stattdessen k&ouml;nnte man z.B. auch <strong>sarge</strong>,<strong> lenny, squeeze (current), stable</strong> oder <strong>unstable</strong> verwenden.</div>
<div>
	<strong>unstable</strong> enth&auml;lt die neuesten Pakete, die aber meiner Meinung noch nicht f&uuml;r den Produktiveinsatz hergenommen werden sollten.</div>
<div>
	<strong>stable </strong>dagegen zeigt immer auf den aktuellsten, fertiggestellten Milestone des Projekts, aktuell etch.</div>
<div>
	&nbsp;</div>
<div>
	Ich w&uuml;rde empfehlen hier den Codenamen der Distribution zu verwenden, wie in dem Bsp. oben. Das ist der einfachste und g&auml;ngiste Weg.</div>
<div>
	&nbsp;</div>
<div>
	Die lokale Liste der in den Repositories verf&uuml;gbaren Pakete kann man mit</div>
<div>
	<strong>apt-get update</strong></div>
<div>
	aktualisieren.</div>
<div>
	&nbsp;</div>
<div>
	Aktuelle Updates kann man mit</div>
<div>
	<strong>apt-get upgrade</strong></div>
<div>
	installieren.</div>
<div>
	&nbsp;</div>
<div>
	Ist man auf der Suche nach einem speziellen Paket, kann man eine Suche in der Paketliste mit</div>
<div>
	<strong>apt-cache search paketname</strong></div>
<div>
	durchf&uuml;hren.</div>
<div>
	&nbsp;</div>
<div>
	Die Installation startet man mit <strong>apt-get install paketname</strong></div>
<div>
	Ein Paket deinstallieren kann man mit <strong>apt-get remove paketname</strong> (mit der Option --purge, einzuf&uuml;gen vor dem Paketnamen, kann man ebenfalls bestehende Konfigurationsdateien mit l&ouml;schen)</div>
<div>
	&nbsp;</div>
<div>
	M&ouml;chte man die komplette Distribution upgraden, kann man das mit <strong>apt-get dist-upgrade</strong> tun.</div>
<div>
	&nbsp;</div>
<div>
	Mit <strong>apt-get und dpkg </strong>kann man noch weit mehr anstellen, ber das folgt evtl. in einem anderen Artikel.</div>
]]></content:encoded>
      <pubDate>Mon, 23 Jul 2007 14:23:39 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: Web-Projekte mit SUBVERSION]]></title>
      <link>http://www.cschramm.net/de/linux/svn-cvs/debian-web-projekte-mit-subversion.html</link>
      <guid isPermaLink="false">14</guid>
      <description><![CDATA[In diesem Tutorial zeige ich, wie man relativ einfach einen Subversion-Server für seine Web-Projekte aufsetzen kann. Installiert habe ich das Ganze auf einem Debian Etch System....]]></description>
      <content:encoded><![CDATA[svn,svnadmin,subversion,subversion-tools,project,commit,post-commit,checkout<br/><div>
	In diesem Tutorial zeige ich, wie man relativ einfach einen Subversion-Server f&uuml;r seine <u><strong>Web-Projekte</strong></u> aufsetzen kann.</div>
<div>
	Installiert habe ich das Ganze auf einem Debian Etch System, die Anleitung funktioniert aber auch auf Lenny und Squeeze.</div>
<div>
	&nbsp;</div>
<div>
	F&uuml;r die Installation ben&ouml;tigt man root Rechte.</div>
<div>
	Dann m&uuml;ssen erst einmal die erforderlichen Pakete installiert werden: <strong>apt-get install subversion subversion-tools</strong></div>
<div>
	&nbsp;</div>
<div>
	Jetzt legt man das SVN-Repository - hier nenne ich es einfach <em><strong>projekt</strong></em> - an. Ich w&uuml;rde vorschlagen, es in /var/svn/ anzulegen:</div>
<div>
	<strong>mkdir /var/svn</strong></div>
<div>
	<strong>cd /var/svn</strong></div>
<div>
	<strong>svnadmin create projekt</strong></div>
<div>
	&nbsp;</div>
<div>
	Damit haben wir schon mal das Wichtigste erledigt. Jetzt sollte das Repository angepasst werden:</div>
<div>
	&nbsp;</div>
<div>
	Zun&auml;chste editiert man nun die Datei <strong>conf/svnserve.conf</strong>:</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					[general]<br />
					anon-access = none #Anonymer Zugriff auf das Repository ist nicht erlaubt<br />
					auth-access = write #Authentifizierte Benutzer bekommen Schreibberechtigung<br />
					password-db = passwd #wie sollen die Benutzer authentifiziert werden? In unserem Fall &uuml;ber ein passwd-File<br />
					realm = projekt.example.net #hier die Domain eintragen</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	Damit sich die Benutzer nun auch anmelden k&ouml;nnen, m&uuml;ssen wir das passwd-File&nbsp; <strong>conf/passwd</strong> anlegen:</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					[users]<br />
					testbenutzer = testpasswort #Benutzername = Passwort im Klartext<br />
					root = rootpasswort #Ich arbeite in der Konfiguration lokal mit root</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	Jetzt kommt ein wichtiger Punkt, der speziell f&uuml;r Web-Projekte wichtig ist. Ich gehe davon aus, dass wir den Checkout sp&auml;ter so durchf&uuml;hren, dass das Webserver-Verzeichnis /var/www/projekt hei&szlig;t. Das l&auml;&szlig;t sich ja individuell anpassen.</div>
<div>
	&nbsp;</div>
<div>
	Es wird nun die Datei <strong>hooks/post-commit </strong>angelegt:</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					#!/bin/sh<br />
					REPOS=&quot;$1&quot;<br />
					REV=&quot;$2&quot;<br />
					/usr/bin/svn update /var/www/projekt &gt;&gt; /var/svn/projekt/commit.log 2&gt;&amp;1</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	Anmerkung:</div>
<div>
	Die Commits werden in meiner Konfiguration in die Datei commit.log gespeichert. Die Datei wird mit der Zeit ziemlich gro&szlig;. Also sollte man die Datei z.B. mittels Cron-Job hin und wieder leeren.</div>
<div>
	Bsp. f&uuml;r ein Shell-Script:</div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					#!/bin/bash<br />
					gzip -9 -f /var/svn/projekt/commit.log<br />
					touch /var/svn/projekt/commit.log<br />
					chmod 777 /var/svn/projekt/commit.log</td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<strong>Das Post-Commit-Script bewirkt nun, dass das lokale Arbeitsverzeichnis /var/www/projekt bei jedem Commit in die SVN-Datenbank automatisch aktualisiert wird.</strong></div>
<div>
	Auf diese Weise sind &Auml;nderungen direkt auf dem Webserver sichtbar.</div>
<div>
	&nbsp;</div>
<div>
	So weit so gut. Nun k&uuml;mmern wir uns um die Berechtigungen:</div>
<div>
	<strong>chgrp -R subversion /var/svn/projekt</strong></div>
<div>
	<strong>chown -R root /var/svn/projekt</strong></div>
<div>
	&nbsp;</div>
<div>
	In meiner Konfiguration arbeite ich mit dem Benutzer root, der sich neben der Gruppe root auch in der Gruppe subversion befindet. Das sollte, wenn man diese Konfiguration 1:1 &uuml;bernimmt auf jeden Fall noch angepasst werden:</div>
<div>
	In der Datei <strong>/etc/group</strong> sollten der <strong>Gruppe subversion alle Benutzer hinzugef&uuml;gt</strong> werden die auf den Server Zugriff bekommen, bzw. die in der <strong>conf/passwd</strong> stehen.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt wird es Zeit, den Dienst zum ersten Mal zu starten. F&uuml;r die Zukunft empfielt es sich, ein kleines Script daf&uuml;r anzulegen.</div>
<div>
	<strong>nohup svnserve -r /var/svn/projekt/ -d --listen-port 3690</strong></div>
<div>
	&nbsp;</div>
<div>
	Der Standard-Port f&uuml;r den Dienst ist 3690.</div>
<div>
	&nbsp;</div>
<div>
	Jetzt f&uuml;hren wir einen Checkout durch:</div>
<div>
	<strong>cd /var/www</strong></div>
<div>
	<strong>svn checkout svn://localhost:3690 ./</strong></div>
<div>
	Statt localhost kann man auch die IP oder den Namen des Servers verwenden. Es wird nun noch das SVN-Passwort f&uuml;r den Benutzer root ben&ouml;tigt, dann folgt der Checkout.</div>
<div>
	&nbsp;</div>
<div>
	Ist der Checkout komplett, passt man nun eimalig die Berechtigungen an:</div>
<div>
	<div>
		<strong>chgrp -R subversion /var/www/projekt<br />
		</strong></div>
	<div>
		<strong>chown -R root /var/www/projekt</strong></div>
	<div>
		<strong>chmod -R 777 /var/www/projekt</strong></div>
	<div>
		Es mu&szlig; nicht unbedingt 777 (Vollzugriff) f&uuml;r die Berechtigungen sein. Das kann man je nach Bedarf anpassen.</div>
	<div>
		&nbsp;</div>
	<div>
		Gut!</div>
	<div>
		Nun sollte man von einem Client aus einen Checkout durchf&uuml;hren. Werden nun &Auml;nderungen an das Repository &uuml;bertragen, sollten die &Auml;nderungen auf dem Webserver sofort sichtbar sein.</div>
	<div>
		Falles es wider Erwarten Probleme gibt, empfielt es sich, einen Blick in die Datei commit.log zu werfen.</div>
	<div>
		Die h&auml;ufigste Ursache f&uuml;r Fehler sind bei Subversion meiner Erfahrung nach Berechtigungsprobleme.</div>
	<div>
		&nbsp;</div>
	<div>
		Noch ein paar Hinweise f&uuml;r den Webserver:</div>
	<div>
		In der lokalen Arbeitskopie auf dem Webserver gibt es versteckte Verzeichnisse mit dem Namen <strong>.svn</strong>. Es empfielt sich, den Zugriff auf diese Verzeichnisse per .htaccess zu unterbinden, z.B. so:</div>
	<div>
		<table border="1" cellpadding="1" cellspacing="1" width="100%">
			<tbody>
				<tr>
					<td>
						&lt;Directory ~ &quot;.svn&quot;&gt;<br />
						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
						&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deny from all<br />
						&lt;/Directory&gt;</td>
				</tr>
			</tbody>
		</table>
	</div>
	<div>
		&nbsp;</div>
</div>
]]></content:encoded>
      <pubDate>Mon, 23 Jul 2007 13:46:06 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Die Datei /etc/mtab]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/die-datei-etc-mtab.html</link>
      <guid isPermaLink="false">13</guid>
      <description><![CDATA[Alle im System eingebundenen Laufwerke werden automatisch mit ihren Optionen in /etc/mtab eingetragen. Die Datei wird automatisch generiert....]]></description>
      <content:encoded><![CDATA[mtab,fstab,etc,proc,mounts,drive,mount,point,file,options,dump,check<br/><div>
	Alle im System eingebundenen Laufwerke werden automatisch mit ihren Optionen in /etc/mtab eingetragen.</div>
<div>
	Die Datei wird automatisch generiert.</div>
<div>
	&nbsp;</div>
<div>
	Die Optionen der Reihe nach:</div>
<ul>
	<li>
		<strong>Laufwerk</strong></li>
	<li>
		<strong>Mountpoint</strong></li>
	<li>
		<strong>Dateisystem</strong></li>
	<li>
		<strong>Optionen</strong></li>
	<li>
		<strong>Dump</strong></li>
	<li>
		<strong>Check</strong></li>
</ul>
<div>
	Die Bedeutung der einzelnen Punkte kann man hier nachlesen:</div>
<div>
	<a href="http://www.cschramm.net/de/linux/allgemein/die-datei-etc-fstab.html">http://www.cschramm.net/de/linux/allgemein/die-datei-etc-fstab.html</a></div>
<div>
	&nbsp;</div>
<div>
	Ein <strong>Beispiel:</strong></div>
<div>
	<table border="1" cellpadding="1" cellspacing="1" width="100%">
		<tbody>
			<tr>
				<td>
					<em>dev/sda2 / ext3 rw,errors=remount-ro 0 0<br />
					tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0<br />
					proc /proc proc rw,noexec,nosuid,nodev 0 0<br />
					sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0<br />
					procbususb /proc/bus/usb usbfs rw 0 0<br />
					udev /dev tmpfs rw,mode=0755 0 0<br />
					tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0<br />
					devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0<br />
					/dev/sda1 /boot ext3 rw 0 0<br />
					/dev/sda3 /var ext3 rw 0 0</em></td>
			</tr>
		</tbody>
	</table>
</div>
<div>
	&nbsp;</div>
<div>
	Siehe auch /proc/mounts.</div>
]]></content:encoded>
      <pubDate>Mon, 23 Jul 2007 11:39:52 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[DEBIAN: Samba in 10 Minuten]]></title>
      <link>http://www.cschramm.net/de/linux/samba-nfs/debian-samba-in-10-minuten.html</link>
      <guid isPermaLink="false">12</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Dieses Tutorial zeigt, wie man innerhalb sehr kurzer Zeit Shares auf seinem Server freigeben kann.</div>
<div>&nbsp;</div>
<div>Mit <strong>apt-get install samba samba-common smbfs smbclient</strong> installiert man die n&ouml;tigsten Komponenten.</div>
<div>&nbsp;</div>
<div>Nach der Installation mu&szlig; nun die Datei /etc/samba/smb.conf bearbeitet werden. Anbei ein <strong>Minimal-Beispiel</strong>:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>[global]<br />
            workgroup = myworkgroup<br />
            domain master = no<br />
            os level = 65<br />
            guest account = nobody<br />
            map to guest = Bad User<br />
            security = user<br />
            encrypt passwords = yes<br />
            netbios name = MYSAMBA<br />
            <br />
            [public]<br />
            comment = MYSAMBA Public Share<br />
            path = /shares/public<br />
            writeable = yes<br />
            public = yes</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>In dieser Minimalkonfiguration wird ein Share definiert, dass auf dem Server in /shares/ liegt - als Beispiel.</div>
<div>Das Verzeichnis auf dem Server mu&szlig; nat&uuml;rlich existieren, sonst hagelt es Fehler.</div>
<div>Durch die Option writeable=yes hat jeder Benutzer, der sich am Samba-Server angemeldet hat, Schreibrechte.</div>
<div>Die Anmeldung entf&auml;llt, wenn die Option public=yes gesetzt wird.</div>
<div>D.h. in diesem Fall darf jeder schalten und walten, wie er m&ouml;chte.</div>
<div>&nbsp;</div>
<div>Jetzt d&uuml;rten die ersten 7-8Minuten um sein.</div>
<div>&nbsp;</div>
<div>Nun noch schnell zu den Berechtigungen. Ein Beispiel:</div>
<div>&nbsp;</div>
<div>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td>[hans-privat]<br />
            &nbsp;&nbsp;&nbsp; comment = Privates Verzeichnis von Benutzer Hans<br />
            &nbsp;&nbsp;&nbsp; path = /home/hans/<br />
            &nbsp;&nbsp;&nbsp; writeable = yes<br />
            &nbsp;&nbsp;&nbsp; write list = hans<br />
            &nbsp;&nbsp;&nbsp; user = hans</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Nun wird das <strong>Home-Verzeichnis</strong> von Benutzer Hans als Share hans-privat freigegeben.</div>
<div>Sowohl hinter der Option <strong>write list </strong>als auch hinter <strong>user </strong>k&ouml;nnen <strong>mehrere Benutzer, durch Kommata getrennt</strong> aufgef&uuml;hrt werden, falls man die Berechtigungen verfeinern m&ouml;chte.</div>
<div>Mit <strong>user</strong> gew&auml;hren wir Hans Lesezugriff, mit <strong>write list </strong>Schreibzugriff.</div>
<div>&nbsp;</div>
<div>Das Ganze funktioniert nat&uuml;rlich nur, wenn der benutzer Hans sich entsprechend authentifierzieren kann.</div>
<div>Dazu mu&szlig; er auf dem Server existieren:</div>
<div><strong>useradd hans</strong> #legt den Linux-Benutzer an</div>
<div><strong>smbpasswd -a hans</strong> #neuer Samba-Benutzer Hans</div>
<div>&nbsp;</div>
<div>Nun sollte man Samba neu starten: <strong>/etc/init.d/samba reload</strong></div>
<div>&nbsp;</div>
<div>Noch ein Hinweis: Bitte beim Anlegen der Verzeichnisse auf dem Server darauf achten, dass entspr. Berechtigungen f&uuml;r Samba freigegeben sind (chmod). Sonst kann es sein, dass man - obwohl angegeben - keine Schreibberechtigung auf den neuen Ordner hat, weil das System Samba den Zugriff verweigert.</div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Mon, 23 Jul 2007 11:21:00 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Gentoo: Kernelinstallation mit genkernel]]></title>
      <link>http://www.cschramm.net/de/linux/gentoo/gentoo-kernelinstallation-mit-genkernel.html</link>
      <guid isPermaLink="false">11</guid>
      <description><![CDATA[genkernel ist der einfachste Weg, auf einer Gentoo-Maschine einen neuen Kernel zu installieren. genkernel nimmt einem bei der Installation des Kernels die meiste Arbeit ab....]]></description>
      <content:encoded><![CDATA[gentoo,genkernel,kernel,menuconfig,emerge,gentoolkiit,gentoo-sources,grub,<br/><div>
	Das ist der einfachste Weg, auf einer Gentoo-Maschine einen neuen Kernel zu installieren. genkernel nimmt einem bei der Installation des Kernels die meiste Arbeit ab.</div>
<div>
	&nbsp;</div>
<div>
	Falls genkernel auf dem System noch nicht installiert ist, kann man das mit <strong>emerge genkernel </strong>und <strong>emerge gentoolkit </strong>nachholen.</div>
<div>
	Die Kernel-Sourcen installiert man mit <strong>emerge gentoo-sources</strong> (und sind nach der Installation typischerweise in /usr/src zu finden).</div>
<div>
	&nbsp;</div>
<div>
	Nun geht&#39;s ans Eingemachte:</div>
<div>
	<strong>genkernel --menuconfig --install all</strong></div>
<div>
	M&ouml;chte man den Bootloader - wie z.B. Grub - automatisch aktualisieren, gibt man den entspr. Parameter auch mit an:</div>
<div>
	<strong>genkernel --menuconfig --install --bootloader=grub all</strong></div>
<div>
	&nbsp;</div>
<div>
	Das Tool f&uuml;hrt einen nun nach kurzer Wartezeit - je nach CPU-Power - in die Men&uuml;konfiguration. Wenn man wei&szlig;, welche Hardware man verwendet, kann man hier noch etwas aufr&auml;umen und unn&ouml;tige Module entfernen.</div>
<div>
	Nach Speichern und Beenden, wird der Kernel und die Module kompiliert und installiert.</div>
<div>
	&nbsp;</div>
<div>
	Mit der Bootloader-Option wird Grub automatisch aktualisiert. Manuell kann man das so erledigen:</div>
<div>
	<strong>grub</strong></div>
<div>
	<strong>root hd(0,0)</strong></div>
<div>
	<strong>setup (hd0)</strong></div>
<div>
	Mit diesen Befehlen wird erst grub gestartet. Dann wird die 1. Partition auf der 1. Festplatte ausgew&auml;hlt (0,0).</div>
<div>
	Dort wird Grub dann neu installiert.</div>
<div>
	Mit quit kann man die Grub-Konsole beenden.</div>
<div>
	&nbsp;</div>
<div>
	Vorher sollte man nat&uuml;rlich die Datei <strong>menu.lst </strong>- typischerweise in <strong>/boot/grub/</strong> - bearbeiten und den neuen Kernel eintragen.</div>
<div>
	&nbsp;</div>
<div>
	Nach dem Aktualisieren des Bootloaders sollte man einen <strong>reboot</strong> durchf&uuml;hren!</div>
]]></content:encoded>
      <pubDate>Mon, 23 Jul 2007 11:02:09 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[POSTFIX mit mySQL Cyrus-Konfiguration]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/postfix-mit-mysql-cyrus-konfiguration.html</link>
      <guid isPermaLink="false">10</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[postfix,mysql,cyrus,imap,smtp,main.cf,auth,aliases,destination,recipient_canonical,sender_canonical,transport,forwarding<br/><div>Vorbemerkung: Dieses Tutorial ist mit dem <strong><a href="http://www.cplinux.de/cyrus-imapd-mit-mysql-installation.viewthread.html">CyrusIMAPd-Tutorial</a></strong> kombinierbar.</div>
<div>&nbsp;</div>
<div>Mit <strong>apt-get install postfix postfix-mysql</strong> kann man die ben&ouml;tigten Pakete installieren.<br />
Hier gibt es eine Beispielkonfiguration von Postfix mit mySQL als Backend.</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/main.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><em>smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)<br />
            biff = no<br />
            append_dot_mydomain = no<br />
            delay_warning_time = 2h<br />
            bounce_queue_lifetime = 1d<br />
            transport_retry_time = 20s<br />
            trigger_timeout = 30s<br />
            myhostname = email.example.net<br />
            mydomain = email.example.net<br />
            alias_maps = mysql:/etc/postfix/mysql_aliases.cf<br />
            sender_canonical_maps = mysql:/etc/postfix/mysql_sender_canonical.cf<br />
            recipient_canonical_maps = mysql:/etc/postfix/mysql_recipient_canonical.cf<br />
            transport_maps = mysql:/etc/postfix/mysql_transport.cf<br />
            mydestination = mysql:/etc/postfix/mysql_destination.cf<br />
            virtual_alias_domains = mysql:/etc/postfix/mysql_destination_virtual.cf<br />
            virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_maps.cf mysql:/etc/postfix/mysql_forwarding.cf<br />
            <br />
            mynetworks = 127.0.0.0/8<br />
            mailbox_transport = cyrus </em>#z.B. auch procmail; f. lokale Zustellung<em><br />
            message_size_limit = 5000000 </em>#Mails d&uuml;rfen max. 5MB gro&szlig; sein<em><br />
            inet_interfaces = all<br />
            myorigin = email.example.net<br />
            <br />
            smtpd_sasl_auth_enable = yes<br />
            smtpd_sasl_security_options = noanonymous<br />
            smtpd_sasl_local_domain = $mydestination<br />
            <br />
            smtpd_helo_required = yes<br />
            smtpd_delay_reject = yes<br />
            smtpd_recipient_restrictions =&nbsp; permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_destination, reject_unlisted_recipient, reject_unauth_pipelining<br />
            <br />
            broken_sasl_auth_clients = yes<br />
            <br />
            remote_header_rewrite_domain = $mydestination<br />
            local_header_rewrite_clients = $mydestination</em></td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>Der Zugriff auf die verschiedenen Maps erfolgt &uuml;ber mySQL.<br />
Nachfolgend gehe ich davon aus, dass die Tabellen in der <strong>Datenbank postfix</strong> abgelegt werden. B<strong>enutzername und Passwort in dem Bsp. ist post</strong>.</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>CREATE DATABASE postfix;<br />
            GRANT ALL ON postfix.* TO post@localhost IDENTIFIED BY 'post';</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><br />
<strong><u> Es m&uuml;ssen nun folgende Tabellen angelegt werden:</u></strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `aliases` </strong>(<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `alias` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;</td>
        </tr>
    </tbody>
</table>
Diese Tabelle enth&auml;lt Aliase f&uuml;r bestimmte Linux-Benutzer. Z.B. kann man die Post f&uuml;r root hier an webmaster weiterleiten.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `destination`</strong> (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; `virtual` int(1) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;</td>
        </tr>
    </tbody>
</table>
Diese Tabelle enth&auml;lt alle Domains, f&uuml;r die der Mailserver E-Mails annehmen darf. In unserem Beispiel example.net.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `forwarding`</strong> (<br />
            &nbsp; `id` int(5) NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(100) NOT NULL,<br />
            &nbsp; `destination` varchar(100) NOT NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;</td>
        </tr>
    </tbody>
</table>
M&ouml;chte man E-Mails an bestimmte Adressen automatisch an einen oder mehrere Personen weiterleiten, k&ouml;nnen die Adressen hier eingetragen werden. Mehrfacheintr&auml;ge f&uuml;r eine Adresse sind also kein Problem. Bsp.:<br />
ID1: verteiler@example.net -&gt; personA@example.net<br />
ID2: verteiler@example.net -&gt; personB@example.net<br />
u.s.w.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `recipient_canonical`</strong> (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;</td>
        </tr>
    </tbody>
</table>
Hier k&ouml;nnen ankommende Mails an bestimmte E-Mail-Accounts weitergeleitet werden.<br />
Bsp.: jmd. sendet eine E-Mail an max.mustermann@example.net.<br />
Hier kann man festlegen, dass diese E-Mail an das Postfach mustermann@example.net geht.<br />
Die Mailbox max.mustermann mu&szlig; dabei nicht existieren.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `sender_canonical` </strong>(<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=53 ;</td>
        </tr>
    </tbody>
</table>
Hier werden ausgehende Mails maskiert. Sendet mustermann@example.net eine E-Mail wird sie vor dem Versand z.B. als max.mustermann@example.net maskiert.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `transport`</strong> (<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `domain` varchar(128) NOT NULL default '',<br />
            &nbsp; `destination` varchar(128) NOT NULL default '',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`),<br />
            &nbsp; UNIQUE KEY `domain` (`domain`)<br />
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</td>
        </tr>
    </tbody>
</table>
Hier kann man festlegen, dass ausgehende Mails an bestimmte Domains &uuml;ber andere Server bzw. Dienste zugestellt werden sollen.<br />
Bsp.: cplinux.de -&gt; smtp:mail.cplinux.de:25</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `users` </strong>(<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `login` varchar(100) NOT NULL default '',<br />
            &nbsp; `password` varchar(100) NOT NULL default '',<br />
            &nbsp; `quota` int(8) NOT NULL,<br />
            &nbsp; `status` int(1) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;</td>
        </tr>
    </tbody>
</table>
Hier werden die Benutzer mit Passwort gef&uuml;hrt. Das Feld Quota in der tabelle ist optional. Steuert man z.B. nicht nur Postfix, sondern auch z.B. einen IMAP-Server wie Cyrus &uuml;ber mySQL, k&ouml;nnte man hier auch gleich die Quota mit verwalten. Der Status ist in diesem Bsp. 0 (deaktiviert) oder 1 (aktiviert).<br />
Je nach dem ob cyrus-sasl mit Crypt-Support installiert wurde oder nicht, mu&szlig; das Passwort im Klartext oder mit verschl&uuml;sselt (mySQL-Funktion ENCRYPT) in der Datenbank abgelegt werden.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `virtual_maps`</strong> (<br />
            &nbsp; `id` int(5) NOT NULL auto_increment,<br />
            &nbsp; `email` varchar(100) NOT NULL,<br />
            &nbsp; `destination` varchar(100) NOT NULL,<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=42 ;</td>
        </tr>
    </tbody>
</table>
Die virtuellen Maps dienen der direkten Zuweisung der E-Mail-Adresse an das Postfach.<br />
Adressen, die weder hier noch in der Tabelle recipient_canonical eingetragen sind, sind nicht erreichbar.<br />
Im Bsp. Cyrus kann man z.B. die Adresse max.mustermann@example.net an mustermann zuweisen, d.h. die Mailbox user.mustermann.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><u><strong>Die Konfigurationsdateien f&uuml;r die verschiedenen Tabellen sehen so aus:</strong></u></div>
<div>&nbsp;</div>
<div>
<div><strong>/etc/postfix/mysql_auth.cf</strong></div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = users<br />
            select_field = login<br />
            where_field = password<br />
            additional_conditions = and status='1'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
</div>
<div><strong>/etc/postfix/mysql_aliases.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = aliases<br />
            select_field = destination<br />
            where_field = alias<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/mysql_sender_canonical.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = sender_canonical<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
<div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/mysql_recipient_canonical.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = recipient_canonical<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
<div>
<div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/mysql_transport.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = transport<br />
            select_field = destination<br />
            where_field = domain<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>
<div>
<div>
<div><strong>/etc/postfix/mysql_destination.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = destination<br />
            select_field = destination<br />
            where_field = destination<br />
            additional_conditions = and virtual='0'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div><strong>/etc/postfix/mysql_destination_virtual.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = destination<br />
            select_field = destination<br />
            where_field = destination<br />
            additional_conditions = and virtual='1'<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<strong><br />
</strong>
<div>
<div><strong>/etc/postfix/mysql_virtual_maps.cf</strong></div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = virtual_maps<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
<strong><br />
</strong>
<div>
<div><strong>/etc/postfix/mysql_forwarding.cf</strong><br />
<div>
<div>
<table cellspacing="1" cellpadding="1" border="1" width="100%">
    <tbody>
        <tr>
            <td>user = post<br />
            password = post<br />
            dbname = postfix<br />
            table = forwarding<br />
            select_field = destination<br />
            where_field = email<br />
            hosts = localhost</td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div>&nbsp;</div>
<div>Jetzt sollte man noch SMTP-Auth konfigurieren, damit man die E-Mails auch nach extern versenden kann. Wie das geht, steht hier.<br />
<a href="http://www.cplinux.de/e-mail-server/smtp-auth-in-einer-postfix-mysql-konfiguration-aufsetzen.html">www.cplinux.de/e-mail-server/smtp-auth-in-einer-postfix-mysql-konfiguration-aufsetzen.html</a><br />
<br />
Ist Postfix fertig konfiguriert, ist es Zeit f&uuml;r einen ersten Start: <strong>/etc/init.d/postfix start</strong></div>
<div>&nbsp;</div>]]></content:encoded>
      <pubDate>Tue, 10 Jul 2007 16:41:24 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Einfacher VPN-Server mit Debian]]></title>
      <link>http://www.cschramm.net/de/linux/vpn-ipsec/einfacher-vpn-server-mit-debian.html</link>
      <guid isPermaLink="false">9</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><p>Zuerst installiert man das entsprechende Paket mit <strong>apt-get install pptpd</strong><br />
Nun m&uuml;ssen folgende Dateien editiert werden:<br />
<br />
<strong>/etc/pptpd.conf</strong><br />
Hier m&uuml;ssen die beiden Optionen <em><strong>localip</strong></em> und <strong><em>remoteip</em></strong> gesetzt werden, z.B.:<br />
<em>localip 192.168.0.1<br />
remoteip 192.168.0.2-200</em><br />
Das bedeutet, dass die IP des Servers im sp&auml;teren VPN 192.168.0.1 ist. Die Adressen 192.168.0.2 bis 192.168.0.200 werden an Clients vergeben.<br />
<br />
<strong>/etc/ppp/pptpd-options</strong><br />
Hier sollten folgende Optionen stehen:<br />
<em>proxyarp<br />
nodefaultroute</em> #Default-Route wird bei der Einwahl nicht ge&auml;ndert<em><br />
lock<br />
nobsdcomp<br />
auth<br />
require-mppe</em><br />
<br />
<strong>/etc/ppp/chap-secrets</strong><br />
<em>#Client&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Passwort&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IP<br />
testbenutzer&nbsp;&nbsp; vpnserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passwort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;*&quot;</em><br />
Hier werden neben dem Benutzernamen, der Server-Name (steht hoffentl. in der<strong> /etc/hosts</strong>!), das Passwort im Klartext und ggf. die IP angegeben. Soll sich der Benutzer von jedem Standort aus einw&auml;hlen k&ouml;nnen, steht hier ein Stern (*).<br />
<br />
<strong>Wenn man jetzt den Dienst mit /etc/init.d/pptpd restart neu startet, sollte die erste Einwahl gelingen.</strong></p>
<p>In der Firewall sollten die Ports 1723 (PPTP) und 47 (GRE) freigeschaltet werden.</p>
<p>&nbsp;</p>]]></content:encoded>
      <pubDate>Tue, 10 Jul 2007 11:16:16 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[PROCMAIL: E-Mail Zustellung per Procmail-Filter]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/procmail-e-mail-zustellung-per-procmail-filter.html</link>
      <guid isPermaLink="false">8</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><p>Den Filter <strong>Procmail</strong> kann man auf zweilei Arten einbinden:</p>
<ol>
    <li>Man kann die Datei <strong>/etc/procmailrc</strong> anlegen. Diese Datei gilt dann f&uuml;r alle Benutzer</li>
    <li>Man kann im home-Verzeichnis des jeweiligen Benutzers die Datei <strong>.procmailrc </strong>anlegen. Dann gelten die Regeln nur f&uuml;r den jeweiligen Benutzer.</li>
</ol>
<p>Am besten erkl&auml;rt sich die Funktionsweise anhand eines <strong>Beispiels</strong>:</p>
<div class="code">MAILDIR=/var/spool/mail<br />
PATH=/usr/bin:/usr/local/bin<br />
SHELL=/bin/sh<br />
LOGABSTRACT=NO<br />
VERBOSE=ON<br />
LOGFILE=/var/log/procmail.log <br />
<br />
:0fw<br />
| /usr/bin/spamassassin<br />
<br />
:0<br />
* ^X-Spam-Status: Yes<br />
| $SPAM<br />
<br />
:0c<br />
| $RECIPIENT<br />
<br />
:0<br />
| $INBOX</div>
<p>Die einleitenden Konstanten <strong>MAILDIR,</strong> <strong>PATH</strong> und <strong>SHELL</strong> sind nicht zwingend notwendig, ich gebe sie der Vollst&auml;ndigkeit halber aber an.</p>
<p>Das Logging steuert man &uuml;ber die Konstanten LOGABSTRACT und VERBOSE. Wem die Informationen bei VERBOSE-Logging nicht gen&uuml;gen, kann <strong>LOGABSTRACT=YES</strong> setzen.</p>
<p>Die Log-Datei kann man mit LOGFILE angeben. Der Benutzer sollte dann aber die entsprechende Berechtigung f&uuml;r die Datei haben.</p>
<p>Statt der Variablen $SPAM, $RECIPIENT und $INBOX kann man nun die Pfade zur Inbox, z.B. /dev/null f&uuml;r Spam oder eine entsprechende Schnittstelle angeben. Bsp.:</p>
<p><em>INBOX=&quot;/usr/sbin/cyrdeliver -f $SENDER -a $USER -m user.$USER&quot;<br />
SPAM=&quot;$INBOX.Spam&quot;</em><em><br />
RECIPIENT=</em><em>&quot;/usr/sbin/cyrdeliver -f $SENDER -a $USER -m user.postmaster&quot;</em></p>
<p><em> </em>In diesem Beispiel werden E-Mails an den lokalen IMAP-Server <strong>CyrusIMAPd </strong>zugestellt.</p>
<p>Spam landet in dem entsprechenden Spam-Ordner zur Mailbox.</p>
<p>Die RECIPIENT-Zeile bewirkt, dass <strong>eine Kopie aller Mails</strong> an den Benutzer postmaster geht.</p>
<p>Ich denke, das Beispiel gibt die wichtigsten Dinge wieder. Es gibt nat&uuml;rlich Spezialf&auml;lle wie die Zustellung an IMAP-Server wie Cyrus, Courier oder Dovecot. Hier gibt es entsprechende Schnittstellen, die sich einbinden lassen.</p>
<p>&nbsp;</p>
<p>Will man procmail verwenden, sollte man das in seinem <strong>MTA </strong>(Postfix, Exim, Sendmail, etc.) konfigurieren. Ich nehme hier <strong>Postfix</strong> als Beispiel:</p>
<p><strong><em>/etc/postfix/master.cf</em></strong> sollte folgende Zeilen enthalten:</p>
<p>procmail&nbsp; unix&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
&nbsp; flags=R user=cyrus argv=/usr/bin/procmail -o SENDER=${sender} -m USER=${user} EXTENSION=${extension} /etc/procmailrc</p>
<p><em>In der </em><strong><em>/etc/postfix/main.cf </em></strong><em>sollte folgender Eintrag stehen</em><strong><em>:</em></strong> mailbox_transport=procmail</p>]]></content:encoded>
      <pubDate>Thu, 21 Jun 2007 11:31:24 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Cyrus IMAPd mit mySQL - Installation]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/cyrus-imapd-mit-mysql-installation.html</link>
      <guid isPermaLink="false">7</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><p>Vorbemerkung: Dieses Tutorial ist kombinierbar mit dem<strong> <a href="http://www.cplinux.de/postfix-mit-mysql-cyrus-konfiguration.viewthread.html">Postfix-Tutorial</a>. </strong></p>
<p><strong>Erforderliche apt-Pakete bei Debian:</strong></p>
<ul>
    <li>cyrus21-admin - Cyrus mail system (administration tool)</li>
    <li>cyrus21-clients - Cyrus mail system (test clients)</li>
    <li>cyrus21-common - Cyrus mail system (common files)</li>
    <li>libauthen-sasl-cyrus-perl - Perl extension for Cyrus SASL library</li>
    <li>libauthen-sasl-perl - Authen::SASL - SASL Authentication framework</li>
    <li>libsasl2-2 - Authentication abstraction library</li>
    <li>libsasl2-modules</li>
    <li>libsasl2-modules-sql</li>
    <li>sasl2-bin</li>
</ul>
<p>apt-get install cyrus21-admin cyrus21-clients cyrus21-common libauthen-sasl-cyrus-perl libauthen-sasl-perl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin</p>
<p><strong>Erforderliche Pakete bei Gentoo:</strong></p>
<ul>
    <li>cyrus-imapd</li>
    <li>cyrus-imap-admin</li>
    <li>cyrus-sasl</li>
</ul>
<div>Ich empfehle folgende emerge-USE-Flags: crypt ldap mbox mysql pam pam-mysql sasl ssl tcpd</div>
<div><strong>USE=&quot;crypt ldap mbox mysql pam pam-mysql sasl ssl tcpd&quot; emerge -av ...<br />
</strong></div>
<p>&nbsp;</p>
<p>Die beiden wichtigsten <strong>Konfigurationsdateien</strong> sind: <strong>/etc/imapd.conf </strong>und<strong> /etc/cyrus.conf</strong></p>
<p>Die wichtigsten Parameter der <strong>/etc/imapd.conf</strong>:<br />
lmtp_downcase_rcpt: yes <em>#Gro&szlig;- und Kleinschreibung beachten</em><br />
admins: cyrus <em>#welcher Benutzer darf den Server ohne Einschr&auml;nkungen verwalten?</em><br />
imap_admins: cyrus <em>#welcher Benutzer darf Postf&auml;cher ohne Einschr&auml;nkungen verwalten?</em><br />
allowanonymouslogin: no <em>#Anonymer Login nicht m&ouml;glich!</em></p>
<p><br />
Authentifizierungsoptionen in <strong>/etc/imapd.conf</strong>:<br />
allowplaintext: yes <em>#Klartext-Authentifizierung generell m&ouml;gl.?</em><br />
sasl_pwcheck_method: auxprop <em>#mysql wird &uuml;ber auxprop angesprochen</em><br />
sasl_auxprop_plugin: sql <em>#auxprop-Plugin benennen</em><br />
sasl_sql_hostnames: localhost<br />
sasl_sql_database: postfix<br />
sasl_sql_user: username<br />
sasl_sql_passwd: password<br />
sasl_sql_select: select password from users where login='%u' and status='1'</p>
<p>Die mySQL-Tabelle f&uuml;r die <strong>Benutzerauthentifizierung</strong> k&ouml;nnte analog zu dem <strong><a href="http://www.cplinux.de/postfix-mit-mysql-cyrus-konfiguration.viewthread.html">Postfix-Tutorial</a> </strong>so aussehen:</p>
<p>
<table width="100%" cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td><strong>CREATE TABLE `users` </strong>(<br />
            &nbsp; `id` int(11) unsigned NOT NULL auto_increment,<br />
            &nbsp; `login` varchar(100) NOT NULL default '',<br />
            &nbsp; `password` varchar(100) NOT NULL default '',<br />
            &nbsp; `quota` int(8) NOT NULL,<br />
            &nbsp; `status` int(1) NOT NULL default '1',<br />
            &nbsp; PRIMARY KEY&nbsp; (`id`)<br />
            ) ENGINE=MyISAM&nbsp; DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>Die wichtigsten Parameter der <strong>/etc/cyrus.conf</strong>:<br />
Im Bereich services sollten folgende Eintr&auml;ge nicht auskommentiert sein:<br />
imap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd=&quot;imapd -U 30&quot; listen=&quot;imap&quot; prefork=0 maxchild=200<br />
pop3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd=&quot;pop3d -U 30&quot; listen=&quot;pop3&quot; prefork=0 maxchild=25<br />
lmtpunix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd=&quot;lmtpd&quot; listen=&quot;/var/run/cyrus/socket/lmtp&quot; prefork=0 maxchild=50</p>
<p>Hier kann mit maxchild die maximale Anzahl der Unterprozesse definiert werden.</p>
<p>Die eigentlichen E-Mails befinden sich je nach Distribution in /var/spool/imap bzw.<br />
/var/spool/cyrus.</p>
<p>Die Executables befinden sich je nach Distribution in /usr/sbin oder /usr/lib/cyrus.</p>
<div><strong>Wichtige Anmerkung:</strong></div>
<div>
<p>Der Crypt-Support funktioniert bei Gentoo-Systemen, wenn crypt als Use-Flag verwendet wurde. Bei Debian-Systemen gibt es keinen crypt-Support.</p>
<p>Bei Gentoo kann man den Dienst nun noch mit &quot;rc-update add cyrus default&quot; in das Standard-Runlevel beim Systemstart hinzuf&uuml;gen.</p>
<p>&nbsp;</p>
</div>]]></content:encoded>
      <pubDate>Thu, 07 Jun 2007 13:58:01 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[E-Mails abrufen mit fetchmail]]></title>
      <link>http://www.cschramm.net/de/linux/e-mail-server/e-mails-abrufen-mit-fetchmail.html</link>
      <guid isPermaLink="false">6</guid>
      <description><![CDATA[...]]></description>
      <content:encoded><![CDATA[<br/><div>Hier gibt es eine Kurzanleitung f&uuml;r <span style="font-weight: bold;">fetchmail</span>. Mit fetchmail k&ouml;nnen Mails z.B. von einem POP3-Server abgeholt werden.</div>
<div><br />
S&auml;mtliche Einstellungen werden in der Datei <strong>.fetchmailrc</strong> gespeichert. Diese Datei sollte dann im home-Verzeichnis des jeweiligen Benutzers liegen.<br />
<br />
Der Aufbau der Datei ist recht simpel. Ein Beispiel:</div>
<div class="code">poll pop.example.com<br />
proto pop3<br />
user &quot;test@example.com&quot;<br />
pass &quot;pass&quot;<br />
is test<br />
mda &quot;/usr/bin/procmail -t&quot;<br />
nokeep<br />
fetchall<br />
no ssl</div>
<div><br />
<br />
<strong>poll pop.example.com</strong><br />
Hier wird eine Verbindung zu dem Posteingangsserver pop.example.com hergestellt.<br />
<br />
<strong>proto pop3</strong><br />
Hier wird das entsprechende Protokoll festgelegt. M&ouml;gliche Werte sind: <em>pop3, pop2, imap</em>. <br />
<br />
Unterschied:<br />
Mit POP3 werden die E-Mails vom Server abgeholt/heruntergeladen.<br />
Bei IMAP liegen die E-Mails immer auf dem Server. Die meisten Provider unterst&uuml;tzen POP3, einige zus&auml;tzlich IMAP. <br />
<br />
<strong>user &quot;test@example.com&quot;</strong><br />
Hier mu&szlig; die E-Mail-Adresse angegeben werden.<br />
<br />
<strong>pass &quot;pass&quot;</strong><br />
Hier wird das Passwort im Klartext eingetragen. Es sollte also sp&auml;ter darauf geachtet werden, dass nicht jeder Benutzer die Datei lesen darf!<br />
<br />
<strong>is test</strong><br />
Hier wird der Benutzername eingetragen. In vielen F&auml;llen ist das die E-Mail-Adresse bis vor dem @-Zeichen.<br />
<br />
<strong>mda &quot;/usr/bin/procmail -t&quot;</strong><br />
<br />
Dieser Punkt ist <strong>WICHTIG!</strong>. Hier wird eingetragen, ob die E-Mails nach dem Herunterladen an ein Programm oder einen Mailserver weitergegeben oder z.B. einfach an einen lokalen Benutzer gesendet werden.<br />
<br />
Dazu einige Beispiele:</div>
<div class="code">#Die E-Mail wird an procmail &uuml;bergeben, ein vielseitiger Filter<br />
mda &quot;/usr/bin/procmail -t&quot; <br />
<br />
#Wird ein CyrusIMAP-Server verwendet, ist das neben procmail eine M&ouml;glichkeit, die E-Mails direkt an den Server weiterzugeben.<br />
mda &quot;/usr/sbin/cyrdeliver&quot; <br />
<br />
#Die E-Mail wird lokal an den Benutzer <em>test</em> zugestellt<br />
#Die E-Mail l&auml;&szlig;t sich dann z.B. &uuml;ber den Befehl mail auf der Konsole abrufen.<br />
mda test</div>
<div><br />
<br />
<strong>nokeep</strong><br />
Diese Option weist fetchmail an, die Nachrichten herunterladen und danach vom Server zu l&ouml;schen. M&ouml;gliche Werte sind: <em>nokeep, keep</em>. Mit der Option <em>keep</em> wird die Mail heruntergeladen, aber nicht gel&ouml;scht.<br />
<br />
<strong>fetchall</strong><br />
Standardm&auml;&szlig;ig ruft fetchmail nur neue E-Mails ab. Mit dieser Option wird fetchmail angewiesen, alle Mails herunterzuladen, auch wenn diese schon einmal heruntergeladen wurden.<br />
<br />
<strong>no ssl</strong><br />
Hier kann man angeben, ob man die E-Mails verschl&uuml;sselt abrufen m&ouml;chte (mu&szlig; vom Provider unterst&uuml;tzt werden). M&ouml;gliche Werte sind: <em>no ssl, ssl</em></div>
<div>&nbsp;</div>
<hr />
<div>&nbsp;</div>
<div>Damit die Mails nun auch regelm&auml;&szlig;ig abgerufen werden, gibt es 2 M&ouml;glichkeiten:<br />
<br />
<strong>1. Aufruf als Daemon</strong><br />
<br />
Ein Beispiel:</div>
<div class="code">/usr/bin/fetchmail -v -d 300 -L /var/log/fetchmail</div>
<div><br />
Hier wird fetchmail als Daemon aufgerufen, der alle 300s bzw. 5min die E-Mails abholt. <br />
Die Option <em>-v</em> (<em>verbose mode</em>) bedeutet, dass alle Meldungen in die Log-Datei ausgegeben werden. Standardm&auml;&szlig; werden nur Fehler und Warnungen ausgegeben.<br />
Mit der Option <em>-L</em> gibt man eine Log-Datei an.<br />
<br />
<strong>2. Aufruf per Cron-Job</strong><br />
Mit dem Befehl</div>
<div class="code">crontab -e</div>
<div><br />
kann die sogenannte crontab des jeweiligen Benutzers editiert werden.<br />
<br />
Wer den Editor <em>vi</em> nicht kennt, wird sich vermutlich mit der Handhabung etwas schwer tun. Mit <em>a</em> wechselt man in den INSERT mode und kann die Crontab bearbeiten. Danach ESC, <em>:wq</em> und mit ENTER best&auml;tigen.<br />
<br />
Die crontab k&ouml;nnte etwa so aussehen:</div>
<div class="code">SHELL=/bin/bash<br />
PATH=/sbin:/bin/:/usr/sbin/:/usr/bin<br />
MAILTO=root<br />
HOME=/<br />
05 * * * * test /usr/bin/fetchmail -L /var/log/fetchmail</div>
<div><br />
<br />
Die E-Mails werden hier alle 5 Minuten abgerufen. Die letzte Zeile schl&uuml;sselt man folgenderma&szlig;en auf:</div>
<table border="1">
    <tbody>
        <tr>
            <td>Minute</td>
            <td>0-59</td>
        </tr>
        <tr>
            <td>Stunde</td>
            <td>0-23</td>
        </tr>
        <tr>
            <td>Tag-des-Monats</td>
            <td>1-31</td>
        </tr>
        <tr>
            <td>Monat</td>
            <td>1-12 (oder Namen, siehe unten)</td>
        </tr>
        <tr>
            <td>Wochentag</td>
            <td>0-7 (0 oder 7 ist Sonntag oder Namen)</td>
        </tr>
    </tbody>
</table>
<div><br />
Liegt die Datei <em>.fetchmailrc</em> nicht im home-Verzeichnis des Benutzers <em>test</em>, mu&szlig; hier mit der Option <em>-f</em> die Datei angegeben werden, z.B.:</div>
<div class="code">05 * * * * test /usr/bin/fetchmail -f /home/users/fetchmail -L /var/log/fetchmail</div>
<div><br />
Um die E-Mail-Benachrichtigung des Cron-Dienstes zu deaktivieren, entfernt man einfach den Benutzernamen hinter <em>MAILTO</em>. Diese Mails k&ouml;nnen auf Dauer recht nervig sein.<br />
<br />
Weitere Infos bekommt man in den Manpages: <em>man fetchmail</em></div>]]></content:encoded>
      <pubDate>Wed, 06 Jun 2007 10:49:00 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Debian: Kernel aktualisieren/installieren]]></title>
      <link>http://www.cschramm.net/de/linux/debian-ubuntu/debian-kernel-aktualisieren-installieren.html</link>
      <guid isPermaLink="false">5</guid>
      <description><![CDATA[Einige einfache Methoden, um den Kernel zu aktualisieren: Installation eines fertigen Kernel-Images, Installation eines angepassten Kernels, klassische Installation eines Kernels...]]></description>
      <content:encoded><![CDATA[apt-get,kernel-image,kernel,kernel-source,make-kpkg,dpkg,apt<br/><div>
	Nachfolgend will ich ein paar einfache Methoden beschreiben, das Herzst&uuml;ck des Betriebssystems, den Kernel, zu aktualisieren!<br />
	Die aktuelle Version des Linux-Kernels kann man mit dem Befehl <strong>uname -a</strong> anzeigen.<br />
	<strong>Es gibt nun 3 M&ouml;glichkeiten:</strong></div>
<div>
	&nbsp;</div>
<div style="font-weight: bold; text-decoration: underline; font-size: 140%;">
	1. Installation eines fertigen Kernel-Images:</div>
<div>
	<br />
	Das ist wohl die einfachste Art, einen neuen Kernel zu installieren. Diese Variante kommt in Frage, wenn keine weiteren Anpassungen am Kernel vorgenommen, sondern einfach nur auf eine aktuellere Version aktualisiert werden soll:<br />
	<br />
	Als erstes mu&szlig; gepr&uuml;ft werden, welche aktuelle Kernel-Version verf&uuml;gbar ist. Das geht z.B. mit dem Befehl</div>
<div class="code">
	apt-cache search kernel-source</div>
<div>
	<br />
	Die Installation erfolgt z.B. mit:</div>
<div class="code">
	apt-get install kernel-image-2.6.13</div>
<div>
	<br />
	Tja, das wars schon. I.d.R. &uuml;bernimmt apt-get nun den Rest und erzeugt auch einen Eintrag in der /boot/grub/menu.lst bzw. /etc/lilo.conf entsprechend!</div>
<div>
	&nbsp;</div>
<hr />
<div>
	&nbsp;</div>
<div style="font-weight: bold; text-decoration: underline; font-size: 140%;">
	2. Installation eines angepassten Kernels:</div>
<div>
	<br />
	Als <strong>Vorraussetzung</strong> gibt es noch einige Pakete, die installiert sein sollten: <strong>kernel-package, libncurses, gcc/g++, make</strong><br />
	<br />
	Als n&auml;chstes mu&szlig; gepr&uuml;ft werden, welche aktuelle <strong>Kernel-Version</strong> verf&uuml;gbar ist. Das geht z.B. mit dem Befehl</div>
<div class="code">
	apt-cache search kernel-source</div>
<div>
	<br />
	Hat man den neuen Kernel gefunden, installiert man als n&auml;chstes die <strong>Kernel-Sourcen</strong>, z.B. mit:</div>
<div class="code">
	apt-get install kernel-source-2.6.13</div>
<div>
	<br />
	Jetzt werden die Quellen entpackt:</div>
<div class="code">
	cd /usr/src/<br />
	tar xfj kernel-source-2.6.13.tar.bz2<br />
	cd kernel-source-2.6.13</div>
<div>
	<br />
	Jetzt geht es zur <strong>Kernel-Konfiguration</strong>. Eine einfache Methode ist, einfach die Konfiguration des alten Kernels zu &uuml;bernehmen. Der Befehl uname (oben beschrieben) sollte Aufschlu&szlig; dar&uuml;ber geben in welchem Verzeichnis sich die Konfiguration des aktuellen Kernels befindet. Ich nehme jetzt mal an, dass sich die aktuelle Version in dem Verzeichnis <em>/usr/src/linux-2.6.8</em> befindet. Dann man man die aktuelle Konfiguration einfach mit dem folgenden Befehl &uuml;bernehmen:</div>
<div class="code">
	cp /usr/src/linux-2.6.8/.config /usr/src/linux-2.6.13</div>
<div>
	<br />
	Die Konfiguration kann man nun noch anpassen. Hat man keine <em>.config</em>-Datei eines alten Kernels, mu&szlig; man hier alle Men&uuml;punkte Schritt f&uuml;r Schritt durchgehen.</div>
<div class="code">
	make menuconfig</div>
<div>
	<br />
	Jetzt wird ein <strong>Kernel-Paket</strong> erzeugt:</div>
<div class="code">
	make-kpkg --initrd --revision custom --rootcmd fakeroot kernel_image</div>
<div>
	<br />
	Statt <em>custom</em> kann hier eine beliebige Bezeichnung eingegeben werden, mit der man den Kernel beim Bootvorgang identifizieren kann.<br />
	<br />
	Das Erstellen des <em>.deb</em>-Paketes kann nun je nach Rechnerleistung eine ganze Weile dauern.<br />
	<br />
	Mit dem folgenden Befehl wird dann das fertige Paket installiert:</div>
<div class="code">
	dpkg -i kernel_image-2.6.13-custom.deb</div>
<div>
	<br />
	Abschlie&szlig;end fehlt eigentlich nur noch ein Befehl: <em>reboot</em></div>
<div>
	&nbsp;</div>
<hr />
<div>
	&nbsp;</div>
<div style="font-weight: bold; text-decoration: underline; font-size: 140%;">
	3. Klassische Installation eines Kernels:</div>
<div>
	<br />
	Die klassische Art, einen Kernel zu installieren - ihn zu konfigurieren, zu kompilieren und dann zu installieren - werde ich evtl. in einem anderen Artikel beschreiben.</div>
]]></content:encoded>
      <pubDate>Wed, 06 Jun 2007 10:48:08 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Netzwerk Bonding]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/netzwerk-bonding.html</link>
      <guid isPermaLink="false">4</guid>
      <description><![CDATA[Wie kann man die Netzwerkbandbreite eines Servers nochmal erhöhen? Wie kann ich den Ausfall einer Netzwerkkarte abfangen? Das Stichwort heißt BONDING....]]></description>
      <content:encoded><![CDATA[bonding,bond,network,modprobe,active-backup,balance-alb,balance-rr,broadcast,balance-xor,round-robin,bond0<br/><div>
	Wie kann man die Netzwerkbandbreite eines Servers nochmal erh&ouml;hen? Wie kann ich den Ausfall einer Netzwerkkarte abfangen? Das Stichwort hei&szlig;t <strong>BONDING.</strong><br />
	<br />
	Die folgende Anleitung habe ich mit Debian und Gentoo getestet. Mit anderen Distributionen sollte es analog funktionieren.<br />
	<br />
	<strong>Vorraussetzung:</strong><br />
	Damit das Ganze funktioniert, mu&szlig; der Kernel das LoadBalancing unterst&uuml;tzen. Das entsprechende Kernelmodul hei&szlig;t <em>bonding</em>.<br />
	Auf meinem Testsystem lie&szlig; sich das Modul mit</div>
<div class="code">
	modprobe bonding
</div>
<div>
	aktivieren.<br />
	Falls das nicht der Fall ist, mu&szlig; ein neuer Kernel gebaut werden. Eine Anleitung f. Debian findet man auch im Tutorial-Bereich.<br />
	<br />
	So geht&#39;s mit <strong>Gentoo und genkernel</strong>:</div>
<div class="code">
	genkernel --menuconfig all
</div>
<div>
	<br />
	Folgendes mu&szlig; bei der Auswahl der Kernelmodule aktiviert werden:</div>
<div class="code">
	<strong>Device Drivers &raquo; Network device support &raquo; Bonding Driver support</strong></div>
<div>
	<br />
	<br />
	Alternativ zu genkernel gibt es noch <strong>den &uuml;blichen Weg</strong>:</div>
<div class="code">
	cd /usr/src/linux #hier entspr. Verzeichnis ausw., in dem sich die Kernel-Source befindet
make menuconfig #Hier den Bonding Driver support aktivieren
make &amp;&amp; make modules_install
</div>
<div>
	<p>
		Wenn ein neuer Kernel installiert wird, mu&szlig; danach noch der Bootloader aktualisiert werden. Bleibt es bei der Kernel-Version, ist das nicht notwendig.</p>
	<p>
		&nbsp;</p>
	<p>
		<br />
		<strong>Es gibt verschiedene Bonding-Modes:</strong><br />
		<br />
		<strong>802.3ad - IEEE 802.3ad dynamic link aggregation</strong>: In diesem Modus werden die Schnittstellen in einer Gruppe verwaltet, in der jeder Slave die gleiche Geschwindigkeit hat (d.h. es macht keinen Sinn mit 100MBit- und 1GBit-Karten zu arbeiten, da die schnellere Karte dann doch nur mit 100MBit f&auml;hrt). Dieser Standard sollte von dem verwendeten Switch unterst&uuml;tzt werden.<br />
		<br />
		<strong>active-backup</strong>: Hier ist immer nur ein Slave aktiv. F&auml;llt einer aus, wird der n&auml;chste aktiviert.<br />
		<br />
		<strong>balance-alb - adaptive load balancing</strong>: Dieser Modus funktioniert nicht mit jeder Netzwerkkarte (im Fehlerfall schl&auml;gt die Funktion &quot;dev_set_mac_address&quot; fehl; der Netzwerktreiber sollte das Ver&auml;ndern der MAC-Adresse unterst&uuml;tzen). balance-alb beinhaltet balance-tlb. Eingehender Traffic wird verteilt.<br />
		Diesen Modus habe ich in in diesem Tutorial verwendet, da ich ihn neben round-robin zu er effektivsten Methode halte.<br />
		<br />
		<strong>balance-rr - round-robin</strong>: Dies ist die wohl bekannteste Art des Loadbalancings. Die Slaves erhalten die Daten abwechselnd.<br />
		<br />
		<strong>balance-tlb</strong>: Ausgehender Traffic wird entsprechend der aktuellen Auslastung auf jeden Slave vereilt. Ankommender Traffic wird von dem aktuellen Slave empfangen. Nur im Fehlerfall &uuml;bernimmt ein anderer Slave die MAC-Adresse und empf&auml;ngt die Daten.<br />
		<br />
		<strong>balance-xor</strong>: Dieser Modus ist nur als &quot;Failover&quot; geeignet. Er bietet kein Loadbalancing.<br />
		<br />
		<strong>broadcast</strong>: Alle Daten werden an alle Slaves auf einmal gesendet. Das erh&ouml;ht zwar die Fehlertoleranz, aber auch den Netzwerk-Traffic.<br />
		&nbsp;</p>
	<hr />
	<br />
	<strong>Debian:</strong><br />
	In der Datei <em>/etc/modprobe.d/arch/i386</em> ist nun folgender Eintrag vorzunehmen:</div>
<div class="code">
	alias bond0 bonding options bond0 mode=<strong>balance-alb</strong> miimon=100 #miimon das Monitoring-Interval in Millisekunden</div>
<div>
	<br />
	<br />
	In <em>/etc/network/</em> sollte nun fuer das neue Interface folgender Eintrag gemacht werden (die Adressen sind nat&uuml;rlich entsprechend anzupassen):</div>
<div class="code">
	auto bond0
iface bond0 inet static
address 192.168.96.10
netmask 255.255.255.0
network 192.168.96.0
broadcast 192.168.96.255
gateway 192.168.96.1
up /sbin/ifenslave bond0 eth0 eth1
</div>
<div>
	<br />
	<hr />
	<br />
	<strong>Gentoo:</strong><br />
	In der Datei <em>/etc/conf.d/net</em> gibt es bereits einen Bonding-Bereich. Dieser Bereich mu&szlig; nur noch angepasst werden:</div>
<div class="code">
	slaves_bond0=&quot;eth0 eth1&quot;
config_bond0=(&quot;null&quot;)
depend_bond0() {
need net.eth0 net.eth1
}
</div>
<div>
	<br />
	<hr />
	<br />
	Die Netzwerkschnittstellen eth0 und eth1 m&uuml;ssen nat&uuml;rlich entsprechend konfiguriert sein.<br />
	<br />
	Damit das Interface nach einem Neustart hochgefahren wird, habe ich nun in <strong>/etc/init.d</strong> ein Skript <strong>net.bond0</strong> angelegt.<br />
	<br />
	Es gibt noch ein Tool mit dem Namen <em>ifenslave</em>. Damit kann man das bond-Interface verwalten. Es l&auml;&szlig; sich per apt-get bzw. emerge installieren. Ich habe es bei meinen Tests nicht ben&ouml;tigt.<br />
	<br />
	<strong>Reboot #das wars</strong></div>
]]></content:encoded>
      <pubDate>Wed, 06 Jun 2007 10:31:31 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Gentoo: System- und Sicherheitsupdates]]></title>
      <link>http://www.cschramm.net/de/linux/gentoo/gentoo-system-und-sicherheitsupdates.html</link>
      <guid isPermaLink="false">3</guid>
      <description><![CDATA[Installation von Sicherheits- und Systemupdates auf Gentoo mit Hilfe von glsa-check und emerge....]]></description>
      <content:encoded><![CDATA[gentoo,gentoolkit,emerge,glsa-check,glsa,sync,pretend,deep,update,world<br/><div>
	<strong>GENTOO: Installation von Sicherheitsupdates</strong><br />
	Vorraussetzung: <em>gentoolkit</em> sollte installiert sein (<em>emerge gentoolkit</em>)</div>
<div class="code">
	glsa-check -t all #Sicherheitsupdates suchen<br />
	glsa-check -p $(glsa-check -t all) #Pr&uuml;fen, welche Pakete er installieren w&uuml;rde<br />
	glsa-check -f $(glsa-check -t all) #ALLE Installieren<br />
	#oder einzeln <em>glsa-check -f</em> gefolgt von der Nr., z.B. 200608-15</div>
<div>
	<br />
	<br />
	<strong>GENTOO: System-Update</strong></div>
<div class="code">
	emerge --sync #Portage tree aktualisieren<br />
	emerge --pretend --deep --update world #zuerst pruefen, ob laufende Prozesse betroffen und welche Pakete installiert werden<br />
	emerge --deep --update world #wenn ok, Updates installieren</div>
]]></content:encoded>
      <pubDate>Wed, 06 Jun 2007 10:29:38 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Einrichtung eines Software-Raids mit mdadm]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/einrichtung-eines-software-raids-mit-mdadm.html</link>
      <guid isPermaLink="false">2</guid>
      <description><![CDATA[Einrichtung eines Software-Raids mit mdadm. Ich gehe in dem nachfolgenden Beispiel von einem Raid1 (Mirroring)...]]></description>
      <content:encoded><![CDATA[mdadm,md,raid1,raid,mknod,mkefs<br/><div>
	Ich gehe in dem nachfolgenden Beispiel von einem Raid1 (Mirroring) aus. Der entsprechende Modus mu&szlig; nat&uuml;rlich vom Kernel unterst&uuml;tzt werden.</div>
<div>
	&nbsp;</div>
<div>
	<u><strong>Die Installation von mdadm:</strong></u></div>
<div>
	&nbsp;</div>
<div>
	<strong>Gentoo:</strong></div>
<div>
	<div class="code">
		emerge mdadm<br />
		rc-update add mdadm default<br />
		/etc/init.d/mdadm start</div>
	<div>
		&nbsp;</div>
	<div>
		<strong>Debian/Ubuntu:</strong></div>
	<div class="code">
		apt-get install mdadm</div>
	<div>
		&nbsp;</div>
	<div>
		<strong>RedHat/Fedora:</strong></div>
	<div class="code">
		yum install mdadm</div>
</div>
<div>
	<br />
	<br />
	Installiert man ein neues System kann man das Raid-Modul mit <strong><em>modprobe raid1</em></strong> aktivieren.<br />
	<br />
	Bei der Partitionierung der eigentlichen Disks ist darauf zu achten, dass die Partitionen nicht wie &uuml;blich vom Typ 83 (Linux) sind, sondern den Typ <strong>fd (Raid autodetect)</strong> haben.<br />
	<br />
	<strong>Beispiel:</strong><br />
	/dev/hda1&nbsp;&nbsp;-&nbsp;&nbsp;/dev/hdb1&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/dev/md1&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/boot<br />
	/dev/hda2&nbsp;&nbsp;-&nbsp;&nbsp;/dev/hdb2&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/dev/md2&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/<br />
	/dev/hda3&nbsp;&nbsp;-&nbsp;&nbsp;/dev/hdb3&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/dev/md3&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/home<br />
	/dev/hda4&nbsp;&nbsp;-&nbsp;&nbsp;/dev/hdb4&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/dev/md4&nbsp;&nbsp;&raquo;&nbsp;&nbsp;/var<br />
	<br />
	<br />
	Nun werden zuerst entsprechend 4 Nodes angelegt:</div>
<div class="code">
	<strong>mknod /dev/md1 b 9 1</strong><br />
	mknod /dev/md2 b 9 2<br />
	mknod /dev/md3 b 9 3<br />
	mknod /dev/md4 b 9 4</div>
<div>
	<br />
	<br />
	Nun k&ouml;nnen die Raid-Devices erstellt werden:</div>
<div class="code">
	<strong>mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/hda1 /dev/hdb1</strong><br />
	mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/hda2 /dev/hdb2<br />
	mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/hda3 /dev/hdb3<br />
	mdadm --create --verbose /dev/md4 --level=1 --raid-devices=2 /dev/hda4 /dev/hdb4</div>
<div>
	<br />
	<br />
	Danach werden die Laufwerke erst einmal synchronisiert. Den Status kann mit <strong>watch cat</strong>&nbsp; <strong>/proc/mdstat</strong> beobachten.<br />
	<br />
	Ist die Synchronisierung abgeschlossen, k&ouml;nnen die Laufwerke formatiert werden:</div>
<div class="code">
	<strong>mke2fs -j /dev/md1</strong><br />
	mke2fs -j /dev/md2<br />
	mke2fs -j /dev/md3<br />
	mke2fs -j /dev/md4</div>
<div>
	<br />
	<br />
	Alle gemachten Einstellungen sollten nun auf jeden Fall noch gespeichert werden:</div>
<div class="code">
	<strong>mdadm --detail --scan &gt;&gt; /etc/mdadm.conf</strong></div>
<div>
	(Der Pfad kann je nach Betriebssystem variieren, auf einigen Systemen ist es /etc/mdadm/mdadm.conf)<br />
	<br />
	Jetzt sollten die neuen Raid-Devices noch die <strong>/etc/fstab</strong> eingetragen werden.</div>
<div>
	&nbsp;</div>
<div>
	Somit sollte das Raid jetzt funktionieren!</div>
]]></content:encoded>
      <pubDate>Wed, 06 Jun 2007 10:21:33 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
    <item>
      <title><![CDATA[Die Datei /etc/fstab]]></title>
      <link>http://www.cschramm.net/de/linux/allgemein/die-datei-etc-fstab.html</link>
      <guid isPermaLink="false">1</guid>
      <description><![CDATA[In der Datei /etc/fstab befinden sich alle Geräte (Festplatten, CDROM/DVD-Laufwerke, etc.), die im System eingebunden werden....]]></description>
      <content:encoded><![CDATA[fstab,etc,proc,mounts,dateisystem,optionen,dump,check,mtab,defaults,noauto,user,ro,exec,sync<br/><p>
	In der Datei /etc/fstab befinden sich alle Ger&auml;te (Festplatten, CDROM/DVD-Laufwerke, etc.), die im System eingebunden werden.</p>
<p>
	Ein Beispiel:</p>
<pre class="brush:plain;"># Root-Dateisystem
/dev/hda1    /            ext2         defaults       1   1
# Das Verzeichnis /var erh&auml;lt eine eigene Partition
/dev/hdb2    /var         ext2         defaults       1   2
# Die Swap-Partition
/dev/hda3    swap         swap         defaults       0   0
# ATAPI-Cdrom und Disketten-LW
/dev/hdc     /cdrom       iso9660      ro,noauto,user 0   0
/dev/fd0     /floppy      auto         noauto,user    0   0
# Das Prozessdateisystem
proc         /proc        proc         defaults       0   0</pre>
<p>
	&nbsp;</p>
<p>
	<strong>Die Zeilen sind wie folgt aufgebaut:</strong></p>
<ol>
	<li>
		<strong>das einzubindende Laufwerk</strong></li>
	<li>
		der <strong>Pfad zum Verzeichnis</strong>, in welches gemountet wird (Mountpoint)</li>
	<li>
		das <strong>Dateisystem</strong></li>
	<li>
		die <strong>Optionen</strong>, mit welchen das System gemountet werden soll (z.B. Benutzerrechte)</li>
	<li>
		<strong>Dump </strong>ist nur f&uuml;r das Dateisystemtyp ext2 relevant.</li>
	<li>
		<strong>Check </strong>Gibt an, ob das Dateisystem vor dem Mounten zu &uuml;berpr&uuml;fen ist. Beim Root-Dateisystem sollte hier eine &quot;1&quot; stehen und bei allen anderen entweder eine &quot;0&quot; (keine Pr&uuml;fung) oder eine &quot;2&quot;. Dateisysteme mit gleicher Nummer werden parallel &uuml;berpr&uuml;ft, das Root-Dateisystem sollte immer allein und als erstes getestet werden.</li>
</ol>
<p>
	&nbsp;</p>
<p>
	<strong>Die verf&uuml;gbaren Optionen zu 4):</strong></p>
<ul>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>defaults </strong>f&uuml;r Voreinstellungen (rw, suid, auto, nouser...)</li>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>noauto </strong>f&uuml;r Kein automatisches Mounten beim Booten</li>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>user </strong>f&uuml;r Device darf von normalen Nutzern gemountet werden</li>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>ro, rw</strong> f&uuml;r read only, read write</li>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>exec </strong>f&uuml;r Ausf&uuml;hrung von Binaries gestattet</li>
	<li>
		&nbsp;&nbsp;&nbsp; <strong>sync </strong>f&uuml;r Ungepuffertes Schreiben</li>
</ul>
]]></content:encoded>
      <pubDate>Tue, 05 Jun 2007 22:17:14 +0200</pubDate>
      <category domain="http://www.cschramm.net/de/linux/index/index.html">Linux</category>
    </item>
  </channel>
</rss>

