Posts mit dem Label de werden angezeigt. Alle Posts anzeigen
Posts mit dem Label de werden angezeigt. Alle Posts anzeigen

Freitag, 13. Juli 2012

Sicheres Passwort Hashing

Nachdem in letzter Zeit immer und immer wieder Webseiten vor allem dadurch auffallen, dass sie Passwörter im Klartext speichern, hier zwei Funktionen aus der User-Klasse eines meiner letzten Projekte...

Übrigens: Wenn Ihr bei Klick auf 'Passwort vergessen' von einer Webseite das Passwort im Klartext per Email zugesendet bekommt, macht man dort genau das falsch. Schaut dann mal in deren AGB oder Datenschutzbestimmung, ob sie dort behaupten die Passwörter zu hashen. Oft sind die nur Copy&Paste. Und bittet sie das Verfahren umzustellen. Oder schreibt Heise.

Der Code

Für die meisten Probleme gibt es Standards, so auch für das Passwort-Hashing. Es gibt also keinen Grund sich selbst mit Funktionen wie (der nicht mehr zu benutzenden) md5() und String-Operationen seine eigene crypt-Funktion zu schreiben.

Hier nun also eine Lösung mit php, weil die grade hier rumlag.

    /* Code Licence: Public Domain
     *
     * $this->pwhash wird in der DB gesichert bzw. daraus gelesen.
     * die Konfiguration in $_CONFIG sieht z.B. so aus:
     *
     * // Hier ist ein zufälliger Wert pro Webseite einzutragen:
     * $_CONFIG["pw_sitekey"]="897a-d21lk.a8q";
     * // Und hier der Hash-Also. sha1, sha512, NICHT md5!
     * $_CONFIG["pw_hashalgo"]="sha512";
     *
     */

    public function setPassword($password){
        global $_CONFIG;
        $site_key=$_CONFIG["pw_sitekey"];
        $algo=$_CONFIG["pw_hashalgo"];
        $nonce=uniqid();
        $hash = hash_hmac($algo, $password . $nonce, $site_key);
        $this->pwhash = $nonce.':'.$hash;
    }

    public function verifyPassword($password){
        global $_CONFIG;
        $site_key=$_CONFIG["pw_sitekey"];
        $algo=$_CONFIG["pw_hashalgo"];
        $nonce= strstr($this->pwhash, ':',TRUE);
        $hash = strstr($this->pwhash, ':',FALSE);
        $chash= ":".hash_hmac($algo, $password . $nonce, $site_key);
        return ($hash == $chash);
    }

Demo

Was kommt da nun also heraus? Dazu eine kleine Demo
        //Passwort
        $password="very secret";

        //Konfiguration:
        $site_key="12345";
        $algo="sha512";

        $nonce=uniqid();
        $hash = hash_hmac($algo, $password . $nonce, $site_key);
        $pwhash = $nonce.':'.$hash;

        //ausgabe zur Kontrolle
        echo "pwhash= $pwhash\n";

        //zu pruefendes Passwort:
        $check_password="very secret";

        $vnonce= strstr($pwhash, ':',TRUE);
        $vhash = strstr($pwhash, ':',FALSE);
        $chash= ":".hash_hmac($algo, $check_password . $vnonce, $site_key);

        if ($vhash == $chash){
            echo "passwords match!\n";
        }

Die Ausgabe bei übereinstimmenden Passwörtern:
pwhash= 50000b502b234:b038dfb61ba609604e7be78f3aa2cd84fb03970031f5e8d6f2eacc10542741dda5b7f41a716f3f78c305f6898d9b82838ce6b9df15dc94d00c37af393cc51de1
passwords match!

Passwort vergessen!

Wie setzt man das nun organisatorisch mit dem 'Passwort vergessen' Link zusamen? Ganz einfach. Wenn die Nutzer ihr Passwort vergessen können sie sich an ihre Emailadresse einen Link zusenden, mit dessen Hilfe sie auf der Webseite ihr Passwort selbst zurücksetzen können. Der Link enthält dabei ein zufällig erzeugtes Token und verliert nach Benutzung (erfolgreiches Ändern des Passworts) seine Gültigkeit.

Nachtrag: Und natürlich sollte der Link wenn er nicht benutzt wurde nach X Tagen ebenfalls invalidiert werden.

Sonntag, 30. Oktober 2011

U-Pad: Mikrofoneingan als Line-In

Wer kennt das nicht, da hat man eine USB-Soundkarte gekauft, weil der Eingang des Notebooks zu nah an der Festplatte vorbei geführt wird (sic!) und dann kann man an der Soundkarte kein Linepegen anlegen.

Nun, für diesen Fall möchte man ein Dämpfungsglied bauen. Ohne zu sehr auf die Details einzugehen, was die Anpassung angeht, hier ein einfacher Schaltplan um ein Mikrofoneingang zu einem Line-In zu machen.

Obacht: Dies ist für XLR, also symmetrische Signale, gedacht.

       ___ 7500
 o)---|___|-----o--------(o 
       R1       |                mit 2x7.5 und 1x150
LINE           | | 150     MIC   ergibt sich ein Teiler
 IN            |_| R3      OUT   verhältnis von 
       ___      |                15000:150 = 100:1 = -40dB
 o)---|___|-----o--------(o      Bitte 
       R2  7500                  Metallschichtwiderstände
                                 verwenden, die Rauschen nicht.

Für asymmetrische Signale sollte ein normaler Spannungsteiler funktionieren:

         ___15000
 o)-----|___|----o-----(o
                 |
                | | 150
IN              |_|          OUT
                 |
 o)--------------o-----(o

Sonntag, 31. Juli 2011

postfix: IP-Adresse des Absenders verbergen

Nach langer Zeit gibt es heute mal wieder einen kleinen Post aus der Sysadmin-Ecke.

Die Ausgangslage

Ein Benutzer liefert seine Emails mit Authentifizierung bei einem durch mich betriebenen Mailserver ein, der für die entsprechende Domain zuständig ist.

In den Headern dieser Mail wird nun die IP-Adresse auftauchen, von der aus die Email eingeliefert wurde. Dies kann die IP zu Hause sein, die von einem Bekannten oder die von einer Institution. Postet derjenige häufiger auf Mailinglisten kann man so schon ein Profil erstellen und bekommt auf jeden Fall heraus, dass er z.B. Emails von der Uni aus sendet, etc.

Dies möchte man nun verhindern - und das funktioniert mit postfix Bordmitteln sogar relativ einfach.

Mehr Information ist am Ende doch weniger

Zunächt müssen wir die entsprechenden Header erkennen können. Da bei allen nicht-authentifizierten Emails die IP-Adresse des einliefernden MTA im Header unverändert erhalten bleiben soll, schon um Spammer identifizieren zu können ohne extra in die Logs schauen zu müssen, brauchen wir einen Weg, die passenden Received:-Header zu erkennen. Dies erreichen wir, indem wir dem postfix sagen, dass er den Benutzernamen des Absenders auf dem Mailserver in den Header einfügen soll. Dies geschieht über die Anweisung smtpd_sasl_authenticated_header = yes in der Datei main.cf des postfix.

Unser header sieht nun ungefähr so aus:

Received: from [192.168.101.150] (guest123.guest.example.org [192.0.43.10])
  (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits))
 (No client certificate requested)
 (Authenticated sender: username)
 by mail.somedomain.tld (Postfix) with ESMTPSA id 32A59B1C032
 for ; Thu, 30 Jun 2011 12:36:07 +0200 (CEST)

Die hervorgehobene Zeile ist neu hinzugekommen und ermöglicht es uns im zweiten Schritt nach genau diesen Headern zu suchen.

pcre ftw!

postfix bietet dafür die Möglichkeit der header_checks. Damit kann man mittels (perl) regular expressions auf den Headern der Email arbeiten und Zeilen einfügen, Zeilen ändern und eigentlich vor allem Aktionen auslösen wie das Aufhalten einer Email, Abweisen, Weiterleiten, etc.

Wir benutzen diese Möglichkeiten, um auf der oben gezeigten Received:-Zeile ein paar Ersetzungen vorzunehmen.

Dazu stellen wir zunächst sicher, dass die main.cf des Postfix auch header checks aktiviert hat:

 smtpd_sasl_authenticated_header = yes
 ...
 header_checks      =  pcre:/etc/postfix/header_checks
 mime_header_checks =  pcre:/etc/postfix/header_checks

Nun koennen wir in der angegebenen Datei header_checks mit folgender Zeile das Umschreiben aktivieren:

/^Received:\ from (.*)\(.*\)(.*)\(Authenticated\ sender:\ .*\)(.*by mail\.somedomain\.tld.*)$/U  REPLACE Received: from $1 (Remote IP hidden) $2(Sender was authenticated on somedomain.tld) $3

Hinweis: Die Zeile ist relativ lang, beim Kopieren aufpassen sie komplett zu erwischen. Wichtig ist die Option U an der Regex, diese schaltet sie auf ungreedy. Siehe man pcre_table.

Der Name des Mailservers taucht hier nochmal auf, damit ich die Original-IP bei extern eingelieferten Emails nicht verwerfe - das kann zum Identifizieren von Spammern helfen, auch wenn die Header oft gefälscht sind.

Im Ergebnis sieht der Header der Email nun aus wie folgt:

Received: from [192.168.101.150]  (Remote IP hidden) 
 (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits))
 (No client certificate requested)
 (Sender was authenticated at somedomain.tld) 
 by mail.somedomain.tld (Postfix) with ESMTPSA id A36241184685
 for ; Fri, 29 Jul 2011 20:23:31 +0200 (CEST)

Wenn man die private IP auch noch entfernen möchte, kann man sich jetzt natürlich einen weiteren Header-check überlegen, der auf '\[.*\].*Remote IP hidden' triggert und diese ersetzt. Das kann im Einzelfall notwendig werden, wenn kaputte Antispam-Maßnahmen anderer Empfänger solche Emails ablehnen.

Wenn man misstrauisch ist fügt man ausserdem noch eine Zeile hinzu, die jedes Vorkommen von '(Authenticated sender: ...)' mit etwas belanglosem ersetzt, falls man unter allen Umständen die internen Nutzernamen geheim halten will.

Sonntag, 6. Februar 2011

Effizienter Desktop mit fluxbox

Nach langer Zeit mal wieder ein kleines Posting von mir. Diesmal zum Thema Organisation des Desktops bzw. Windowmanagers

Vor zwei Tagen bin ich auf der Suche nach einem neuen Windowmanager auf Anregung von Seba auf fluxbox umgestiegen. Flott, schlank, stark konfigurierbar. Auch wenn ich nach wie vor ein paar Gimmicks vermisse, habe ich Features entdeckt, die ich glaube ich nicht mehr missen will.

Dinge die ich vermisse

Der System-Monitor von Gnome war doch ganz praktisch. Man konnte in einem Panel die CPU-Auslastung sehen und den Speicherverbrauch. Aktuell habe ich nur die CPU-Auslastung beider CPUs ohne Unterscheidung in Nice, System und IO-Wait. Die wmaker-Docks sind mir zu groß und außerdem nicht im Panel. Ein 'swallow' wie damals beim fvwm2 wäre toll, um Anwendungen in das Panel einzubinden.

Die Arbeitsflächen lassen sich nicht zweidimensional anordnen, d.h. ich kann immer nur nach links und rechts, nicht nach oben und unten wechseln. Das war aber relativ effizient, um schnell zwischen Anwendungen zu wechseln. Eine Sache der Gewöhnung, hoffe ich.

Das Killer-Feature

Eines der Killer-Features schlechthin ist aber die Möglichkeit, beliebige Aktionen, per MacroCommand auch mehrere, auf Tastaturshortcuts zu legen.

Nicht nur, dass man damit Dinge wie das Maximieren oder Umschalten der Arbeitsflächen anpassen kann, man kann auch neue Funktionalität schaffen, zum Beispiel einer Anwendung eine Tastenkombination zuordnen und sie nur dann starten wenn sie noch nicht läuft.

Aktuell ist mein fluxbox nun so konfiguriert, dass Programme wie Firefox, Thunderbird, etc. eine Tastenkombination haben, die entweder auf die Arbeitsfläche mit der Anwendung umschaltet und sie anzeigt oder aber eine Dialogbox aufpoppt mit der Frage, ob sie gestartet werden soll. Zusätzlich ist den Anwendungen eine Arbeitsfläche und Größe fest zugeordnet, auf der sie starten sollen.

Läuft die Anwendung also noch nicht, startet sie unsichtbar auf ihrer Arbeitsfläche und ich kann dann später dorthin umschalten, sobald sie bereit ist.

Gerade das Umschalten zum Instant-Messenger oder Mediaplayer und wieder zurück zum Browser oder der IDE ist damit sehr schnell möglich.

Hinweis: Eventuell klappt das nur mit der aktuellen git-Version von fluxbox, da NextWindow unter Umständen nicht alle Workspaces durchsucht.

Hier die relevanten Auszüge:

~/.fluxbox/keys:
Mod4 C :Reconfigure
Mod4 F :If {Some Matches (class=Iceweasel)} {NextWindow (class=Iceweasel)}  {Exec ~/.fluxbox/bin/fbexec.sh iceweasel}
Mod4 G :If {Some Matches (class=Gmpc)     } {NextWindow (name=gmpc) (class=Gmpc)} {Exec ~/.fluxbox/bin/fbexec.sh gmpc }
Mod4 M :If {Some Matches (class=Icedove)  } {NextWindow (class=Icedove) } {Exec ~/.fluxbox/bin/fbexec.sh icedove}
Mod4 P :If {Some Matches (class=Pidgin)   } {NextWindow (class=Pidgin)  } {Exec ~/.fluxbox/bin/fbexec.sh pidgin }
Mod4 R :If {Some Matches (class=RSSOwl)   } {NextWindow (class=RSSOwl)  } {Exec ~/.fluxbox/bin/fbexec.sh ~/bin/RSSOwl.sh}
Anm: Mod4 ist die 'Windows'-Taste. Die Werte für class habe ich der apps-Datei entnommen, die fluxbox automatisch erweitert, wenn man mit der rechten Maustaste auf eine Titelleiste klickt und 'Remember' anklickt um Attribute wie den Workspace der Anwendung zu speichern. Alternativ geht auch xprop oder wmctl -l ~/.fluxbox/apps:
...
[app] (name=Navigator) (class=Iceweasel) (role=browser)
  [Workspace]   {5}
  [Dimensions]  {1198 682}
  [Position]    (UPPERLEFT)     {0 80}
[end]
...
~/.fluxbox/bin/fbexec.sh:
#!/bin/sh

#timeout returnes 0 (success) thus we have to use || here:
xmessage -center -buttons 'yes:1,no:0'  -timeout 5 "about to exec $@" || exec "$@"

Sonntag, 28. November 2010

Server mit Migrationshintergrund

Dieser Post soll allen als Warnung dienen, die einen Rootserver gemietet haben. Es kann einem passieren, dass der Provider beschließt, daß die alte Hardware zuviel Strom frisst, und er die Server der Kunden virtualisieren möchte.

Zustimmung des Kunden

Ein normaler Provider würde dann einen Brief schreiben. Oder vielleicht auch eine Email. Dann auf Antwort warten, und wenn der Kunde sein OK gibt und vielleicht noch einen Terminwunsch äussern darf (nicht während der Produktpräsentation z.B.) wird die Migration durchgeführt oder auch nicht.

Alles andere ist eine einseitige Vertragsänderung die unmittelbar Sonderkündigungsrecht des Kunden zur Folge hat.

Handeln ohne Zustimmung?

Bei einem meiner Provider war das leider nicht so. Ich erhielt eine Email, in der man die neue Virtualisierungslösung anpries und dass man wegen Erneuerung von Hardware meinen Server gerne migrieren würde. Das ist für mich Konjunktiv.

Das Problem war nur, dass ich diese Email eine Woche lang nicht zur Kenntnis genommen habe, weil Thunderbird der Meinung war, sie nicht anzeigen zu müssen. Alles halb so schlimm, könnte man meinen, die Nachricht war ja im Konjunktiv, und kein vernünftiger Provider würde einen Kundenserver nehmen, runterfahren, die Festplatte ausbauen, die Daten kopieren, auf ein Storage mit den Daten aller anderen Kunden legen...

Nun, genau das hat dieser Provider aber getan. Er hat nicht auf eine Antwort gewartet und einfach mal so die Festplatte ausgebaut und in einer Stunde Downtime die Daten kopiert.

Gemerkt habe ich es, weil Nagios gemeckert hat, dass der Server down ist.

Als ich nach etwas Suchen dann feststellte, dass mir Thunderbird Mails unterschlägt, fand ich nach einem Index-Rebuild auch die Email, die auf diese Migration "hinwies", bzw. mich eigentlich darauf hinwies, dass man das gerne tun würde, dieses Migrieren

Was ist 'Ausspähen von Daten'?

Auf meine Email hin, dass ich hier einen Fall von "Ausspähen von Daten" sehe und nicht damit einverstanden bin, dass man einfach meine Daten kopiert, erhielt ich dann gegen 16:09 eine Email, in der man mich fragt, ob ich mit einer Rückmigration auf die alte Hardware einverstanden sei. Diesmal war das sogar als Frage formuliert!

Lernresistent? Könnte man meinen.

Ja, nur leider sehe ich im Syslog, dass der Server um 17:05 und 17:10 rebootet. Es wurde wieder keine Antwort abgewartet - diesmal nicht mal eine Stunde lang - und es wurde erneut ohne Absprache mit den Daten hantiert. Die gehosteten Webseiten waren damit mal wieder nicht erreichbar. Und der Nameserver und Mailserver auf der Kiste auch nicht.

Dieser Zustand wurde leider auch 3 Stunden lang nicht besser. Obwohl ssh irgendwann wieder ging. Des Rätsels Lösung: Sie haben beim Rückmigrieren das Routing verbockt. Nach einer Email an die Notfall-Hotline war das aber dann wenigstens in Rekordzeit behoben - unter 10 Minuten.

got root?

Ich habe nach diesem Vorfall unmittelbar einen anderen Hoster gesucht.

Der neue Server war schließlich am Mittwoch einsatzbereit, im Verlauf des Tages habe ich dann einiges an Domains umziehen dürfen, darunter diverse CMS-Systeme, den Mailserver und den Nameserver für eine zweistellige Zahl an Domains und alle Nutzer und Kunden über die neuen IPs bzw. Nameserver informieren müssen, damit sie ihre DNS-Zonen ggf. anpassen.

finally?

Zwischendurch habe ich dann noch Kontakt zu einem Anwalt aufgenommen, um mir die rechtliche Situation mal ein bisschen genauer darlegen zu lassen.

Nun, die Kündigung beim Provider folgt zum 01.12.2010 - der alte Server ist nun endgültig platt. Genullt. Ob der Provider noch eine Kopie der Daten irgenwo im Backup hat - wer weiss....

Dienstag, 2. November 2010

RANT: Wer darf heutzutage eigentlich Mailserver betreiben?

Mir platzt hier gleich die Hutschnur. Man ist mal eine Woche zum Entspannen (und wegen einer Tagung)) aufs Land gefahren, und dann ist man andauernd am Server fixen. Arrgh.

Ein Drama in drei Akten

Dass einer meiner Server am Sonntag (natürlich während des gemütlichen Abendessens bei der Familie) wegen zu wenig RAM ausstieg ist ja meine Schuld, aber was dann gestern und heute sonst noch passierte muss ich einfach mal loswerden.

1. Akt: Die Uni

Gestern Abend hatte die Uni Probleme. Ausnahmslos alle Emails wurden mit einem permanenten Fehler abgewiesen:

 ...
 host localhost [127.0.0.1]: 
   550-Mailbox unknown. Either there is no mailbox associated with this
   550-name or you do not have authorization to see it.
   550 5.1.1 User unknown

Das ist natürlich genial für Mailinglisten - von denen fliegt man dann in der Regel runter - aber auch, wenn man wie ich bei seinem Hoster diese Adresse angegeben hat (weil unabhängig von den Systemen die man dort hosted) und dann die Rechnung oder Trafficabrechnung einen User unknown rauswirft.

Natürlich war gestern der Monatserste und natürlich hat mein Hoster mir versucht an diesem Tag die Rechnung und die Trafficabrechnung zu schicken. Die Trafficabrechnung ist angekommen. Die Rechnung (noch?) nicht.

2. Akt: Der Ticketversender

Ich bin diese Woche weggefahren, weil ich am Donnerstag zu einer Tagung will. Dazu braucht man natürlich ein Ticket. Und wie bekommt man das? Richtig, über einen Dienstleister. Dazu meldet man sich dort an, bezahlt das Ticket und wartet auf das pdf mit dem Ticket.

Und wartet. Und wartet. Und schreibt eine Email an den Support.

Denn: zum Passwort ändern auf der Plattform muss man eine Email bestätigen, aber die kommt ebenfalls nicht an.

Nun bekam ich dann heute eine html-only Email, dass das Ticket nochmal versendet wurde. Aber es kam nicht an, dafür füllte sich mein Maillog:

postfix/smtp[18334]: connect to mail2.amiando.com[213.183.6.102]:25: Connection refused
postfix/smtpd[18137]: NOQUEUE: reject: RCPT from mail.amiando.com[195.71.125.161]: 
  450 4.1.7 <no-reply@mail.amiando.com>: Sender address rejected: unverified address:
      Address verification in progress; from=<no-reply@mail.amiando.com>
      to=<xxxxx@XXXXXXXXX> proto=ESMTP helo=<lnxp-1930.srv.mediaways.net>

Die HTML-Mail löste bei mir leichte Übelkeitsgefühle aus, aber als ich den Eintrag im maillog auswertete wurde mir irgendwie schlecht.

Diese Leute versenden Emails und wundern sich, dass sie als SPAM erkannt wird?

Fassen wir mal zusammen:

Die Email ist HTML-Only, die Absenderadresse existiert nicht, so dass sie bei Fehlzustellungen nichts davon bemerken - deren System wird es also immer wieder versuchen, an eine nicht-funktionierende Adresse von einer ebenfalls nicht-funktionierenden Adresse aus mails zu versenden. Damit macht man sich bei den postmastern, die diese Bounces bekommen, so richtig beliebt.

Dann meldet sich der Mailserver mit dem Namen lnxp-1930.srv.mediaways.net obwohl er laut DNS eigentlich mail.amiando.com heissen sollte. Noch ein SPAM-Kriterium.

Und zur Kröhnung schreiben sie einen Mailserver in ihre Zone, dessen SMTP-Port Verbindungen ablehnt.

3. Akt: Services die verbinden...

Mit dem Spruch wirbt eine andere Firma für ihre Dienste. Leider scheint es damit nich so weit her zu sein. Ich bekomme hier jedenfalls Emails von der Adresse www-data@int3.web.int.fra.privatnetz.org

Mein Mailserver scheitert dann laut syslog aber daran, wenn er versucht mails an die IP 10.1.1.100 zuzustellen.

Die haben doch allerernstes sowohl hostnamen mit privaten IPs in ihrem DNS, als auch MX-Records die auf private IPs zeigen! Stümper! Das ist 'pollution of the public namespace' was den DNS angeht und auch sonst einfach nur kaputt.

Und dann wundern sich Leute, warum ich NAT und Masquerading hasse!

Das Ergebnis ist dasselbe wie oben: Sie werden niemals Fehlermeldungen erhalten und vielfach als SPAMMER erkannt werden.

Fazit

Ich frage mich langsam echt, ob wir einen Internet-Führerschein brauchen - für Diensteanbieter!

Montag, 18. Oktober 2010

uBoot für DockStar

Wie versprochen geht es weiter mit Artikeln zum DockStar

Um einen eigenen uBoot zu übersetzen bedarf es nicht viel...

  1. Crosscompiler/Toolchain für Arm
  2. uBoot-Quellen
  3. patches für uBoot für den Dockstar
  4. meine Anpassungen für Speicher und LEDs

Wer das alles nicht möchte, kann auch einfach das fertige Binary laden, muss dann aber mit den Standardoptionen leben oder die Optionen im Flash anpassen. Meine Version des u-Boot gibt es hier. Vorsicht: Es scheint nicht jeder Kernel damit zu booten. Bitte vorher testen!

Die Toolchain bekommt man nach der Anleitung hier und dann geht es bei ahsoftware weiter mit dem uBoot.

Am Ende gibt es dann noch die Anpassungen für LED's und Speicher von mir:

In der Datei board/Marvell/sheevaplug/sheevaplug.h kann man sich aussuchen, wie man die LED's beim Einschalten gesetzt haben will. Folgende Zeilen schalten einfach die orange LED ein, um den Bootvorgang zu signalisieren:

#define SHEEVAPLUG_OE_LOW        (~(0))           /* This is for DockStar:                    */
#define SHEEVAPLUG_OE_HIGH       (~( (1 << 15) )) /* output enable gpio47 (32+15) = orange,   */
                                                  /*               gpio46 (32+14) = green led */
#define SHEEVAPLUG_OE_VAL_LOW    (1 << 29)        /* USB_PWEN low                             */
#define SHEEVAPLUG_OE_VAL_HIGH    0               /* output low => led on - thus we switch on */
                                                  /* the yellow one above.                    */

Viel wichtiger ist jedoch das korrekte Konfigurieren des Speichers, damit das später startende Linux nicht versucht, auf den nicht vorhandenen Speicher zuzugreifen.

Die Option hierzu findet sich in der Definition des Konfigurationsabbilds der CPU in der Datei board/Marvell/sheevaplug/kwbimage.cfg. Dort gilt es die DATA-Definition an der Adresse 0xFFD01504 zu ändern:

DATA 0xFFD01504 0x07FFFFF1     # CS[0]n Size Register - 07=128MB for DockStar

Wer nun noch eine komfortable Eingabeaufforderung im Bootloader haben will, editiert noch schnell die Datei include/configs/sheevaplug.h und fügt die folgenden Zeilen ein:

#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_AUTO_COMPLETE
#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
#define CONFIG_CMDLINE_EDITING

Schliesslich wollte ich noch die Standard-Boot-Optionen anpassen:

 #define CONFIG_BOOTCOMMAND \
         "${x_bootcmd_usb}; "    \
         "setenv bootargs ${x_bootargs} ${x_bootargs_root}; echo cmdline: ${bootargs} ; "    \
         "run x_bootload_kernel m_usb_boot;" \
         "reset" /* If loading from USB failed we just reset, my experience was that the second time the device will be found */

[...]
 #define CONFIG_EXTRA_ENV_SETTINGS \
       "x_bootargs=console=ttyS0,115200 mtdparts="CONFIG_MTDPARTS \
       "x_bootargs_root=root=/dev/sda1 ro rootdelay=5\0" \
       "x_bootload_kernel=ext2load usb 0:1 0x800000 /boot/uImage\0" \
       "m_usb_boot=if ext2load usb 0:1 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000;else bootm 0x800000;fi;\0" \
        "x_bootcmd_usb=usb start\0"

Damit sucht der u-Boot auf dem usb-stick nach einem uImage und uInitrd und bootet, falls vorhanden, auch mit Initrd.

Flashen des uBoot

Die heikelste Operation ist das Flashen des uBoot. Zum Testen empfiehlt es sich, mit dem vorhandenen Bootloader den neuen uBoot per Netz oder usb-Stick in den Speicher zu laden und direkt anzuspringen (Dazu das bin-file benutzen). Wer seinen eigenen uBoot flashen will sollte unbedingt daran denken, nicht versehentlich das binary sondern immer das Bootfile (kwb) zu flashen.

Ich erledige das bequem mit der seriellen Konsole und einem tftp-Server:

setenv ipaddr 10.1.1.17 ; setenv serverip 10.1.1.1 ; tftp 0x6400000 u-boot.kwb
nand erase 0x0 0x40000
nand write 0x6400000 0x0 0x40000
reset
Und wenn man Glück hatte, braucht man nicht so wie ich einen JTAG-Adapter...

Mein Dockstar lebt wieder...

So. Es ist wieder einmal passiert. Ich habe mir Hardware zum Spielen gekauft.

Diesmal: Ein FreeAgent DockStar Network Adapter von Seagate.

Das Schätzchen hat 128MB Ram und 256MB Flash on Board, eine nette ARM CPU, Gigabit-Netzwerk und 4 USB-Ports. Details finden sich zu Hauf im Netz.

Was mich besonders interessiert hat, war die in der CPU vorhandene Crypto-Unit, die sha1, md5 und aes in Hardware berechnen kann.

Linuxkernel

Leider ist es mit der Unterstützung dieser Einheit im offiziellen Kernel noch nicht so wahnsinnig weit - bisher wird das ganze nur rudimentär angesprochen (z.B. kein DMA), so dass es nicht wirklich Spaß macht, das ganze zu nutzen. (1-2MB/s Gewinn)

Etwas mehr verspricht hier ein Kernel des Herstellers - und voilá, GPL-sei-dank gibt es da auch was passendes. Oder naja, etwas das man für passend halten kann.

Vorweg: Ja, ich habe den Kernel letztlich übersetzt bekommen, man darf nur nicht so wahnsinnig sein, und an der config großartig Dinge ändern wollen - weil dann knallt es. Und zwar richtig mit Compiler-Fehlern und Syntax-Errors in den Kernelquellen.

Letztlich habe ich jedenfalls 15MB/sec von einer verschlüsselten USB-Platte lesen können statt 6-7 ohne Hardwareunterstützung.

Details zum Kernel folgen, sobald ich einen stabilen build habe und das dokumentieren kann. Ausserdem will ich die LEDs aus dem Kernel heraus ansprechen können, die GPIO-Konfiguration habe ich im Prinzip bereits.

uBoot - der Bootloader

Damit ich dieses System bequemer booten kann, wollte ich dann einen neuen uBoot bauen.

Die Cross-compiler-chain war ja schon von kernel vorhanden - sollte also alles kein Problem sein. Dachte ich.

Die Konfiguration des DockStar unterscheidet sich leider etwas von der des Sheeva-Plugs. So ist nur die Hälfte des Rams vorhanden, ausserdem sind die beiden LEDs an andere GPIO-Pins angeschlossen.

Kaputtgeflasht

Was mir letztlich das Genick brach war aber ein dummer Fehler: Ich habe das uBoot-Binary direkt in den Flash des DockStar gebrannt - statt des kwb-Images, das die Hardwarekonfiguration enthält.

Letztlich habe ich nun 4 verschiedene Jtag-Adapter hier gehabt, davon zwei selbstgebaute. Der letzte, ein wiggler, funktionierte schließlich - wenn auch nur mit 50kHz statt 500. (Kabellänge)

Folgende Fallen begeneten mir dabei:

  • 74HC244 falschrum im Sockel. Gute Heizwirkung, der Chip hats überlebt, mein Zeigefinger auch...
  • Kabel zu lang und zu wenig abgeschirmt
  • Ein funktionierender DockStar hat das JTAG deaktiviert und ist zum Testen ungeeignet!

Vor allem der letzte Punkt mit dem funktionierenden DockStar hat mich etliche Stunden gekostet. Aber wer rechnet schon damit -.-

Ausblick

Die folgenden Posts werden ausführlich das Wiederbeleben des DockStars, die korrekte Konfiguration des Bootloaders für diese Plattform und die Konfiguration des Kernels enthalten.

Der Bootloader kann hier jedenfalls schon die LED's ansprechen, dem Kernel werde ich das wohl auch noch beibringen. TODO's sind aber noch die Konfiguration des Speichers im uBoot.

Sonntag, 10. Oktober 2010

Vorlesungsverzeichnis der TU-Berlin (Backup)

Die Freitagsrunde hat sich wieder die Freiheit genommen, eine Kopie des Vorlesungsverzeichnisses der TU-Berlin anzulegen, falls die Server überlastet sein sollten. Bitte weitersagen.

Das Vorlesungsverzeichnis für das Wintersemester 2010/2011 findet sich nun auch hier: offizielles Vorlesungsverzeichnis der TU-Berlin (Kopie).

In den Ordnern sind jeweils die pdf-Versionen der Fakultäten abgelegt. Auf oberster Ebene auch nochmal ein Archiv als zip und tarfile.

Update: Ja, das Backup des Vorlesungsverzeichnis ist in den letzten Jahren rege genutzt worden, weil der Typo3 doch ab und zu ausfällt und das lsf-web einfach überlastet ist. Und ich hoffe dass dieser Eintrag jetzt auch genügend Stichworte für die Google-Trefferliste hat ;o). Die billigen Tricks wie finden sie HIER mehr über TU-Berlin Vorlesungsverzeichnis oder Backup Vorlesungsverzeichnis TU Berlin lasse ich mal weg...öhm - wait... mist ;)

Sonntag, 5. September 2010

md-raids aus USB-Platten und automatische Checks...

Falls ihr externe USB-Platten als Raid einsetzt, werdet ihr wissen, dass es mitunter Tage dauern kann, bis ein Rebuild oder Check des Raids komplett ist:
md4 : active raid5 sdc[0] sdf[3] sde[2] sdd[1]
      2930287488 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
      [>....................]  check =  0.9% (8861912/976762496) finish=1374.5min speed=11735K/sec

Falls ihr euch nun wundert, warum das Raid an einem Sonntag Abend auf einem Debian System sehr träge reagiert und 50% der CPU durch einen Thread mit dem Namen md4_raid5 belegt sind, empfehle ich euch mal den Cronjob des mdadm anzusehen.

Dieser läuft am ersten Sonntag jedes Monats und prüft das Raid auf Konsistenz. Einerseits recht nützlich kann es aber auch störend sein - dauert es doch wie gesagt relativ lange. Zudem gibt es unter Debian bei manchen Installationen einen Bug, so dass der Cronjob jeden Sonntag läuft.

Um einen laufenden Check abzubrechen genügt ein:

/usr/share/mdadm/checkarray -x --all

Der Cronjob ist in der /etc/cron.d/mdadm definiert.

Komplett deaktivieren ist aber auch unschön, weil es das Erkennen von Fehlern auf dem Raid verhindert. Bei Mirror-Raids ist das Fatal, beim Ausfall einer Platte in einem Raid5 ebenfalls, weil dann unter Umständen keine reduntenten Informationen zum Wiederherstellen vorhanden sind.

Dienstag, 18. Mai 2010

bzip2 vs. gzip und gvfs im Allgemeinen

Eben bin ich mal wieder über einige Kleinigkeiten gestolpert, die einfach nur ärgerlich sind.

Ein paar wirklich kleine Bugs, aber trotzdem unendlich nervig!

Gnome bindet Samba-Freigaben (also Windows-Freigaben) innerhalb des virtuellen Dateisystems ~/.gvfs innerhalb des Homes des Nutzers ein. Soweit so gut.

Erster Akt: Zugriff!

Man könnte ja annehmen, dass Gnome dann auch transparent Zugriff darauf erlaubt. Wenn ich ein Terminal starte, kann ich in das Verzeichnis wechseln und mit normalen Kommandozeilentools auf die Freigaben schreiben. Alles toll.

Aber in Gnome tauchen diese Freigaben im normalen Datei-öffnen Dialog nicht auf. Entsprechend auch nicht in Firefox, Galeon, Epiphany. Wie soll denn ein Endnutzer jetzt auf einfache Weise einen Download auf dem Share speichern? Vielleicht übersehe ich auch was, aber sowas ist einfach nur ärgerlich. Nicht nur weil das unter Windows ohne Probleme funktioniert.

Navigiert man manuell nach ~/.gvfs/ klappt es aber...

Zweiter Akt: Verknüpfungen

Wer es aus Windows kennt, versucht es auch unter Linux. Hat man nach viel Suchen die richtige Freigabe auf dem richtigen Server gefunden, zieht man die Freigabe aus der Netzwerkumgebung auf den Desktop und hat fortan eine Verknüpfung mit dem Share, die beim Doppelklick wiederhergestellt wird.

Nicht so bei unserem Lieblingsfrickelbetriebssystem mit Gnome. Zuerst beschwert es sich, dass die Freigabe kein normaler Ordner ist. Ach! Dann legt es auf dem Desktop einen leeren Ordner mit dem Namen der Freigabe an. Toll! Wie soll denn ein Endbenutzer jetzt auf die Idee kommen, dass alles was er in diesem Ordner speichert eben nicht auf dem Server landet?!

Nun gut, versuchen wir Rechtsklick auf den Freigabenamen in der Netzwerkumgebung, dann Verknüpfung erstellen. Ooops. Ich habe auf der obersten Ebene des Servers ja keine Schreibrechte, also Fehlerdialog, Verknüpfung kann nicht angelegt werden. Leider erfolgt auch keine Möglichkeit wie bei Windows (sic!) die Verknüpfung statt dessen direkt und automatisch auf dem Desktop anlegen zu lassen. Ergo: Verknüpfungen erzeugt man manuell, indem man einen Starter mit dem Ziel nautilus smb://server/ anlegt.

Wie soll denn ein Endbenutzer....

Wenn man viel Glück hat geht das auch meistens. Oft habe ich aber wie unter Windows nur leere Servereinträge, bekomme skurrile dbus-Fehlermeldungen, kann das Netzwerk nicht durchsuchen, etc. Ja, iptables ist leer und auf ACCEPT.

Dritter Akt: Auf der Kommandozeile ist alles besser?

Nein, nicht wirklich.

Bei dem Gnomefs ist z.B. die Funktion fchmod nicht implementiert. Und das führt zu unnötigen Fehlern.

Situation: Auf dem Share liegt eine Datei, die wir komprimieren wollen.

Also Kommandozeile, cd ~/.gvfs/sharename ; bzip2 file - und wir bekommen einen netten IO-Error um die Ohren gehauen. Vorher hat bzip2 das File übrigens ordnungsgemäß komprimiert. Komplett. Und wieder aufs Share geschrieben. Dann gelöscht.

Das gleiche Experiment mit gzip: Es wird auch ein Fehler geworfen, das File wird aber korrekt abgelegt und die Quelle gelöscht.

Welches Verhalten ist nun besser? gzip, der die Rechte nicht setzt und dem es egal ist, oder bzip2, dass die Datei einmal übers Netz zieht, komprimiert, schreibt und zurücksendet und dann löscht?

Was mich aber am meisten wundert: warum wird das fchmod erst NACH dem Schreiben der Nutzdaten gemacht?

Die Krönung des ganzen: Der Mode, den bzip2 hier übergeben will, unterscheidet sich nicht vom Mode, den die Datei auch so schon hat, wenn sie neu angelegt wird -.-

Fazit: Alle doof außer Mutti!

Mittwoch, 7. April 2010

Erinnert mich irgendwie an George Orwell...

„Bei allem Positiven, das die Online-Welt bietet, wird das Internet zunehmend als Medium für die Vorbereitung und die Ausführung abweichenden Verhaltens, bis hin zur Durchführung krimineller Taten genutzt.“

Das obige Zitat stammt nicht etwa aus einem Roman wie 1984 sondern aus einer offiziellen Pressemitteilung des BDK - des Bund Deutscher Kriminalbeamter.

Ich finde solche Gedankengänge jedenfalls sehr verstörend. Demnächst dann: Wer sich abweichend verhält, wird einstweilig erschossen... Hatten wir so etwas ähnliches nicht schon einmal?

Auch aufschlussreich ist das Folgende:

„Aufgrund ungefilterter Internetzugänge sind aber auch Inhalte wie Pornographie, Pädophilie, Islamismus, Rechts- und Linksextremismus, Terror und vieles mehr für Kinder und Jugendliche frei verfügbar.“

Nun, Kinder und Jugendliche haben auch ungefiltert Zugriff auf die Zigaretten und den Alkohol im elterlichen Haus. Sogar an Küchenmesser und Äxte kommen sie. Man könnte noch diverse andere Gefahren aufzählen, bis zum Fremden im Park der sie belästigt oder entführt. Trotzdem fordert niemand, dass der Staat jedem Heranwachsenden einen Streifenpolizisten zur Seite stellt, der aufpasst, dass die Eltern nichts falsch machen. Es ist verdammt nochmal die Verantwortung der Erziehungsberechtigten, dafür zu sorgen, dass Kinder eben nicht vor dem Computer geparkt werden. Aufgabe der Schule sollte es sein, Medienkompetenz zu vermitteln.

Sehe nur ich das so, dass es bedenklich ist, wenn der Staat sich in die Erziehung der Kinder einmischt und sich zur Aufgabe macht, diese vor allem zu schützen, was seiner Meinung nach schädlich ist?

Gleichzeitig soll hier die Internetzensur wohl mal wieder zum Schutz der Kinder salonfähig gemacht werden. Wenn man einen ungefilterten Zugang vom Provider haben will, kann man das vermutlich bekommen. Aber ich vermute, das traut sich dann keiner, weil oben genannte Dinge will er ja ohnehin nicht abrufen - sich verdächtig machen erst recht nicht.

In diesem Sinne werde ich mich jetzt weiter abweichend verhalten und mit meinem abweichenden Betriebssystem diesen Post beenden und nachher abweichend von der Mehrheit mit dem Rad in die Uni fahren...

Freitag, 2. April 2010

Scrollen mit dem Touchpad...

Kleiner Tipp am Rande: Wer sich wie ich darüber ärgert, dass nach einem Update des X-Servers bzw. des synaptic Touchpad-Treibers das scrollen per Touchpad nur noch an der rechten Seite des touchpads funktioniert und nicht mehr, wenn man zwei Finger auf das Touchpad legt, kann das alte Verhalten schnell durch Aufruf des 'synclient' wiederherstellen.

Die Konfiguration erfolgt bei aktuellen xorg-Versionen ja nicht mehr in der xorg.conf...

Bei der Gelegenheit habe ich auch gleich das vertikale Scrollen aktiviert und Klicks und Doppelklicks eingeschaltet:

   #Scrollen in alle Richtungen gleichzeitig:
   synclient VertTwoFingerScroll=1
   synclient HorizTwoFingerScroll=1
   #Klicken mit linker Taste:
   synclient TapButton1=1
   #Meine default-Werte:
   synclient MaxTapTime=180
   synclient MaxDoubleTapTime=180
Das obige snippet habe ich jetzt einfach in meine .xinitrc eingebaut, fertig.

1. Nachtrag: Die Freude hält sich in Grenzen - nach einem Suspend to RAM muss man das kleine Script nochmal ausführen, damit das Touchpad konfiguriert ist. Offenbar sichert der synaptics-Treiber den Status nicht korrekt bzw. stellt ihn nach dem Aufwachen nicht wieder korrekt her. *grr*

Donnerstag, 1. April 2010

Eduroam soll in Zukunft weiter kein Geld kosten!

Man ist ja einiges gewöhnt, was Ideen der Uni angeht, Geld zu sparen. In einigen Hochschulen sieht man die Studierenden offensichtlich nur als Kostenfaktoren, die den Forschungsbetrieb behindern. Die logische Konsequenz: Die Einführung von Studiengebühren.

In Berlin ist das zum Glück noch nicht der Fall - aber auch hier wächst der Kostendruck unaufhaltsam - die TU soll in den kommenden Jahren Millionen einsparen.

Vergangenes Jahr gab es an einigen Hochschulen schon die Idee, die Stromentnahme für Notebooks nur noch gegen Bezahlung zu ermöglichen, weil der Stromverbrauch durch die mitgebrachte Technik offenbar so hoch war, dass die Hochschule 'in den Ruin' getrieben werde. Wer mag kann ja mal ausrechnen, was 50 Notebooks mit 50 Watt in 2 Stunden an Kosten verursachen...

An der TU gibt es aber eine ganz neue Idee.

Hier steht, eduroam solle demnächst Geld kosten. Klar, WLAN an der Uni ist ja Luxus. Warum auch nicht, bei 30.000 Studierenden kommen da sicher ganz nette Summen zusammen, die angeblich in den Ausbau des Netzes gesteckt werden sollen.

Man darf gespannt sein...

Update: Insbesondere interessiert mich, wer auf diesen Aprilscherz reingefallen ist ;o)

Dienstag, 30. März 2010

Präsentationen mit LaTeX und... pdfPres!

Wer so wie ich Fan von LaTeX ist, wird sich über dieses Programm freuen:

pdfPres zeigt die aktuelle Folie, die letzte und die folgende sowie Notizen an. Die Folien sind als pdf Datei vorhanden, die Notizen werden in einer xml-Datei gehalten. Der Clou ist aber, dass ein zweites Fenster nur die aktuelle Folie anzeigt, so dass man dieses auf den zweiten Desktop schieben kann und so per Beamer dem Publikum zeigt.

Außerdem kann man in seiner Vorschau blättern ohne das Publikum durch Folienwechsel zu verwirren.

Download per git von http://github.com/vain/pdfPres/

Montag, 22. März 2010

Presenter-Keyodes mappen

Was tun, wenn die Software zum Blättern die Cursortasten 'Links' und 'Rechts' verlangt, der Presenter aber nur die Bild auf und Bild ab Tasten als Keycodes sendet?

Die Frage wurde mir vorhin in einem telefonischen Notruf 5 Minuten vor Beginn einer Präsentation gestellt... Damit es beim nächsten Mal schneller geht hier die Doku.

Nun, zunächst sucht man per xev die Keycodes der betreffenden Tasten und xmodmap -pr die Namen der Zieltasten.

Man erhält dann sowas:

TasteKeycodeName in X
Bild auf 112 Prior
Bild ab 117 Next
Links 113 Left
Rechts 114 Right

Und nun mappen wir fröhlich die Tasten um:
Bild auf soll Cursor links werden:
xmodmap -e "keycode 112 = Left"
Bild ab soll Cursor rechts werden:
xmodmap -e "keycode 117 = Right"

Und wenn man Ersatz für die Cursortasten will:
Links soll Bild auf werden:
xmodmap -e "keycode 113 = Prior"
Rechts soll Bild ab werden:
xmodmap -e "keycode 114 = Next"

Freitag, 12. März 2010

Unter OpenWRT per DHCP den NTP announcen

Wer sich wundert, warum die Rechner zu Hause den NTP-Server des eigenen Routers einfach nicht benutzen wollen, sollte mal per tcpdump nachsehen, ob die DHCP-Option 42 auch gesendet wird... Wenn nicht muss man auf dem Router in der /etc/config/dhcp das Schlüsselwort dhcp_option benutzen:
config dhcp lan
        option interface        lan
        option start            100        
        option limit            150
        option leasetime        1h
        list dhcp_option '42,10.1.1.1'
Hier wird den Clients im LAN mitgeteilt, dass man 10.1.1.1 als NTP-Server nutzen will...

Dienstag, 9. März 2010

IO-Durchsatz und kernel neuer 2.6.28

Kurze Notiz: Wer auch wie ich das Problem hatte, dass manche Anwendungen wie liferea das gesamte System einfrieren lassen, wenn sie ein bischen IO machen (eine sqlite-db nutzen z.B.) kann ich ein downgrade auf Kernel 2.6.28, z.B. 2.6.28-gentoo-r5, empfehlen. Seitdem ich von 2.6.33 umgestiegen bin, kann ich wieder Multitasking machen und liferea benötigt keine 20-30 Sekunden pro Artikel(!) zum Darstellen, wenn mal ein Bild enthalten ist. Auch insgesamt ist das System wesentlich responsibler geworden und damit wieder benutzbar. Das Problem als solches stellte sich durch 80-90% iowait dar - so dass ich trotz Dualcores nicht mehr arbeiten konnte, weil der IO Scheduler das System schlicht und einfach komplett lahmgelegt hat. Ich hoffe das wird mal wieder besser *seufz*

Donnerstag, 4. März 2010

TU-Berlin: Sicherheitswettbewerb der AG-Rechnersicherheit

Die AG-Rechnersicherheit hat parallel zu ihrer Präsenz auf der CeBit einen Wettbewerb gestartet, an dem nun jeder per Internet teilnehmen kann um sein Wissen im Bereich der IT-Security zu testen... Dabei gibt es neben einfachen Fragen auch einige praktische Knobeleien zu lösen. Wer mitmachem möchte, sollte natürlich die Spielregeln lesen und das Anmeldeformular ausfüllen. Ansonsten sei jedem ein Besuch auf der CeBit am Stand B39 in Halle 9 ans Herz gelegt.