Sprechende Shell

p=$(echo "Hello Chris you've logged in"|sed 's/ /+/g');wget -U Mozilla 
-q -O - "$@" translate.google.com/translate_tts?tl=en&q=$p|mpg123 -

Das lässt sich überall auf eine sehr nette Art verwenden. Internetverbindung, installiertes wget und mpeg123 natürlich vorrausgesetzt ;)

OfflineImap: Googlemail sichern

Es gibt vielerlei Gründe seine Mails inkl Ordnerstruktur von Googlemail zu sichern.
Der Export der Kontaktdaten als CSV etc sollte in dem Sinne kein Problem darstellen, genau so wenig wie die OPML in dem RSS-Feedreader von Google. Wobei ich jedem doch als bessere Alternative TinyTiny-RSS empfehle.
In jeder guten Distribution ist OfflineIMAP im Repository zu finden, natürlich auch in FreeBSD (cd /usr/ports/mail/offlineimap/ && make install clean).
Es wird in dem Heimatordner die Datei ~/.offlineimaprc mit folgendem Inhalt erstellt:

[general]
 accounts = Google$DEINVORNAME
 maxsyncaccounts = 3

[Account Google$DEINVORNAME]
 localrepository = LocalGoogle$DEINVORNAME
 remoterepository = RemoteGoogle$DEINVORNAME

[Repository LocalGoogle$DEINVORNAME]
 type = Maildir
 localfolders = ~/Dokumente/GoogleMail/$DEINVORNAME

[Repository RemoteGoogle$DEINVORNAME]
 type = IMAP
 remotehost = imap.googlemail.com
 remoteuser = $DEINEMAILADRESSE
 remotepass = $DEINPASSWORT
 ssl = yes
 maxconnections = 1

realdelete = no

Nun noch den Ordner localfolders = ~/Dokumente/GoogleMail/$DEINVORNAME erstellen und dann kann mit einem einfach

seraphyn@sayuri:~$ offlineimap

das Backup angestoßen werden.

Erstellen eigener Seitenleisten in Serendipity

Da ich mich ein wenig problematisch angestellt habe in der Erstellung eigener Seitenleisten in Serendipity, habe ich einen sehr langen thread hervorgerufen, bis ich auf die Lösung des Problems kam. YellowLed sprach mich an, doch meinen Geistesblitz in schriftlicher Form niederzulegen und das werde ich auf jeden Fall machen, denn dann dürfte auch weiterhin Einigen die Erstellung eigener Themes mit mehr als einer Sidebar leichter fallen.

Bei der Erstellung eigener Sidebars ist der Dreh- und Angelpunkt in Serendipity die Datei confic.inc.php , die sich im Verzeichnis des Themes befindet, welches man selbst erstellt hat. Innerhalb der Datei config.inc.php lassen sich Variablen für das Theme erstellen, welche später für das Aussehen des Blogs zuständig sind. Als Beispiel nehme ich einmal das Theme von diesem Blog, auch wenn es noch nicht ganz fertig ist.
Das Theme besitzt eine sidebar, welche sich oben und eine sidebar welche sich im unteren Bereich direkt über den footer befindet.
Die obere sidebar spreche ich mit:

{if $is_single_entry !=true and $staticpage_pagetitle ==''}
<div id="sidebar_top">{if $topSidebarElements > 0}
 {serendipity_printSidebar side="top"}
 {/if}</div>
<!-- /#sidebar -->
 {else}
 {/if}

an.
Zeilen:
1. Wenn Du kein Einzeleintrag und keine statische Seite bist dann zeige an
2. DIV für die sidebar_top, div teilt den Inhalt in einzelne Abschnitte. Jeder Abschnitt kann seinen eigenen Format, der durch CSS bestimmt wird, haben und dies wird dann in der style.css definiert. Sprich Ort, Aussehen etc.
3. Wenn es Inhalte/Elemente gibt, welche größer als 0 sind dann gebe aus, die
4. sidebar Namens top
5-9 schliessen das Ganze, welches oben geöffnet wurde ab

Das Gleiche könnte man nun auch mit der unteren sidebar Namens footer machen, jene wird aber bei mir überall angezeigt und damit ist auch dementsprechend das Statement in der index.tpl kürzer:


Um diese beiden sidebars in der Konfiguration für die Plugins anzusprechen muss nun die config.inc.php angepasst werden:

$template_config = array(
array(
‘var’ => ‘sidebars’,
‘name’ => SIDEBAR_TITLE,
‘type’ => ‘hidden’,
‘default’ => ‘top,hide,footer,’
),
…. etc

Normalerweise startet innerhalb der config.inc.php des Templates ein array mit den Einstellungen für das Theme. An dieser Stelle wird definiert, welche Einstellungen das Theme besitzt. Siehe auch Was ist ein Array. In der index.tpl wurde in Zeile 4 im ersten Beispiel die sidebar top definiert und im zweiten Beispiel die sidebar footer. Diese finden wir in Zeile 6 wieder und haben sie als default definiert. Der Typ versteckt (hidden) in Zeile 5 bewirkt, dass ich nicht möchte, dass in den Themeeinstellung eine à„nderung vorgenommen werden kann und sie somit versteckt sind. Wenn dieser Typ ein string wäre, könnte man z.B. die sidebar top oder footer löschen.
Damit ich diese sidebars nun auch in der Oberfläche Plugins verwalten ansprechen kann und auch in meinem Theme vorhanden sind, stellt man an das Ende von seiner config.inc.php noch für jede sidebar eine Definierung für smarty:

$topSidebarElements = serendipity_plugin_api::count_plugins(‘top’);
$serendipity['smarty']->assign_by_ref(‘topSidebarElements’, $topSidebarElements);

$footerSidebarElements = serendipity_plugin_api::count_plugins(‘footer’);
$serendipity['smarty']->assign_by_ref(‘footerSidebarElements’, $footerSidebarElements);

In diesen Zeilen werden einmal für die obere sidebar ( top) und einmal für die untere sidebar (footer) die Anzahl der Plugins pro sidebar gezählt und smarty bekannt gemacht. Wenn der Zähler höher als 0 ist werden die Plugins ausgegeben, siehe dazu auch die Abfrage in dem Beispiel 1 Zeile 3 für die obere sidebar ( top).
Was man nun beachten sollte, ist die Zukunftssicherheit für das Theme, falls es noch unter einer späteren Smartyversion verfügbar sein soll.
Bei smarty hat sich der Aufruf der Funktion assign_by_ref geändert, welches sich in einer späteren Version von Serendipity widerspiegelt.
Das ganze würde dann für die ersten zwei Zeilen so aussehen:

$topSidebarElements = serendipity_plugin_api::count_plugins(‘top’);
if (strpos($serendipity['smarty']->_version, ’2′, 1)) {
assign_by_ref(‘topSidebarElements’, $topSidebarElements);
} else {
assignByRef(‘topSidebarElements’, $topSidebarElements);
}

Es wird abgefragt, welche Version von Smarty genutzt wird, handelt es sich noch um die Version 2 nutze assign_by_ref , wenn nicht nutze das neue assignByRef.
Hoffe ein wenig geholfen zu haben.

Die Kuakefunktion von rxvt

Man braucht sich keine extra Programme unter FreeBSD oder Debian installieren, damit man auf jedem Desktop eine Shell aufrufen und wieder in den Hintergrund schicken kann, ohne dass sie beendet wird.
rxvt bringt dafür extra eine Funktion namens kuake mit.
In FreeBSD ist rxvt in /usr/ports/x11/rxvt/ und bei Debian liegt rxvt in den Repositories.
Am besten legt man sich in seinem ~/bin-Verzeichnis die Datei kuake an:

rxvt -tr -tint black -sh 50 -depth 16 +sb -geometry 158x44 -fn "xft:Bitstream Vera Sans Mono:pixelsize=9,antialias=true" -title termi +vb -pe 'kuake' 

und macht diese Ausführbar. Nachdem man diese ganze normal mit seinem Ausführen-Dialog startet kann man sie mit F12 in den Vordergrund und wieder in den Hintergrund schicken. Das ganze harmoniert sehr schön mit einer Screen-Session und irssi/mutt/etc.

Debian Squeeze: SSH zwei Stufenauthentifizierung mit google-authenticator

Ich habe vor ein paar Tagen mit dem Artikel „Google macht SSHD sicher“ über einen Artikel aus meinem Feedreader berichtet. Nun habe ich das ganze selbst ausgetestet und bin begeistert.

The Google Authenticator project includes implementations of one-time passcode generators for several mobile platforms, as well as a pluggable authentication module (PAM). One-time passcodes are generated using open standards developed by the Initiative for Open Authentication (OATH) (which is unrelated to OAuth).

These implementations support the HMAC-Based One-time Password (HOTP) algorithm specified in RFC 4226 and the Time-based One-time Password (TOTP) algorithm currently in draft.

Vorab zur Information:
– In den Sourcen des Modules für PAM gibt es keinerlei Kontaktaufnahme zu einem Google-Server
– Der einzige Aufruf befindet sich in der Datei ./google-authenticator.c um einen QR-Code zu generieren, dazu später mehr
– Die Androidapp nimmt kein Kontakt in das Netz auf, das einzige was sie möchte ist vibrieren.
– Wenn kein Zugang zu dem Smartphone besteht hat man noch Emergency Scratchcodes.
– Die Software ist eine Erweiterung der Sicherheit des sshd und es sollte nicht sonst ein passwortloser Login erlaubt werden

Ich gehe davon aus, dass der openssh-server und Compiler installiert sind.

root@xbmc:~/# mkcd ga
 root@xbmc:~/ga# aptitude install mercurial libpam0g-dev -y
 root@xbmc:~/ga# hg clone  google-authenticator
 cd google-authenticator/libpam/
 root@xbmc:~/ga/google-authenticator/libpam# make
 root@xbmc:~/ga/google-authenticator/libpam# make install

cp pam_google_authenticator.so /lib/security
 cp google-authenticator /usr/local/bin
 sudo chmod 755 /lib/security/pam_google_authenticator.so 
 /usr/local/bin/google-authenticator

Da wir uns nicht als root per ssh anmelden, so etwas gehört sich nicht, nehmen wir substitude user und wechseln den Account zur generieren des Codes:

root@xbmc:~/ga/google-authenticator/libpam# su seraphyn
 seraphyn@xbmc:/root/ga/google-authenticator/libpam$ google-authenticator
 https://www.google.com/chart?chs=200x200&chld=ETCETCETCETC
 Your new secret key is: BLABLABLABLA
 Your verification code is NUMBERSNUMBERSNUMBERS
 Your emergency scratch codes are:
 MORENUMBERS

Do you want me to update your "~/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
 token? This restricts you to one login about every 30s, but it increases
 your chances to notice or even prevent man-in-the-middle attacks (y/n) y
 seraphyn@xbmc:/root/ga/google-authenticator/libpam$ exit

Nicht vergessen die ganze Ausgabe abzuspeichern, denn die URL und vor allen die Codes werden später noch gebraucht.
Ich gehe nicht davon aus, dass auf einem Server eine GUI ist.

Jetzt müssen nur noch der SSH-Server und PAM konfiguriert werden um Google Authentication zu nutzen.
In der Datei /etc/pam.d/sshd muss noch pam_google_authenticator.so hinzugefügt werden:

# /etc/default/locale, so read that as well.
 auth required pam_env.so envfile=/etc/default/locale
 auth required pam_google_authenticator.so

und in der Datei /etc/ssh/sshd_config das Challenge-Response-Verfahren aktiviert werden:

# Change to yes to enable challenge-response passwords (beware issues with
 # some PAM modules and threads)
 ChallengeResponseAuthentication yes

Nach der Installation von Google Authenticator auf Android startet man diesen.
Wenn man die aus der Shell generiert URL in seinem Desktopbrowser aufruft bekommt man einen QR-Code, welcher mit dem auf Android installiertem Google Authenticator per Menü > Scan account barcode ausgelesen wird.
Der 6stellige Code generiert sich alle 30 Sekunden neu und man kann in Ruhe die App auflassen und sich davon überzeugen ツ
Auf der Maschine die nun pam-google-authenticator nutzt kann der SSH-Server neu gestartet werden.
Beim erneuten Einloggen erscheint nun:

Verification code:
 Password:

Als erstes soll man den auf dem Smartphone angegebenen Code eingeben, danach das normale Passwort.
Wenn nun das Smartphone nicht vorhanden ist, dann kann einer der 6 emergency scratch codes genommen werden.

Achtung: Falls der User keinen generierten Schlüssel in seinem $HOME hat (.google_authenticator) wird dieser nicht der Zweistufenauthenifizierung unterzogen.

Externen Editor (gvim) in Opera nutzen

Lange habe ich gesucht und mir Gedanken darüber gemacht wie ich es schaffe in Opera einen externen Editor, wie z.B. gvim, zu nutzen. Sprich für die netten Textareas in meinem Blog und für andere Aufgaben, ich mag keine WYSIWYG-Editoren…
Durch Zufall bin ich auf ein Script gestoßen, welches nicht in dem Sinne für Opera gedacht ist, aber sich durch den WM ansprechen lässt.
Installiert werden muss extra dafür: wmctrl xsel xautomation
Dann wird das Script heruntergeladen: External-Editor und in dem Tastaturkürzeln angegeben, mit welchen Shortcuts man den externen Editor starten möchte.
Bei mir in /home/seraphyn/.ion3/cfg_ioncore.lua:

 bdoc("Run external Editor."),
 kpress(ALTMETA.. "u", "ioncore.exec_on(_, 'externaledit')"),

Auch habe ich das Script zu Operas Gunsten abgeändert, es ist in den Files zu finden.
Das Script wurde von Ben Collerson unter GPL-Lizenz 2004 geschrieben. Gut Idee muss ich zugeben, auf die bin ich nicht gekommen, das ganze von der Anwendung zu abstrahieren.
Ich denke nun ist schon einmal eine Brücke mehr weg, welche mich gestört hat. Opera und gvim/vim
Aber einen richtigen vimperator-Clone gibt es immer noch nicht für Opera.

Zu beachtende Text bei einem Login anzeigen lassen

Wer gerne vor dem Login per SSH eine Anzeige für die Benutzer haben möchte schreibt dies in die Datei /etc/issue.net.
Nicht vergessen auch Banner /etc/issue.net in der Datei /etc/ssh/sshd_config anzugeben.
Als Beispiel:

***************************************************************************
NOTICE TO USERS

This computer system is the private property of its owner, whether
individual, corporate or government. It is for authorized use only.
Users (authorized or unauthorized) have no explicit or implicit
expectation of privacy.

Any or all uses of this system and all files on this system may be
intercepted, monitored, recorded, copied, audited, inspected, and
disclosed to your employer, to authorized site, government, and law
enforcement personnel, as well as authorized officials of government
agencies, both domestic and foreign.

By using this system, the user consents to such interception, monitoring,
recording, copying, auditing, inspection, and disclosure at the
discretion of such personnel or officials. Unauthorized or improper use
of this system may result in civil and criminal penalties and
administrative or disciplinary action, as appropriate. By continuing to
use this system you indicate your awareness of and consent to these terms
and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the
conditions stated in this warning.

****************************************************************************

Wer vor dem lokalen Login einen Text anzeigen lassen möchte, nimm dafür die Datei /etc/issue.
Wer nach dem erfolgreichen lokalen Login, aber vor der Aktiviering der Login-Shell, in das System einen Text anzeigen lassen möchte nutzt die Datei /etc/motd dafür.
Hoffe es hilft einigen, da ich die Frage schon öfters gestellt bekommen habe.