Was man mit dem DAU so alles machen kann

Gerade eben bei StudiVZ/MeinVZ gesehen:

studivzAls Provider zur Auswahl: AOL, GMX, Google, MSN, Web.de und Yahoo. Ich möchte nicht wissen, wieviele Leute da ihre Zugangsdaten angeben… Viel Spaß dabei! ;-)

Aug 25th, 2009 | Filed under Allgemein

Paranoia

Seit mehreren Monaten, ich glaube sogar Jahren, habe ich keinen Spam mehr erhalten, bei dem es um Microsoft ging. Vor zwei Wochen habe ich mich bei Microsoft registriert, weil ich den RC von Windows 7 testen wollte.
Heute kam dann wieder eine Spam-Mail, die angeblich von Microsoft stammen sollte.
Ob das wirklich Zufall ist?

Aug 19th, 2009 | Filed under Allgemein

Gedanken zur sicheren Authentifizierung bei SSH?

Grüße!

Wirklich sichere Authentifizierungsverfahren gibt es nicht, klar. Daher versucht man es immer so sicher wie möglich zu halten. Doch bringen die in Online- und Printmedien vorgeschlagenen Methoden wirklich mehr Sicherheit?

Das habe ich mich gefragt, als ich neulich einen Artikel[1] im Linux-Magazin[2] gelesen habe.
Die Rede ist da von Public-Key-Authentifizierung[3] welche “einen deutlich besseren Schutz” bieten soll als “das beste Passwort”.
Ein Passwort habe ich im Kopf und ich gebe es direkt ein. Dabei kann man mir über die Schulter gucken oder einen Keylogger verwenden. Schreibe ich das Passwort irgendwo hin ist das natürlich risikobehaftet.

Eine Public-Key-Authentifizierung dagegen basiert auf 2 Dateien im Homeverzeichnis. Einem privaten und einem öffentlichen Schlüssel. Dem Server wird der öffentliche Schlüssel bekannt gemacht, indem er in die Datei ~/.ssh/authorized_keys geschrieben wird. Das geht sehr komfortabel über das Kommando ssh-copy-id. Mit diesem öffentlichen Schlüssel chiffriert der Server beim Loginversuch nun eine Nachricht an den Client, die dieser nur mit dem zum öffentlichen Schlüssel passenden privaten Schlüssel dechiffrieren kann. Der Client sendet die entschlüsselte Nachricht zurück und damit weiß der Server, dass der Empfänger im Besitz des privaten Schlüssels ist.

Den privaten Schlüssel kann ich zwar mit einem Passwort schützen, das lässt sich aber wesentlich einfacher und unbemerkter knacken als bei der Variante per Bruteforce oder eine Wörterbuchattacke über Loginversuche auf dem Server an das Passwort zu kommen. Und das eigentliche Problem an der Sache ist eben, dass diese beiden Dateien für mich lesbar in meinem Homeverzeichnis liegen. Kriegt jemand diese Datei, dann hat er quasi gewonnen. Und das lässt sich dann auch super zuhause beim Angreifer knacken – da gibt es nirgendwo eine Logdatei, die fehlerhafte Login-Versuche aufzeichnet, so wie es bei dem fehlerhaften Versuch an meinem SSH-Login passiert.
Jetzt mag der ein oder andere sagen, dass die /etc/shadow auch nur eine Datei ist die man, wenn man sie kopiert hat, lokal beim Angreifer bearbeiten kann, aber dazu sind eben in den allermeisten Fällen root-Rechte auf dem Rechner notwendig, auf dem die Datei liegt. Bei meinem privaten Schlüssel in /home/cisa/.ssh/ sieht das anders aus: Eine geeignete Sicherheitslücke in dem Browser meiner Wahl oder irgend einer anderen Software, die einen Zugriff auf meine Dateien via Internet bietet, reicht aus.

Noch größer schätze ich das Problem ein, dass man mit einem privaten Schlüssel meistens Zugriff auf mehrere Systeme hat, während viele (sicherheitsbewusste) Personen für verschiedene Systeme auch verschiedene Passwörter benutzen. Man kann bei einem Login via SSH und Public-Key-Authentifizierung zwar auch einen anderen privaten Schlüssel, der mit einem anderen Passwort geschützt sein kann, angeben (das geht sogar recht komfortabel über die ~/.ssh/config mit IdentityFile, damit man nicht jedes mal die Kommandozeilenoption eintippen muss), doch macht man das wenn man sich erstmal mit dieser Methode in Sicherheit wiegt?

Jetzt bin ich natürlich super gespannt auf die Meinung meiner Leser. Also husch husch einen oder mehrere Kommentare oder Blog-Einträge verfassen. E-Mails sind natürlich auch OK.

[1] Linux-Magazin, Ausgabe 08/09, S. 90 “Grundlagen: Sichere Remote-Logins”
[2] http://www.linux-magazin.de/Heft-Abo/Ausgaben/2009/08
[3] http://de.wikipedia.org/wiki/Public-Key-Authentifizierung

Aug 18th, 2009 | Filed under Linux

neuer Fileserver (Teil 1)

Hi,

ich habe vor kurzem aus 2 defekten Notebooks ein funktionierendes gemacht. Dabei hat sicher herausgestellt das das bei Ebay ersteigerte Gerät, was laut Verkäufer ein Mainboard defekt haben sollte, nur einen schief sitzenden RAM Riegel hatte.
Was macht man jetzt mit Notebook ohne Display ? Einen Fileserver!

Der Plan:

2 externe USB Platten im Software RAID 1 auf denen das System und die Daten liegen.

Das Problem:

Wenn beide USB Laufwerke eingesteckt sind bootet das Notebook nicht! Es liegt wohl irgendwie am BIOS, jedenfalls hängt er beim “Detecting Hard Drives”.

Die Lösung:

Da ich schon immer gerne gebastelt habe, war die Lösung ja ganz einfach :-D .
Booten werde ich über SD Karte.
Die Festplatten sollen immer angeschlossen sein, deshalb werde ich am parallel Port ein Relais betreiben welches per Software gesteuert wird.

Der Plan B:

Notebook bootet per SD Karte.
Nach dem Boot startet ein Script die Festplatten per Parallelport -Relais, mountet diese und macht dort ein Swap.

Ok, soviel zum Plan B :) .
Quellcodes und Bilder kommen wenn das ganze Lauffähig ist. (Sonntag :-D , ich glaube fest daran)

Jul 24th, 2009 | Filed under Fun, Linux, Programmieren
Tags:

nohostname.de upgrade auf lenny

Hallo zusammen,

ich mache nun ein Upgrade von etch auf lenny. Kann sein, dass einige Dienste kurz nicht erreichbar sind.

Bitte beten.

UPDATE: Der Reboot ist nun durch – alle Dienste wurden anscheinend gestartet und Mails gehen raus. Löppt.

Jun 22nd, 2009 | Filed under Allgemein

Curl und Lighttpd

Ich habe mich gestern 2 1/2 Stunden mit einem ziemlich verrückten Bug rumgeärgert. Die Aufgabe war: Emuliere einen Browser und lade mit Curl eine Datei per HTTP hoch. Super einfach eigentlich, wenn man nicht gerade Lighttpd einsetzt :(

Curl greift wunderbar auf Lighty zu, bis man ein Feld per Post zu übermitteln versucht. Denn dann passiert folgendes:

user@host:~> curl -v -F "test=test" http://example.com/upload.php
* About to connect() to example.com port 80 (#0)
*   Trying 127.0.0.1... connected
* Connected to example.com (127.0.0.1) port 80 (#0)
> POST /upload.php HTTP/1.1
> User-Agent: curl/7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
> Host: example.com
> Accept: */*
> Content-Length: 143
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=----------------------------65ad699c79c1
>
< HTTP/1.1 417 Expectation Failed
< Connection: close
< Content-Length: 0
< Date: Thu, 11 Jun 2009 08:40:02 GMT
< Server: lighttpd/1.4.19
<
* Closing connection #0

Curl sendet den Header Expect: 100-continue und Lighty sendet HTTP/1.1 417 Expectation Failed zurück. Das mag Curl garnicht und hört einfach auf. Um den HTTP-Header Expect von Curl zu unterdrücken, gibt man als Option noch -H "Expect: " an. Die Kommandozeile sieht dann so aus:

curl -v -H "Expect: " -F "test=test" http://example.com/upload.php

Und hier noch das Beispiel in PHP, mit hochladen einer Datei:

$uploadfile="test.pdf";
$ch = curl_init("http://example.com/upload.php");

//curl_setopt($ch, CURLOPT_VERBOSE, 1);
//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Expect: '));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS,
    array(  'datei'=>"@$uploadfile",
            'feld1'=>'test',
            'feld2'=>'test',
    )
);

$postResult = curl_exec($ch);
curl_close($ch);
print $postResult;
Jun 11th, 2009 | Filed under Linux, Programmieren
Tags: , , ,

Weisheit des Tages 2009-06-09

Es könnte von Murphy kommen:

Wenn Du nach 3 Stunden Googlen endlich ein vielversprechendes Suchergebnis gefunden hast, welches genau auf deine Suchwörter passt und die Hälfte der Antwort schon im Textausschnitt steht, dann ist der Quellserver nicht erreichbar.

Jun 9th, 2009 | Filed under Allgemein

.docx Download unter dem IE7

Wer kennt es nicht? Das Problem das auftritt wenn man einem Kunden eine .docx per Webanwendung zum Download anbietet und der Kunde benutzt den IE7…
Die Datei wird dann als .zip zum download angeboten. Was tun ? Na klar, fragt den General :-D .

Folgende fragen haben mich bei diesem Problem beschäftigt:

1. Wer braucht docx ?
2. Wer benutzt den IE7 ?

Naja der Lösungsvorschlag “benutze den Firefox” ist ja ganz nett. Aber nicht aktzeptabel. :-D

Also was tun? Folgendes in die /etc/apache2/mods-enabled/mime.conf

AddType application/vnd.ms-word.document.macroEnabled.12 .docm
AddType application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx
AddType application/vnd.ms-word.template.macroEnabled.12 .dotm
AddType application/vnd.openxmlformats-officedocument.wordprocessingml.template .dotx
AddType application/vnd.ms-powerpoint.slideshow.macroEnabled.12 .ppsm
AddType application/vnd.openxmlformats-officedocument.presentationml.slideshow .ppsx
AddType application/vnd.ms-powerpoint.presentation.macroEnabled.12 .pptm
AddType application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx
AddType application/vnd.ms-excel.sheet.binary.macroEnabled.12 .xlsb
AddType application/vnd.ms-excel.sheet.macroEnabled.12 .xlsm
AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx
AddType application/vnd.ms-xpsdocument .xps
AddType application/vnd.oasis.opendocument.text .odt
AddType application/vnd.oasis.opendocument.text-template .ott
AddType application/vnd.oasis.opendocument.graphics .odg
AddType application/vnd.oasis.opendocument.graphics-template .otg
AddType application/vnd.oasis.opendocument.presentation .odp
AddType application/vnd.oasis.opendocument.presentation-template .otp
AddType application/vnd.oasis.opendocument.spreadsheet .ods
AddType application/vnd.oasis.opendocument.spreadsheet-template .ots
AddType application/vnd.oasis.opendocument.chart .odc
AddType application/vnd.oasis.opendocument.chart-template .otc
AddType application/vnd.oasis.opendocument.image .odi
AddType application/vnd.oasis.opendocument.image-template .oti
AddType application/vnd.oasis.opendocument.formula .odf
AddType application/vnd.oasis.opendocument.formula-template .otf
AddType application/vnd.oasis.opendocument.text-master .odm
AddType application/vnd.oasis.opendocument.text-web .oth

1. Hilft das und
2. Hilft das wohl auch noch bei einigen anderen Endungen / Formaten.

Mai 14th, 2009 | Filed under Linux, Programmieren
Tags: , ,

Linux knackt die 1% Marke im Desktop Bereich

Siehe hier

Ich glaube ja das ganze ist eher schlecht für die etwas erfahreneren Anwender. Wenn man im Internet mal nach einem undokumentiertes Problem sucht findet man nur irgendwelche DAUs die zum Beispiel schreien, dass ihre Ubuntu CD kaputt ist, weil der PC davon nicht bootet. Aber einfach vergessen haben die Boot Reihenfolge umzustellen.

Mai 1st, 2009 | Filed under Allgemein, Linux
Tags:

Bug im InitScript von Lighttpd in Lenny

Hi,

da wir hier gerade auf einer Kiste von apache2 auf Lighttpd umsteigen ist mir beim Konfigurieren folgendes aufgefallen:

Wenn man den Befehl “include_shell” benutzen möchte, wird $SHELL benötigt. Dafür habe ich das Init Script mal angepasst …

#!/bin/sh
### BEGIN INIT INFO
# Provides:          lighttpd
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Should-Start:      fam
# Should-Stop:       fam
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the lighttpd web server.
### END INIT INFO

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/lighttpd
NAME=lighttpd
DESC="web server"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

CONF_FILE="/etc/lighttpd/lighttpd.conf"
DAEMON_OPTS="-f ${CONF_FILE}"

test -x $DAEMON || exit 0

set -e

# be sure there is a /var/run/lighttpd, even with tmpfs
mkdir -p /var/run/lighttpd > /dev/null 2> /dev/null
# get User and Group names
LIGHTYUSER=$(grep server.username ${CONF_FILE} | awk '{ print $3 }' | tr -d \")
LIGHTYGROUP=$(grep server.groupname ${CONF_FILE} | awk '{ print $3 }' | tr -d \")

if [ -z $LIGHTYUSER ]; then LIGHTYUSER="www-data"; fi
if [ -z $LIGHTYGROUP ]; then LIGHTYGROUP="www-data"; fi

chown ${LIGHTYUSER}:${LIGHTYGROUP} /var/run/lighttpd

chmod 0750 /var/run/lighttpd

. /lib/lsb/init-functions

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" $NAME
        if ! start-stop-daemon --start --quiet --oknodo \
            --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
        then
            log_end_msg 1
        else
            log_end_msg 0
        fi
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" $NAME
        if start-stop-daemon --quiet --stop --oknodo --retry 30 --oknodo \
            --pidfile $PIDFILE --exec $DAEMON
        then
            rm -f $PIDFILE
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;
    reload)
        log_daemon_msg "Reloading $DESC configuration" $NAME
        if start-stop-daemon --stop --signal 2 --oknodo --retry 30 --oknodo \
            --quiet --pidfile $PIDFILE --exec $DAEMON
        then
            if start-stop-daemon --start --quiet  \
                --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then
                log_end_msg 0
            else
                log_end_msg 1
            fi
        else
            log_end_msg 1
        fi
        ;;
    restart|force-reload)
        $0 stop
        test -r  $PIDFILE && while pidof lighttpd | \
            grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done
        $0 start
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
Apr 27th, 2009 | Filed under Linux