Freitag, 25. Februar 2011

NNTP-Server WendzelNNTPd-2.0.0-beta ist fertig!

Nach etwa 1,5 Jahren Entwicklungszeit habe ich nun endlich die 2.0-Beta-Version von meinem Usenet-Server auf die Reihe bekommen. Leider steht mir für die Open Source-Entwicklung nicht mehr so viel Zeit zur Verfügung, wie noch vor einigen Jahren.

WendzelNNTPd ist ein Usenet-Server, den ich bereits seit 2004 entwickle und der mittlerweile vollständig in C geschrieben ist. Die begehrte C++-Oberfläche (Qt) habe ich für die neue Version in den Müll verfrachtet. Dafür wurde das Konsolentool 'wendzelnntpadm', mit dem die Administration erledigt wird, deutlich erweitert.

Was gibt es Neues? Nun, wahrscheinlich einige Features, die kein anderer Usenet-Server dieser Welt haben dürfte:

  • Einen Datenbank-Abstraktionslayer (man kann in der Konfiguration auswählen, ob man, nach wie vor, mit SQlite3, oder mit dem von nun an unterstützten MySQL arbeiten möchte). Das Hinzufügen weiterer Datenbanken ist (einmal vom Tippaufwand abgesehen) relativ einfach und  vom eigentlichen Server-Code getrennt.
  • Es gibt nun Access Control Listen (ACLs) für erhöhte Sicherheit inklusive Role Based Access Control (RBAC), um beim Administrieren Zeit zu sparen. Ein Administrator kann also nicht nur einem Benutzer x Zugriff auf eine Newsgroup y geben, und einem Benutzer z nicht, sondern er kann auch einfach die Benutzer (a,b,c) in eine Rolle packen und der Rolle verschiedene Newsgroups zuweisen. Damit lassen sich etwa einfach 'mal zehn Entwickler mit einer Entwicklungsnewsgroup für ein neues Produkt verbinden.
  • Es gibt "invisible"-Newsgroups: Hat ein Benutzer keinen Zugriff auf eine Newsgroup, taucht sie nicht beim LIST'ing auf. Sollte der User dennoch in Erfahrung bringen, dass eine Newsgroup existiert, dann kann er sie natürlich trotzdem weder mitlesen, noch darin Posten.
  • Die Dokumentation ist neu geschrieben und liegt jetzt in LaTeX vor (verfügbar als HTML- und PDF-Version).
  • Unglaublich viele Bugfixes und unglaublich viel Code-Clean-Up.
  • Außerdem: Diverses Detailfehlverhalten ist nun standardkonformer (leider fehlen noch immer eine Menge NNTP-Befehle und Standard-Details).
  • Weitere NNTP-Commands werden unterstützt:
    • LISTGROUP
    • LIST OVERVIEW.FMT
    • XGTITLE
    • LIST NEWSGROUPS
Aber nicht vergessen: Der Code ist BETA -- und zwar erst seit einigen Stunden ;) Feedback ist selbstverständlich gern gesehen, Patches für neue Features aber noch mehr.

Anmerkung: Die regulären Ausdrücke, die u.a. bei XGTITLE [r] verarbeitet werden, basieren bei WendzelNNTPd auf der regex-Library, wie Sie bei Linux typisch ist. Die NNTP-Syntax für reguläre Ausdrücke passt also nicht exakt. Beispielsweise ist * bei WendzelNNTPd .* , die üblichen Ausdrücke, wie ^a, b$ usw. funktionieren selbstverständlich dennoch.

Donnerstag, 24. Februar 2011

Blogumstellung

Ich habe meinen Blog gestern zu Blogspot umgezogen und dabei die 52 brauchbarsten von ca. 200 Postings in mühsamer Arbeit übernommen.

Außerdem habe ich meine Webseite umgestellt (sie besteht nun aus statischem HTML-Code, den ich mit dem Apache Forrest-Publishingframework erzeuge).

Mittwoch, 23. Februar 2011

Promotion mit FH-Diplom

(R:OK)
Promotion nach dem FH-Diplom -- geht das? Ich stelle diese Frage nicht zum ersten Mal und kann nach meiner Recherche sagen: es geht, ist aber schwierig. Promotionen können übrigens nur an einer Universität, also nicht an einer FH, durchgeführt werden, weshalb man folglich irgendwie an eine solche gelangen muss.

Original Post: Fri, 04 May 2007 11:23 (hin und wieder leicht aktualisiert)

Hier ein Zitat aus (Quelle: Uni Bielefeld): 1992 beschloss die Kultusministerkonferenz, besonders qualifizierten FH-AbsolventInnen den direkten Weg zur Promotion zu ermöglichen, ohne zuvor den Universitätsabschluss nachholen zu müssen. Die Bundesländer haben diesen Beschluss bisher nur teilweise und auch unterschiedlich umgesetzt.

Hier die interessanten Links:
Info#1 (Link geht nicht mehr) Info#2 (Link geht nicht mehr) Info#3 (Link geht ebenfalls nicht mehr) Diskussion#1

Außerdem möchte ich auf mein eigenes Posting verweisen, in dem ich unregelmäßig meinen eigenen Promotionsfortschritt protokolliere: siehe hier.

Besonders interessant: Einen Dr. in Deutschland nach der FH zu erwerben ist schwer. In Australien gibt es den Ph.D. wohl nach 2-3 Jahren, wobei das FH Dipl. als "Bachelor (honours)" (also der "bessere" Bachelor, den man nach vier Jahren bekommt) gewertet wird, und der, wenn gut genug, direkt zur Promotionszulassung führen kann. In Österreich sei die Promotion nach der FH auch verhältnismäßig einfach (speziell für den Dr. tech. ... den, so wie ich es verstanden habe, höherwertigen Dr. rer. nat. gibt es etwa in Linz erst nach einem Aufbaustudium).

An einer deutschen Uni muss man oft erst ein paar Semester (im schlimmsten Fall das ganze Diplom-Hauptstudium) nachholen, damit man offiziell ein Uni-Diplom oder einen von der jeweiligen Uni anerkannten Masterabschluss hat (und mit dem man dann anschließend promovieren kann).

Möchte man in Deutschland direkt mit dem FH-Diplom promovieren, dann sollte man schon einen Schnitt von 2,0 oder besser vorweisen. Einige Unis verlangen auch einen Mindestschnitt von 1,5 sowie Zusatzleistungen. Mir sind auch Fälle bekannt, bei denen trotz 1er-FH-Masterabschluss noch umfangreiche Auflagen (in Form von zusätzlich zu erbringenden Prüfungsleistungen) verlangt wurden.

Aus Wikipedia: An den Fachhochschulen wird das Diplom ebenfalls als akademischer Grad verliehen, es wird jedoch seit 1987 zwingend mit dem Zusatz (FH) gekennzeichnet und berechtigt nicht grundsätzlich, aber unter besonderen Voraussetzungen, zur Promotion. Neben der im Gegensatz zum universitären Diplom eher anwendungsbezogenen Orientierung unterscheidet sich das Diplom der Fachhochschulen auch durch die in der Regel kürzere Studiendauer von 8 Semestern (bis Ende der 80er 6 Semester).


Alternativ kann man aber auch ein Masterstudium anschließen, was in Deutschland 3-4 (an einer Uni meist 4) Semester dauert. In Schweden habe ich aber auch schon einen Zwei-Semester-Master (60 ETCS) gefunden, der dann allerdings explizit als "Master of Science (1 Year)" tituliert wird (ähnliche Möglichkeiten gibt es an einigen spanischen Universitäten).

Bis vor Kurzem bot die Hochschule Augsburg noch einen 60 CP-Master für Studenten mit 8-Semester-FH-Diplom bzw. 8-Semester-Bachelor-Abschluss an, der leider mittlerweile eingestellt und durch einen dreisemestrigen Master ersetzt wurde. Zum Glück konnte ich diesen Master selber gerade noch studieren, bevor diese Einstellung vollzogen wurde. Die Zulassung zur Promotion war für mehrere Absolventen mit sehr gutem Abschluss in diesem 60 CP-Master an verschiedensten Universitäten in Deutschland erfolgreich.

Hier noch ein interessanter Beitrag aus der Süddeutschen zum Thema: Dr. zweiter Klasse. Zitat: Damit würde sich auch ein anderes Problem lösen, das Geiger in Bezug auf die steigenden Promovierendenzahlen unter den FH-Absolventen sieht: "Solange die Studenten für die Promotion an eine Universität wechseln müssen, sind die guten Leute für die FHs oft verloren."


FAQ von Fragen, die ich öfters gestellt bekomme (neue Fragen bitte als Kommentar posten):

Q: Kann ich nach einem Master-Abschluss eigentlich den "(FH)"-Zusatz hinter meinem Diplom weglassen?

A: Nein. Der Grad muss so geführt werden, wie er verliehen wurde. Es steht allerdings jedem frei, sich *nur* Master-of-Wasauchimmer zu nennen (also nur "VNAME NNAME, M.Sc." anstelle von etwa "Dipl.-Inf. (FH) VNAME NNAME, M.Sc.").

"Hacking" gnometris highscores

(R:OK)
Where the hell does gnometris (a tetris game for GNOME) save his scores? I found out :-)


(Date/Datum: 080824-00:22, Hits: 2540)

I like these tiny challenges even if they -- like this one -- can easily be solved by a 10 year old comming-soon-nerd. Here is what I found out.

Before I start: Here you can see how this game looks like:
gnometris

First, I tried to figure out what files were opened by gnometris. Because of this I tried to perform a syscall and library call trace of the binary, but gnometris changed its behavior and prevented this very first " attack" by disabling the "Scores" menu entry:
gnometris scores
Because of this (you can see it on the right picture) I tried to configure a keyboard shortcut for the scores menue by editing ~/.gnome2/accels/gnometris:

swendzel@steffenmobile:~$ cat .gnome2/accels/gnometris
...
...
; (gtk_accel_path "/MenuActions/NewGame" "n")
(gtk_accel_path "/MenuActions/Scores" "s")
; (gtk_accel_path "/MenuActions/About" "")
; (gtk_accel_path "/MenuActions/SettingsMenu" "")
; (gtk_accel_path "/MenuActions/Pause" "Pause")

The shortcut worked... but it worked only if I did not do any tracing ;-)

The easiest way would be to search Google for a hint or to read the source code but ... there must be a nicer way to find out were the scores were saved (and in which format!).

Because of this, I tried Gnome's minesweeper implementation. When you trace gnomines it shows a different behavior, it simply loads an empty scores table! Now I tried to figure out if all Gnome games make use of an equal or even the same highscore storage system.

Another idea was that all Gnome games seem to use a global highscore table for all users of the computer which means that they must be able to write to a system file that is not located in a users $HOME. Let's check that:

swendzel@steffenmobile:/tmp$ ls -l /usr/games/{gnomine,gnometris}
-rwxr-sr-x 1 root games 113056 2008-07-17 21:32 /usr/games/gnometris*
-rwxr-sr-x 1 root games  95168 2008-07-17 21:32 /usr/games/gnomine*
 
Yup! (Notice the 's'-flag). Hmm.. let's try the most easy possibility to find score files ...

sudo find / -name '*gnometris*'
...
/var/games/gnometris.scores
...

It was SO EASY. Only a file search was needed. But the rest was more fun ;-)

$ cat /var/games/gnometris.scores
30841 1215191332 swendzel
6440 1219527400 swendzel
4780 1219527140 swendzel
4720 1218969234 swendzel
4240 1219258843 swendzel
2620 1214769614 swendzel
 
And yup, the editing worked find. But I still did not knew the meaning of the number in the middle of each line. Hmm.. WAIT!

swendzel@steffenmobile:/tmp$ cat <<>time.c
> #include
> int main(){printf("%i\n",time(NULL));return 0;}
> EOF
swendzel@steffenmobile:/tmp$ gcc -o time time.c
swendzel@steffenmobile:/tmp$ ./time
1219529987
 
It is just the UNIX time value (the number of seconds counted since 00:00:00 UTC, January 1, 1970). :)

Tote und pseudo-tote Projekte

(R:OK)
Sind freie Software-Projekte wirklich tot, wenn sie keine Entwicklungs-Aktivität zeigen?
(Date/Datum: 2010-03-28-18:29, Hits: 506)

Als Administrator ist man generell gewillt, Software einzusetzen, die aktiv weiterentwickelt wird. Das heißt, dass das letzte Release nicht sonderlich alt ist und das etwas Aktivität auf den Entwickler-Repositories vorhanden sein sollte. Als Entwickler ist die Überlegung ähnlich: Mit Vorliebe werden aktive -- das heißt: nicht tote -- Projekte (etwa Bibliotheken) zur weiteren Entwicklung verwendet.

Kurz gesagt lautet die Faustregel entsprechend: Liegt das letzte Release oder die letzte Subversion/Git/CVS/...-Aktivität nicht sonderlich weit in der Vergangenheit, so ist ein Projekt grob als aktiv einzustufen. Nun ist es aber so, dass etwa mein AstroCam-Projekt seit Mai letzten Jahres keine neue Version mehr gesehen hat (und auch diese enthält keinerlei halbwegs bedeutsame Quellcode-Änderung) und das Projekt dennoch nicht tot ist. Die letzte wirklich wichtige Version liegt gar noch deutlich weiter (knapp zwei Jahre) zurück: Version 2.7.4 vom 2. Mai 2008 enthält nämlich einen brauchbaren Bugfix.
Dennoch gilt: Würde ich einen neuen Bug finden oder würde mir ein Problem gemeldet werden, so würde ich es schnellstmöglich beheben.

Warum aber gibt es keinerlei neue Versionen? Gegenfrage: Weshalb sollte man ständig neue Versionen herausgeben ... mit Features die eh nur 2% der User verwenden und die übrigen 98% entweder nicht benötigen, oder nicht kennen? Projekte sind manchmal einfach ausreichend fertig entwickelt und deshalb nicht tot. Sie als "tot" zu betrachten während sie also nur "pseudo-tot" sind, das sehe ich als vorschnell an. Manche Projekte haben (auch in der Open Source-Community) einfach nicht das Ziel, immer bunter, aufgeblähter und langsamer zu werden. Für meine Projekte gilt das ebenfalls: Lieber klein, sicher und stabil soll der Code sein. Dafür verzichte ich auf unnötige Features und deshalb ist AstroCam auch noch immer (wir schreiben Ende März 2010) auf meiner Webseite auch in der Liste der aktiven Projekte aufgeführt.

Covert Channel Mailinglist/Discussion Group

I just created a covert channel discussion list. The list is accessible for everybody interested in the topic.
(Date/Datum: 2008-12-30-16:28, Hits: 2504)

Micro-FAQ:

This list can be found at Google groups: http://groups.google.com/group/covert-channel-research.

Web Archive of the OLD VERSION of this mailing list: Can be found here. All messages are available here.

Covert Channels out of date?

Within the last days some "security experts" told me that covert channels are something that was important within the past. I do not agree this. Covert channels are nowerdays more important than they have been ever before.

(Date/Datum: 2008-11-15-23:17, Hits: 1085) While writing and working on my diploma thesis (I cannot talk about the topic until it is finished but after I received my mark (in a few months) I upload a pdf of it) that is focused on some special parts of covert communication, I was just wondering why there are so few people which are interested in covert channels. I also submitted a research paper to a conference (I will not name it here) what was just rejected due to not fully comprehensible arguments (including the "out of date" thing).

On a talk about my thesis I gave on Thursday at kempten university of applied science a person of the audience (not a computer scientist and not one of these "security experts", what means that his question does not disqualify himself) asked me why I do reasach on this topic and if the only reason of this is to "hack some PC". I replied that if there is a person (for example in China) that wants to read critical news about the local government via internet, this person will maybe get into jail if someone will notice this. But if he uses covert communication, he will stay much safer!

I am sure that the importance of covert communication will increase within the next decades! At least it will increase in combination with cryptologic techniques.

-----------------------------------------

Kommentare:

Von: Dave Howe
of course - but while many people no doubt design and use covert channels, and would love objective (and informed) evaluations of its performance and detectability, such discussion instantly reduces the covertness of the channel...

as an example, I have a utility I wrote here that acts as a port forwarder - running on an arbitrary port, it listens for inbound connections, and then in turn opens a second connection to another instance of itself (again, on an arbitrary port) whose location is defined in the config of the forwarder. If the source IP is one for which it holds a message, then encoded in the sequence number increments during the tcp conversation will be the message; once all traffic held for that IP is passed, it reverts to random offsets in keeping with good practice.

externally, nothing much is visible - a packet capture will show a normal tcp transaction or transactions of some generic type (I usually forward to a webserver) and the message itself (once extracted from the header info) is not encrypted (although it is arbitrary binary data so could be externally encrypted). There are (at least) two downsides.

First, the channel itself is relatively slow - one byte per packet, with the first few packets constituting overhead. MTU is used to shrink the packet size down to increase traffic, for this reason (and to reduce messages being lost if non-proxied connections occur). The second is.. I just posted about it to a public webserver, so anyone interested in why a webserver is only accepting an MTU of 512 bytes is going to be looking at header fields to decode them...... (obviously, this was a toy to illustrate a method, and is not in use, or I wouldn t be disclosing it)

Security Though Obscurity is seldom the answer in any security field, but for covert channels, where even a reasonable suspicion can be considered grounds for at least further investigation (or in repressive countries possibly even rubber hose cryptography , discussing openly what approaches you take is probably not good practice if you are active in that field.

Distributionen zwischen Stabilität und Zukunft

(R:OK)
Linux-Distributionen haben ein Problem. Einerseits verspielen sie ihr Stabilitätsimage und andererseits gewinnen Sie dadurch viele neue Benutzer.
(Date/Datum: 2008-06-26 20:19)

Linux-Distributionen werden bunter, komfortabler, benutzerfreundlicher und komplexer. Komplexität ist nicht nur schlecht, bedeutet es doch oftmals auch, dass mehr Pakete, mehr Funktionalitäten in den Paketen und mehr Hardwareunterstützung verfügbar sind.

Auch Benutzerfreundlichkeit ist prima: Die Konfiguration des Systems geht wie von allein. Kurz: Jeder kann heute Linux verwenden und damit alles machen, was er sonst auch unter Windows tun würde (natürlich mit Ausnahme eventueller Spezialfälle weniger Benutzer).

Aber überstürzen sollte man den Entwicklungsprozess im Endbenutzerbereich (etwa Desktop-Umgebungen, Browser, Office-Umgebungen etc.) dabei trotzdem nicht. Die frisch gewonnenen Benutzer sind schnell wieder verloren, wenn Enttäuschungen auftreten. Enttäuschungen treten auf, wenn Programme zwar bunt sind, aber eben abstürzen. Natürlich: Funktionalität steht im Konflikt mit Stabilität und ich unterstelle den Entwicklern und Leitern der großen Open Source-Projekte, dass ihnen bewusst ist, zwischen beidem vernünftig abzuwägen.

Noch ist Linux ein äußerst stabiles System. Das Grundsystem ist sowieso mehr als stabil und Linux ist im Bereich Server, Security und ähnlichen Bereichen großartig! Der Kernel wird qualitativ hochwertig entwickelt und die Basistools wie die bash, der vi, ifconfig oder getty sind seit Jahrzehnten im Test und in der Weiterentwicklung. Sie sind nach wie vor vollkommen zeitgemäß und ihre Stabilität lässt nirgends zu Wünschen übrig.

Dennoch! Ernste Anzeichen von Instabilität sind im Bereich der GUI-Anwendungen aufgetreten. Seit einigen Tagen stürzt etwa OpenOffice.org bei mir ständig ab. Was die Distributoren dagegen unternehmen? Einiges! Vor allem aber ist man vorsichtig. Als vor einiger Zeit die neue KDE-Version 4.0 erschien (mittlerweile sind wir bei Version 4.1beta2) haben die Distributionen ihre primäre KDE-Variante auf der letzten (und eben stabileren) 3.x'er Version (3.5.9) belassen. Slackware, Ubuntu und Co. bieten einfach weiterhin Version 3 an. Zwar gibt es bei einigen Distributionen auch die 4'er Version KDE, aber diese ist eben nicht die Defaultversion -- eben gedacht für die, die wissen, was sie tun oder die es einfach ausprobieren möchten.

Ich hoffe, diese Strategie wird von den Distributoren beibehalten werden!

Open Source Software und ihr Feedback

(R:OK)
OpenSource-Software zu verwenden ist toll, aber wie wäre es mit aktiver Teilnahme?
(Date/Datum: 080629-20:42, Hits: 1072)

Aus meiner langjährigen Erfahrung als OpenSource-Entwickler weiß ich, wie wichtig Feedback für freie Projekte ist. Als Entwickler freut man sich über Feedback meist sehr; egal, ob es sich dabei um konstruktive Kritik, einen Bugreport, ein kleines Dankeschön dafür, dass man die Software programmiert hat, oder eine Frage handelt.

Große Projekte, bei denen der Quellcode ständig komplexer wird, erhalten oftmals recht viel Feedback, aber auch diesen Projekten würde ich mehr Feedback wünschen. Denn: Desto mehr Feedback man als Anwender einer Software den Entwicklern gibt, desto eher können diese ihre Software verbessern.

Besonders bei Open Source-Projekten ist es einfach, Feedback an die Entwickler zu verschicken. Meist bekommt man nämlich sehr leicht (oft über die Hilfe-Funktion eines Programms oder über dessen Projektwebseite) die Mailadressen der Entwickler in die Finger und kann dann seine Erfahrungen, etwa den Programmabsturz bei einer bestimmten Funktion, den Entwicklern mitteilen und damit wertvolles Feedback liefern.

Ein Hindernis dabei mag die Faulheit sein, schließlich hat man Besseres zu tun, als Kontakt mit den Entwicklern aufzunehmen. Wer aber just in einem Moment etwas Gutes tun möchte, der kann sich doch auch einmal die fünf Minuten nehmen und den Entwicklern der Software ein kurzes Feedback schicken.

Das Resultat eines behobenen Fehlers kann man dann nämlich nicht nur selbst in der nächsten Version genießen, sondern es profitieren davon auch alle anderen Benutzer einer Software.

Ich weiß, es gibt Projekte, bei denen alles, was kein Source Code-Patch ist, kein willkommenes Feedback darstellt. Und wer weder Lust noch Zeit oder einfach nicht die Kenntnisse dazu hat, einen Patch zu programmieren, der kann solches Feedback eben nicht geben. Das ist nicht schlimm und Entwickler, die ihre Feedbackgeber aus solchen Gründen beleidigen, sind es wohl auch nicht wert, das man sich als Benutzer über sie ärgert. Trotzdem! Die meisten Entwickler sind für Feedback recht dankbar und das zu Recht!

"Slackware will never die"? (Teil 1 und 2)

(R:OK)"Slackware will never die"? - Teil 1

Ich habe mir Gedanken über die Zukunft meiner Lieblingsdistribution gemacht und sehe für ihre Zukunft relativ schwarz. Die Frage ist: Warum Slackware sich ändern muss, um auch in Zukunft noch eine Chance zu haben.
(Date/Datum: 2008-04-16 14:09)

Wir schreiben das Jahr 1993, Patrick Volkerding hat Slackware ins Leben gerufen und auch das Debian Projekt wird in Kürze existieren. Zur damaligen Zeit war man sehr froh über ein einfaches Paketsystem, wie es Slackware bot. Zwar wurde das Paketsystem im Detail auch weiterentwickelt und es existieren auch Zusatztools, die aus dem sehr einfachen Slackware-Paketsystem ein umfangreicheres zu machen versuchen und etwa eine Funktionalität für Auto-Updates der Pakete über das Internet bereitstellen (slapt-get oder auch slackpkg), doch diese müssen erst von Hand nachinstalliert werden.

Hinweis: Zu diesem Posting habe ich noch ein Kontra-Posting veröffentlicht, dass sich weiter unten finden lässt.

Diese Einfachheit des Slackware-Paketsystems ist wirklich eine sehr schöne Sache, doch gemessen an den heutigen Anforderungen (im Besonderen: Abhängigkeiten von Paketen), ist es nicht mehr State-of-the-Art. Natürlich gibt es Anhänger der Slackware-Distribution, die noch immer glauben, dass Slackware niemals untergehen wird (was in gewisser Weise auch der Fall ist, da Slackware andere -- auf ihr basierende -- Distributionen hervorgebracht hat).

Ich möchte noch hinzufügen, dass ich dieses Posting nicht als Slackware-Gegener von mir gebe, sondern als Slackware-Anhänger. Slackware-Linux war mein erstes Linux-System, dass ich je installiert hatte und die Security-Distribution "Hardened Linux", die ich ins Leben rief, basierte auf Slackware (sie bekam allerdings ein eigenes, abwärtskompatibles Paketsystem mit mehr Funktionalitäten). Während der Entwicklung von Hardened-Linux kamen übrigens immer wieder Fehler in den Slackware Paketen zum Vorschein, die durch bessere Package-Build Scripte (ein erster Ansatz war unser MetaBuild Script, das automatisch beim Auftreten von Fehlern den Build-Vorgang abbrach), so wie wir sie einsetzten, hätten vermieden werden können.
Leider ist Slackware allerdings nicht bereit, ein neues Paketsystem zu integrieren, es könnte so einfach und klein wie das von Hardened Linux sein, würde aber doch mehr Features zur Verfügung stellen, ohne, dass es gleich ein riesiges apt sein muss.

Ein solches Paketsystem könnten sicher auch die meisten Ur-Anhänger der Distribution akzeptieren, doch, was auch wichtig ist, es würden sich neue Anhänger mit Slackware anfreunden können. Natürlich, ein Verlust des Freak-Faktors wäre ein relativ sicherer Tod für die Distribution, doch nichts zu tun, und weiterzumachen, wie bisher, das ist ein ebenso sicherer Tod!

Ein weiterer Kritikpunkt ist die Begrenzte Paketauswahl. Zwar gibt es im Netz third Party-Pakete, doch Pakete müssen einfach Bestandteil einer Distribution sein. Ein Befehl sollte genügen, damit ein Paket, samt Abhängigkeiten installiert werden kann. Eine Lösung für die Unterscheidung zwischen "eigenen" und third-Party Paketen kennen etwa Ubuntu-User durch "universe" Packages. Dem Ubuntu-User kann es von der Handhabung der Installation her egal sein, ob ein Paket direkt von den Core-Developern gepflegt wird, oder eben ein Universe-Package ist.

Slackware muss also 1. ein aufgebohrtes Paketsystem liefern, das die Anhänger der Distribution nicht abwirft, und 2. mehr Pakete (etwa GNOME, Evolution, ...) zur Verfügung stellen. Falls dies Patrick Volkerding nicht alleine schafft (das Package-Management eines Distributors ist -- aus eigener Erfahrung kann ich das sagen -- eine sehr umfangreiche Aufgabe!), soll er sich eben mehr Entwickler ins Bot holen!

Slackware will never die -- Teil 2
Slackware ist ein Ur-Gestein, eine Linux-Distribution, die viele Anhänger hat, aber bei der man sich doch fragt, wie lang dies noch so bleiben wird.
(Date/Datum: 2008-05-02 10:47)

In meinem letzten Posting zum Thema Slackware-Linux ging es darum, dass Slackware für die Zukunft relativ schlecht gerüstet ist. Heute werde ich mich darüber auslassen, wie großartig Slackware ist, und warum es eben doch eine Chance für die Zukunft gibt (obgleich diese Chancen größer sein könnten, aber das habe ich ja bereits im ersten Posting erläutert).

Gründe für Slackware
Slackware verwendet im Gegensatz zu vielen anderen Distributionen einen (relativ) naturbelassenen Kernel, ist stabil, sauber und vor allen Dingen simpel: _Alles_ ist _glasklar_ und leicht nachzuvollziehen.

Das Paketsystem ist sehr einfach aufgebaut und durch Shellskripte umgesetzt. Wer ein Paketsystem verstehen lernen möchte, der sollte mit diesem anfangen. Das Paketsystem kennt auch keine Abhängigkeiten, weshalb man in etwa wissen sollte, welche Pakete voneinander abhängen. Diese Einfachheit macht das Paketsystem allerdings äußerst stabil (man wird nie Fehlermeldungen bzgl. nicht erfüllbarer Abhängigkeiten etc. bekommen).

Außerdem ist das BSD-like rc.d-System als Vorzug zu nennen. Für mich persönlich ist Slackware nicht zuletzt durch sein rc.d-System eine Distribution zwischen Linux und BSD (nur eben ohne *BSD-Kernel und Ports).

Warum Slackware eben doch nicht so schnell untergehen wird
Slackware hat viele erfahrene User, die an das System gewöhnt sind und es mögen. Außerdem sind andere Distributionen oft recht komplex aufgebaut und langsam. Möchte man bei solchen Distributionen etwas "von Hand" machen (und das ist schließlich das Tolle an Linux!), muss man sich eventuell erst mit umfassenden Zusatzthemen (etwa Regeln des jeweiligen Paketsystems) auseinandersetzen.

Ever thought about indirect web attacks?

(Date/Datum: 080218-00:55, Hits: 1349) I work since more than one year on the development of a huge commercial website (LAMP) with lot of functionality. Today I developed a communication system which can be used to contact other users, view messages already sent, delete messages and the like (these tasks aren't finished @the moment).

Did you ever thought about the scripts such a big site runs in the background? For example a script that deletes all users messages older than 4 weeks or so to keep the message database small and clean? Such scripts exist and it is maybe very hard to attack them -- and of course: you can only do it indirect -- but this should be possibly.

About writing professional IT books and blogs

(R:OK) 
Within the last months I noticed some important facts about the community of book and blog writers in the area of professional IT related topics. I want to discuss some of them in this posting. I also want to discuss possible ways to increase the quality of online content.

(Date/Datum: 2011-01-07-04:19, Hits: 145)

The first point I want to mention is that professional IT books are becoming boring. The reason for my opinion is as follows: Since about 1999 I write articles and texts about IT security as well as about Linux/Unix operating systems and since 2003 I write books about it. Within the last years I saw so many books that just cover the same topic again and again. This is boring since most books only provide small changes to prior books. Of course, I could, for example, write a book about the Slackware Linux distribution or something like that and maybe I would find a publisher for such a book but there are already so many books available about that topic and it would be very boring to write a third Linux book! What are the reasons for people to still write about these topics? There are some reasons:

The first reason is that it is easy to write about these topics because they are easy to learn (there are already many books available a potential author can learn from). The second reason is to become popular. Combined with the first reason, this means that this is an easy way to become popular. The third reason is maybe that an author can earn lots of money by writing such a book but this is not correct since there are too many competitors on the market and there are new books about the same professional IT topics every month.

The second point I want to mention is that blogs cover the more interesting up-to-date topics. Blog postings cover current topics and can change daily, and books usually cover long-time topics. While it can take only a few minutes to write a good blog posting, it takes months or even years to write or even just to update a book. I do not remember a case where, after finishing a manuscript, a book was published in less than tree months after that. This probably sound evil but it actually is a good thing since this long time is spend to improve the quality of a book's content. I think the quality of a average book is at least as good as the quality of very good blog postings.

Like mentioned before, blogs can cover up-to-date topics that books can only cover in some cases. This sounds good but it is a fact that not every blog does that. Most of the blogs cover basics problems that were already published and discussed in countless other blogs as well as in all books that cover the particular topic. These blog postings do not even add any additional information to what we already know since years. For instance, I don't know how many blog postings I noticed about basic Linux operating system commands like 'ls' or 'du' within the last years. People write these postings to become a little bit popular (what is eligible, because this is how people can get motivated in society and, of course, everybody wants that!) but it would be much better to link other blogs or link textbooks or to improve existing Wikipedia entries. Every blog entry can contain errors and many blog postings can contain numerous errors. If more people would focus on fewer texts and would cooperate in writing them and fixing them, we would have fewer but better blog postings, Wikipedia entries and fewer redundancy. A similar approach is already done in scientific writing as many publications have quite many cooperating authors and scientific publications make clear what was already done by citing previous work.

Back to the topic of non-scientific, i.e. professional IT books and blogs. The above-mentioned concept sounds good and it is what we need but it will not work since there are problems that occur when applying it: The first problem is that, if one person edits Wikipedia, nearly nobody will notice that because his/her Nickname (usually not even a real name) will occur in the changelog entry only. Ergo, Wikipedia does not increase popularity of a single person. We can be more than happy, that Wikipedia works nevertheless. But I expect not many blog authors to write for Wikiedia.

The second problem is the design of the commercial Internet: If a person adds content to his own website, it can display commercial ads (e.g. using Google AdSense) on the website and can earn money. This does not work, if a person contributes to Wikipedia (= no money for the person) or, if the person links other websites about the topic (=the OTHER website owner will probably earn more money (if they display Ads) but the person that linked the website will earn nothing).

OpenSource-Geschichte

(R:OK)
Heute habe ich für die nächste Auflage (erscheint nicht vor 2009/2010!) von unserem Buch 'Linux. Das distributionsunabhängige Handbuch' das Kapitel zur Geschichte von Linux und OpenSource erweitert.

(Date/Datum: 080728-18:27, Hits: 1157)

Wichtige Details sind hinzugekommen (etwa die Gründe, die Richard Stallman (Blog) dazu bewogen haben, das GNU-Projekt zu gründen oder die Tatsache, das es Bootdisks und Rootdisks gab, die quasi als Schritt zwischen reinem Kernelquellcode und dem Softlanding Linux System (SLS), also quasi der ersten Linux-Distribution, zu betrachten sind).


Zu Richard Stallmans Gründen, das GNU-Projekt zu gründen: Stallman ja zunächst am Labor für künstliche Intelligenz am MIT beschäftigt. Das Ganze hat sich dann nach und nach aufgelößt (soweit ich weiß wurden die einzelnen Mitarbeiter in Firmen tätig, aber genaue Gründe sind mir nicht bekannt, weshalb ich hier auch im Buch nicht ins Detail ging, denn etwas Falsches möchte ich nicht schreiben). Stallman vermißte die Hacking-like Atmosphäre am MIT und erhielt diese erst im Rahmen seines GNU-Projekt wieder. Ein anderer Grund zur Gründung des GNU-Projekts war, dass damals mehr und mehr Code binär vertrieben wurde (das bestätigen zumindest zwei Bücher und Wikipedia) und Stallman quelloffene Software weiter existent haben wollte (und Ziel des GNU-Projekts ist es ja nunmal, dass ein freies Betriebssystem entsteht). Daher gibt es auch die von Stallman vorgeschlagene Bezeichnung 'GNU/Linux' (aber das ist bereits in der aktuellen Auflage erklärt).

Zu Boot/Rootdisks: Linus Torvalds (also der Mann, der Linux zunächst alleine entwickelt hatte), fing an, Images von Boot- und Rootkdisks auf den FTP-Server zu laden, auf dem auch die Kernelimages lagen. Der Grund dafür ist, dass nicht jeder Anwender wusste, wie man seinen eigenen Kernel kompiliert, dann bootet und Software für dieses System baut (klar!, kann heute auch kaum jemand!). Die Boot/Rootdisks haben diese Situation etwas erleichtert. Zunächst wurde die Bootdisks in den Rechner eingelegt und der Rechner neu gestartet.
Die Bootdisk beinhaltete den Linux-Kernel, der dann geladen wurde. Nachdem der Kernel-Bootvorgang abgeschlossen war, musste man dann die Rootdisk einlegen, sie enthielt verschiedene Grundprogramme, mit denen man dann bereits arbeiten konnte. So wurde Linux schließlich einer viel höheren Zahl an Anwendern zugänglich. Der nächste Schritt, den man in Richtung Benutzerfreundlichkeit unternahm, war dann das SLS (s. oben), das die erste Linux-Distribution darstellte. Linux-Distributionen beinhalten bereits den Linux-Kern sowie diverse Benutzersoftware und eine Installationsroutine. Später hat Patrick Volkerding dann die heute älteste noch bestehende Linux-Distribution "Slackware-Linux" gegründet. Slackware-User mussten (das habe ich selbst noch in Erinnerung) noch viele Jahre die Images der Boot- und Rootdisks auf Disketten schreiben. Allerdings gab es eine ganze Reihe verschiedener vordefinierter Bootdisks zur Auswahl (etwa eine mit IDE-Treibern, eine mit einer gewissen Anzahl von SCSI-Treibern usw.).

Tutorial: canto: Ein Feedreader für die Konsole

(R:OK)
Heute habe ich Canto ausprobiert -- einen RSS-Reader für die Konsole. Hier eine Kurzanleitung und Kritik.
(Date/Datum: 2010-12-29-05:41, Hits: 174)

Canto kann über HTTP und HTTPs auf RSS- und ATOM-Feeds zugreifen und unterstützt Unicode. Programmiert wurde Canto in Python und benutzt eine NCurses-Oberfläche.

Canto

Die Einrichtung von Canto ist einfach: Nach erstmaligem Starten wird das Verzeichnis ~/.canto angelegt, in dem vom nun an alle wichtigen Dateien abgelegt werden. Außerdem wird eine Beispielkonfigurationsdatei (~/.canto/conf.py.example) erstellt. Beenden kann man Canto mit der Taste q.

Nach dem ersten Start erstellt man sich eine eigene Konfigurationsdatei indem man ~/.canto/conf.py anlegt. In diese Datei trägt man alle Newsfeeds ein, die Canto abrufen soll. Für jeden Feed muss die Feed-URL der add-Funktion übergeben werden:

add("http://www.wendzel.de/rss.php")
add("http://linuxbuch.blogspot.com/feeds/posts/default")

Mit dem Tool canto-fetch werden alle Feeds abgerufen (canto-fetch sollte man einfach periodisch als Cronjob starten). Die News können dann mit canto betrachtet werden.

Ausgewählte Artikel können über die Leertaste angezeigt werden. Mit den Pfeiltasten (Links/Rechts) kann ein Artikel als gelesen/ungelesen selektiert werden (weitere Tastenbelegungen stehen in der Manpage und können über die Konfigurationsdatei angepasst werden).

Um festzulegen, welche Programme zum Öffnen von Weblinks und Bildern gestartet werden sollen, werden folgende Konfigurationszeilen benötigt:

link_handler("firefox \"%u\"")
image_handler("fbv \"%u\"", text=True, fetch=True)


Möchte man auf der (leider recht unübersichtlichen Oberfläche) nicht völlig die Übersicht verlieren, so können über filters=[show_unread] die bereits gelesenen Artikel ausgeblendet werden.

Fazit: Da ich ca. 50 Newsfeeds im Abo verfolge, ist mir Canto ganz einfach zu unübersichtlich. Von Mozilla Thunderbird her bin ich gewohnt, Unterordner für die Kategorisierung meiner Feeds anzulegen und darauf möchte ich nicht verzichten. Das Scrollen dauert ebenfalls ewig.
____________

gedit-autocomplete: Auto-Vervollständigung für Quellcode in gedit

(R:OK)
Heute habe ich nach einem gedit-Plugin umgesehen, mit dem ich in Quellcodes eine Autovervollständigung erreichen kann. Ich wurde tatsächlich fündig.
(Date/Datum: 2010-11-09-20:40, Hits: 290)

Das autocompletition-Plugin für gedit gibt es hier. Geschrieben ist das Plugin in Python. Nach dem Download muss das install-Skript ausführbar gemacht werden, danach selbiges ausführen, in gedit das Plugin aktivieren, fertig! Leider scheint autocompletition einfach alles zu scannen, was es in den Source-Files finden kann (also auch Kommentare), was zu Nebeneffekten führen kann, wie ich sie hier im Screenshot festgehalten habe:

nagaozen-gedit-plugin-autocomplete picture

Diese nachteilige Funktionsweise hat allerdings den positiven Nebeneffekt, dass auch *alle* Programmiersprachen unterstützt werden.

autocompletition kann so konfiguriert werden, dass es entweder nur für eine Datei (local) funktioniert, oder aber, dass es alle geöffneten Dateien nach Inhalten durchsucht (global).

Mail/NNTP/RSS/Adressen-Synchronisierung mit Thunderbird und Unison unter Linux (Ubuntu)

(R:OK)
Heute habe ich mich den halben Tag lang damit befasst, wie ich es nur schaffen kann, auf eine elegante Weise, meine Mailpostfächer zwischen zwei Linux-Systemen zu synchronisieren. Dazu ein Bericht.
(Date/Datum: 2010-03-20-00:58, Hits: 828)

Ausgangssituation:
Die letzten circa zehn Jahre habe ich fast ausschließlich das Mailprogramm Sylpheed benutzt, das ich sehr schätze. Sylpheed läuft auf meinem Notebook und auf meiner Workstation getrennt, und damit auch mit getrennten und zugleich unvereinbaren Mailbeständen der letzten Jahre. Beide Systeme laufen mit der gleichen Ubuntu-Version. Sylpheed verfügt zudem über keinerlei Plugins zum Synchronisieren. Beide Systeme verfügen über getrennte ToDo-Listen, die ich mit gtodo seit einigen Jahren führe. Außerdem gibt es auf beiden Systemen einen RSS-Reader (liferea). Die Dateien der Tools gtodo und liferea synchronisiere ich hin und wieder mit Unison.

Verschiedene Ansätze:
Zunächst hatte ich Evolution auf beiden Systemen ausprobiert (damit hoffte ich, auch meine Termine und ToDo-Listen synchronisieren zu können). Das Synchronisieren mit opensync via MultiSync und Unison hat nie korrekt geklappt und ist zudem umständlich.

Der nächste Ansatz bestand darin, claws-mail (ein auf Sylpheed basierendes Mailprogramm) zu verwenden. Es verfügt zwar nur über ein WindowsCE-Sync-Plugin, jedoch wollte ich es mit Unison synchronisieren. Claws-Mail ist in der Lage, alle Einstellungen und Mails von Sylpheed zu importieren. Selbst meine umfangreichen Filter-Regeln wurden übernommen. Auf diese Weise konnte ich neue Mailbestände für claws-mail anlegen und würde die alten behalten können. Leider stellte sich heraus, dass beim Synchronisieren mit Unison zwar Accounts, Folder und Einstellungen übernommen wurden, die Folder waren jedoch leer und somit waren alle lokal gespeicherten Mails nicht zu sehen.

KDE-PIM ist zwar äußerst ausgereift, dennoch wollte ich es nicht ausprobieren, da ich wegen der Performance meines alten Rechners nicht mit KDE-4.x arbeite. Einen Kurztest mit opensync gab es dennoch, und der war leider ebenfalls enttäuschend.

Lösung: Als fast perfekte Lösung (und bei mir auch erst seit einigen Stunden im Einsatz) hat sich Mozilla-Thunderbird (Version 2.0.x) in Kombination mit Unison und dem Thunderbird-Plugin ReminderFox herausgestellt.

Dazu habe ich auf beiden Rechnern Thunderbird eingerichtet (mit einigen Zusatzpaketen, die mir gefielen):

$ sudo aptitude install thunderbird thunderbird-gnome-support thunderbird-locale-de thunderbird-traybiff

Anschließend habe ich auf einem der Rechner Thunderbird konfiguriert. Dazu habe ich zunächst alle Mailaccounts und NNTP-Accounts eingerichtet. Es folgte ein RSS-Account für all meine RSS-Abos. Mit der Möglichkeit, Folder innerhalb von anderen Foldern zu erstellen, ließ sich auf diese Weise auch gleich eine vernünftige Hierarchie in meinen Feed-Abo-Baum integrieren, wie das folgende Bild zeigt:

Thunderbird RSS Hierachie

Anschließend habe ich das Plugin ReminderFox (s. auch hier) installiert, mit dem ich Termine und zu erledigende Aufgaben verwalten kann. Zu finden ist das Plugin nach der Aktivierung rechts unten in Thunderbird.

Um das Adressbuch zu importieren (ich hatte zum Glück noch die Daten von Evolution), exportierte ich die Evolution-Daten zunächst in CSV-Form, was Thunderbird allerdings nicht korrekt einlesen konnte! Ein Umweg führte über den VCARD-Export von Evolution:

$ evolution-addressbook-export --format=vcard > adbuch.vcard

Diese Daten habe ich anschließend mit KAdressbook, das ich dazu extra installieren musste, importiert und anschließend in das LDIF-Format übertragen. Das LDIF-Format wiederum ließ sich von Thunderbird fehlerfrei importieren.

Die eigentliche Synchronisation lasse ich Unison erledigen (dazu muss das Verzeichnis $HOME/.mozilla-thunderbird verwendet werden). Am einfachsten geht das über die grafische Oberfläche unison-gtk. Mehrere Tests übernahmen alle Konfigurationsänderungen sowie Änderungen an den Mailbeständen völlig problemlos!

Fast perfekt? Ja, hier die Probleme:
1. Ich benutze den NNTP-Server der FernUni Hagen, für den eine Authentifizierung notwendig ist. Thunderbird fragt mich leider immer wieder nach dem Benutzernamen und dem Passwort für den Account, obwohl ich diese Daten speichern lasse. Nachtrag: Auch für meine POP3-Accounts musste ich nun schon diverse Passwörter mehrfach eingeben. Bisher habe ich keine Ahnung, woran es liegt. Nachtrag: Problem gelöst durch Löschen der Passworteinträge in den Einstellungen und erneute Eingabe (erst danach wurden die neuen Passwort-Werte wirklich akzeptiert, muss wohl ein Bug sein ...).

Sicherheitshalber habe ich noch die Darstellung von HTML-Mails deaktiviert und ein Masterpasswort für meine Passwörter vergeben, das ich bei jedem Thunderbird-Start eingeben muss. Thunderbird kann mit Spamfiltern und AV-Programmen zusammenarbeiten -- diese Features nutze ich jedoch derzeit nicht. Außerdem versucht Thunderbird anscheinend automatisch Phishing-Angriffe zu erkennen.

2. Filterregeln lassen sich in Thunderbird *anscheinend* (zumindest in meiner 2.0.x-Version) nur für einzelne Accounts anlegen, sodass ich Regeln nicht accountübergreifend verwenden kann.

Fazit
Thunderbird hat sich zumindest *bisher* (es ist erst seit einigen Stunden bei mir im Einsatz) als insgesamt gute Lösung für meine Anforderungen erwiesen. Großartig ist, dass ich mit einem Unison-Aufruf nun Adressbuch, Mails, RSS-Feeds, Termine und Aufgabenliste synchronisieren kann.

Nachtrag:
Ich arbeite nun seit längerer Zeit mit Thunderbird und bin nach wie vor sehr zufrieden. Auch durch vielfaches Synchronisieren ergaben sich bisher keine Probleme.

Grundlegendes zur Linux-Sicherheit für Otto Normalverbraucher

(R:OK)
Dieses FAQ enthält typische Fragen zum Thema Linux-Sicherheit, die mir oft gestellt werden. Ich habe versucht, die Fragen zwar fachlich korrekt, aber so kurz, wie es mir möglich erschien, zu beantworten. Sollten weitere Fragen auftauchen, können diese über die Kommentarfunktion gestellt werden.
(Date/Datum: 2010-03-09-22:32, Hits: 829)

Frage: Ich benötige keinen Virenscanner/keine Firewall unter Linux, stimmt das?
Kürzest mögliche Fach-Antwort: Ein Virenscanner schadet theoretisch niemals. Jedes Betriebssystem kann von Viren befallen werden, auch wenn für Linux wesentlich weniger Viren existieren als für Windows (das hängt u.A. mit dem Verbreitungsgrad von Windows zusammen), kann Ihr Linux-Rechner von Viren befallen werden. Virenscanner für Linux gibt es so direkt nicht für den Desktop, sondern eher für Mailserver, wobei sie dann hauptsächlich Windows-Viren filtern, die Ihrem Linux-System nicht schaden.
Linux bringt eine Firewall mit, die aber nicht mit einer typischen Windows-Desktopfirewall gleichzusetzen ist. Um die Beantwortung kurz zu halten: Eine Firewall müssen Sie in den meisten Fällen genauso wenig installieren (denn dazu müssten Sie sich zunächst intensiv mit TCP/IP-Protokollen und deren Sicherheit befassen), wie einen Virenscanner. Stellen Sie nicht benötigte Netzwerkdienste lieber gleich ab und benutzen Sie Ihr Linux-System auf Sicherheit bedacht (lesen Sie dazu bitte auch die folgenden Fragen).

Frage: Kann ich mit Linux sicher im Internet surfen?
Kürzest mögliche Fach-Antwort: Web-Browser sind mittlerweile enorm komplex. Solch komplexe Software ist niemals frei von Bugs (und damit auch nicht frei von Sicherheitslöchern). Ob Sie bspw. den Firefox-Browser nun unter Windows oder unter Linux nutzen – wenn Sie sich auf nicht sonderlich vertrauenswürdigen Seiten die Zeit vertreiben, sind sie schnell in Gefahr (Linux, wie auch jedes andere Betriebssystem, hat nicht den Zweck, Sie vor Phishing-Angriffen und Co. zu schützen). Auch ändert ein normales Betriebssystem nichts daran, ob Sie nur verschlüsselte Webverbindungen nutzen und ob ein Angreifer „irgendwo im Internet“ Ihre Daten (etwa Passwörter) mitlesen kann. Das alles liegt auch in Ihrer eigenen Verantwortung.

Frage: Es darf nur kein Mensch „root“-Zugriff auf mein Linux-System bekommen, richtig?
Kurze Antwort: Es genügt einem Angreifer meist die Zugriffsmöglichkeit auf Ihren Benutzeraccount, um an alle Ihre privaten Daten (E-Mails, Text-Dokumente, Fotos, gespeicherte Passwörter, ...) zu kommen. Dazu ist kein Administrator-Zugriff (also root-Zugriff) notwendig. Das ist keine Schwachstelle von Linux, sondern in jedem handelsüblichen Betriebssystem eine Notwendigkeit.

Frage: Wenn ich eine Linux-Distribution benutze, dann bin ich doch sicherer, als mit Windows?
Eine fachlich korrekte Antwort minimaler Länge: Linux wird frei und offen entwickelt, daher ist es eher unwahrscheinlich, dass geheime Hintertüren (etwa von einem Geheimdienst oder einer anderen Organisation) in einem Linux-System enthalten sind (das gilt zumindest für die am meisten überwachten Projekte wie den Linux-Kernel an sich oder die Standard-Linux-Programme und -Bibliotheken). Auch die Standardabsicherung von Linux-Systemen ist sehr hoch. Eine hohe Standardabsicherung haben auch andere Betriebssysteme wie OpenBSD, FreeBSD und mittlerweile sogar Windows. Letztlich hängt die Sicherheit eines Systems aber zum Großteil an dessen Benutzer. Wenn Sie unter Linux irgendwelche Programme aus dem Internet herunterladen und installieren oder jede noch so wenig vertrauenswürdige Webseite besuchen, sind Sie kaum sicherer unterwegs, als mit jedem anderen Betriebssystem. Es liegt in Ihrer Verantwortung, sich mit dem Thema Sicherheit zu befassen und sich um die Sicherheit Ihres Computers zu kümmern. Ihre Autoreifen fahren Sie ja schließlich auch nicht ohne Profil und Ihre Haustür schließen Sie wahrscheinlich ebenfalls ab.

Frage: Muss ich unter Linux Backups anlegen?
Kurze Antwort: Ja, auch Linux kann Sie nicht davor bewahren, Ihr System zu zerschießen oder das eine Festplatte ausfällt

Frage: Warum ist Linux dann so toll?
Kurze Antwort: Ich persönlich halte Linux für insgesamt deutlich sicherer als die meisten anderen Betriebssysteme. Doch (und das wollte ich mit diesem Blogposting vermitteln), hängt die Sicherheit zum Großteil am Benutzer. Wenn Sie ein nur vier Zeichen langes Passwort wählen, Ihre Festplatte nicht verschlüsseln, obwohl es mit Linux schon während der Installation per Mausklick ermöglicht wird, usw., dann kommen diese ausgereiften Sicherheitsfeatures nicht zum tragen (ich sage es lieber dazu, um Missverständnisse zu vermeiden: Das ist bei Windows natürlich nicht anders, auch dort müssen Sie solche Features explizit nutzen, jedoch sind sie unter Linux vertrauenswürdiger). Nutzen Sie also solche Eigenschaften von Linux!
Linux wird zudem offen und frei entwickelt, beinhaltet nicht diverse grundlegende Einschränkungen, die Windows mit sich bringt (siehe hier hier und hier).

Frage: Warum ist freie Software aber so gut?
Fachliches Nachwort: Linux bietet äußerst ausgereifte Sicherheitskonzepte, etwa verschiedene Benutzerarten, Access Control Lists, kernelseitigen Speicherschutz (ASLR), compilerseitigen Schutz (gcc SSP), eine hervorragende Firewall, Distributionen mit sicheren Standardkonfigurationen und ständigen Sicherheitsupdates, Festplatten- und Auslagerungsspeicher-Verschlüsselung, diverse weitere kryptografische Programme (etwa zur Mailverschlüsselung und -Signatur oder zur Bildung virtueller privater Netzwerke), ausgefeilte Backup- und Monitoring-Software uvm. Windows bietet mittlerweile ebenfalls viele dieser Features. Sie können Linux aus Überzeugung nutzen und es ist meiner persönlichen Meinung nach deutlich vertrauenswürdiger (und weniger einschränkend), als eine propritäre Software, aber für Ihre Sicherheit sind Sie weitestgehend selbst verantwortlich. Denken Sie daran: Ein System kann zwar das Denken für Sie hier und da übernehmen, MUSS sie aber dann jeweils in Ihrer Entscheidungsfreiheit eingrenzen, sie also im gewissen Umfang entmündigen. Ich schließe mit Immanuel Kant: Habe Mut, dich deines eigenen Verstandes zu bedienen!Einstieg in LinuxLinux. Das umfassende Handbuch
Weiterführende Literatur
Unser Linux-Handbuch (das Sie hier online gratis lesen können) beinhaltet ein Kapitel zur Linux-Sicherheit.
Mehr Grundlegendes zu Linux gibt es in unserem Einsteigerbuch Einstieg in Linux.
Weitere Fragen
Weitere Fragen können Sie gern über die Kommentarfunktion stellen.

Wie Sylpheed seine Versionsnummer auf Aktualität prüft

... wollte ich mit einem Sniffer herausfinden, was natürlich kein Problem war. Es passiert folgendes:

$ telnet 202.32.10.40 80
Trying 202.32.10.40...
Connected to 202.32.10.40.
Escape character is '^]'.
GET /version.txt? HTTP/1.1
Host: sylpheed.sraoss.jp
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 29 Jan 2010 07:44:55 GMT
Server: Apache
Last-Modified: Fri, 15 Jan 2010 02:28:17 GMT
ETag: "e7801c-20-47d2ac1997240"
Accept-Ranges: bytes
Content-Length: 32
Content-Type: text/plain

RELEASE=2.7.1
DEVEL=3.0.0.beta6

In welchem Geschäft kann ich Hardware kaufen, die unter Linux läuft?

Unter Linux Users Welcome findet sich von nun an eine neue Webseite. Sie enthält eine Liste mit Geschäften, die es Linux-Usern leichter machen, passende Hardware für ihr Betriebssystem zu finden.

Die Projektidee von Christian Beuschel wurde im UbunuUsers-Forum vorgestellt. Dort finden sich generell weitere Informationen zur Idee.

Schwedische/Spanische Buchstaben/Sonderzeichen unter Linux

(R:OK)
Eine Kurzzusammenfassung, wie man spanische und schwedische Buchstaben unter Linux in seine Texte bekommt.
(Date/Datum: 2009-04-06-16:29, Hits: 1593) ... und zwar mit einer deutschen Tastaturbelegung ...

1. Spanische Zeichen mit Akzent (é, ó, í etc.)
Erst ` und anschließend das jeweilige Zeichen drücken.

2. Spanisches ñ
Erst ~ (Tilde, AltGr und '+'), dann n drücken.

3. Spanisches ¡ und ¿
AltGr + Shift + ! (bzw. + ?) drücken.

4. Schwedisches å (Kringel-a)
Für ein å sind eigentlich zwei getrennte Aktionen nötig. Zunächst muss AltGr+Shift+ü gedrückt werden. Und anschließend a für ein kleines å bzw. Shift+A für ein großes Å.

Weitere Grundlagen zu Linux  gibt es in unserem Buch Einstieg in Linux.

Shellskript Programmierung - Teil 7 (Variablen mit der Tastatur einlesen)

Es ist mal wieder Zeit für einen neuen Teil meines Tutorials zur Shellskript-Programmierung. Dieses Mal gibt es sogar ein kleines Detail, dass erst in der 3. Auflage von 'Linux. Das distributionsunabhängige Handbuch' enthalten sein wird. Also ein Vorgriff.

(Date/Datum: 2009-02-08-01:05, Hits: 2445)

Was Variablen sind, und wie man ihnen Werte direkt zuweisen kann, dass habe ich ja bereits in den vorherigen Teilen des Tutorials erklärt. Wie aber kann man Werte von der Tastatur einlesen (bspw. damit ein Benutzer seinen Namen oder ein Passwort eingeben kann)? Die Lösung ist einfach:

Zum Einlesen von Werten wird das Kommando read verwendet. read übergibt man als Parameter den Namen einer Variablen (aber ohne $-Zeichen). Anschließend kann man auf den Wert zugreifen. Hier ein kleines Beispiel zum Einlesen eines Namens:

$ read name
Steffen Wendzel # das ist die Eingabe des Benutzers
$ echo $name
Steffen Wendzel

Wie man sieht, wird die Eingabe des Benutzers angezeigt, was etwa bei Passwörtern nicht sicher ist. Je nach verwendeter Shell sollte read den Parameter '-s' unterstützten, der die Ausgabe der eingegebenen Zeichen auf dem Terminal unterdrückt. Mit diesem können dann auch "unsichtbare" Eingaben getätigt werden:

$ read -s name
(unsichtbare Eingabe)
$ echo $name
Steffen Wendzel

Soll nun noch ein schöner Eingabetext ausgegeben werden, was mit echo ja kein Problem ist, kann man auch noch verhindern, dass die Eingabe von Passwörtern und Benutzernamen in einer neuen Zeile angezeigt wird. Einige echo-Implementierungen kennen zu diesem Zweck den Parameter '-n', der nach der Ausgabe des Textes kein Zeilenende (also kein Newline-Zeichen (\n)) ausgibt.

$ echo -n "Benutzername: "; read name
Benutzername: sw
$ echo $name
sw

Was aber, wenn man nur ein Zeichen einlesen möchte und der Benutzer nicht die Return-Taste drücken müssen soll? Dazu kann der read-Parameter '-n [Anzahl Zeichen]' verwendet werden.

read -s -n 1 befehlszeichen
echo "Es wurde das Zeichen $befehlszeichen eingegeben"

-----------

Änderungen:

  • 18. Feb. 2009: '-s'-Parameter fehlte bei read-Aufruf für die unsichtbare Eingabe eines Wertes.

Wer braucht schon Datenschutz im Web?

Letzte Woche feierte das Allgäu-Forum in Kempten (ein großer Konsumtempel mit vielen Geschäften darin) fünfjähriges Bestehen. Natürlich gab es etwas zu gewinnen (ein Auto). Um eine Chance auf einen solchen Gewinn zu haben, muss man lediglich seine Adressdaten (man spricht juristisch gesehen von "personenbezogenen Daten") in eine Lostrommel werfen und ein paar Kreuzchen machen.

(Date/Datum: 2008-10-14-23:16, Hits: 1376) Aus meiner Sicht war es schockierend, zu sehen, wie dermaßen voll die transparente Lostrommel war. Bei solchen Gewinnspielen gibt man praktisch immer die Zustimmung zur Weiterverwendung der persönlichen Daten und in der Lostrommel lagen hunderte oder gar tausende Zettel. Dazu ist anzumerken: Adressdaten sind pures Geld wert und Adresshandel ist durchaus luktrativ. Es ist folglich anzunehmen, dass die Adressdaten (wie es so üblich ist) weiterverkauft werden, um den Wert des verlosten Objekts (=Auto) gegenzufinanzieren. Ist man schlau, druckt man in das Kleingedruckte noch hinein, dass der Gewinn auch in anderen Kaufhäusern etc. gewonnen werden kann (dadurch sinkt natürlich die Gewinnchance einer Einzelperson). So erhält man entsprechend viele Adressdaten und hat am Ende einen höheren Datenwert, als das eigentliche Auto kostet (=Optimalfall für den Verloser). Ob das Allgäu-Forum auch so handelt, weiß ich nicht, und es ist an dieser Stelle auch nicht von Belang.

Wichtig ist vielmehr, dass bei solchen Aktionen die Daten von Leuten gesammelt werden, die nicht auf Datenschutz achten. Diesen Menschen kann man also evtl. durch Telefonanrufe noch weitere Daten entlocken und ganz andere Produkte verkaufen. Wer seine Daten abgibt, der muss ganz klar damit rechnen, in Zukunft mehr Webepost in Papierform und in elektonischer Form zu erhalten.

Damit soetwas nicht passiert, sollte meiner Meinung nach bereits in Schulen Datenschutzaufklärung durchgeführt werden! Und auch im Rest der Bevölkerung sollte sich damit auseinandersetzen. Alles, was wir jetzt versäumen, zahlen wir schließlich später! Das Desinteresse an diesem Thema ist zwar groß (es ist für die meisten Menschen sicher nicht so spannend, wie für mich), aber das heißt nicht, dass es nicht wichtig ist.

Um noch ein zweites, die Wichtigkeit des Datenschutzes verdeutlichendes, Beispiel zu geben: Es gibt unzählige soziale Netzwerke im Internet. Dort gibt man allerlei Informationen an, die man gar nicht angeben hätte müssen. Doch um das eigene, langweilige Profil zu gestallten, läd man Fotos ins Netz, die einen im betrunkenen Zustand zeigen, subscribed sich in Benutzergruppen mit dämlichen Namen usw. usf. Arbeitgeber besuchen schon LÄNGST Webseiten wie Studivz und schauen sich ihre zukünftigen Arbeitgeber dort an. Man kann sein Profil für die Öffentlichkeit zwar oftmals sperren, aber diese Funktion wird nicht oft genug (soll heißen: nicht immer) benutzt.

Ein anderes soziales Netzwerk stellt bereits Familienbeziehungen her. Dort kann man beispielsweise sehen: X ist Opa von Y. Denkt man etwas weiter, dann führt X vielleicht ein Weblog über seine Diabetis-Hilfsmittel/-Erfahrungen. Ein Versicherer/Arbeitgeber/Angreifer kann dann sagen: Wenn X an Diabetis leidet, dann leidet vielleicht auch in einigen Jahrzehnten Y daran. Das ist kein Spaß, das ist ernst! Apropos: Bruce Schneier schrieb in seinem Buch 'Secrets and Lies' bereits vor einigen Jahren, wie günstig (nur wenige Hundert Pfund) eine Krankenakte in GB ist. Ich hoffe, das verdeutlicht, dass meine Formulierungen keineswegs übertrieben sind. Es fehlt meist nur das Bewußtsein dafür, das Thema ernst zu nehmen -- schließlich merkt man (noch) nicht, was mit den eigenen Daten passiert. Wenn man aber auf einmal keine preiswerte Krankenversicherung mehr bekommt oder eine Stelle nicht bekommt (oder gar verliert), dann wird man es schmerzlich erfahren und sich sicher ärgern, dass man sich nicht zuvor mit dem Thema Datenschutz beschäftigt hatte.

Natürlich sind auch ganz anderes Aspekte des Themas wichtig (etwa Absicherung vor Angriffen in Netzwerken, wie Johannes und ich in unserem Praxisbuch Netzwerksicherheit beschrieben hatten), aber genug der Eigenwerbung -- das Buch von Schneier ist für Leihen allemal sehr interessant. Der Autor führt auch einen interessanten Blog zum Thema IT-Sicherheit.

PS. Auch das Risks Magazine (ebenfalls englischsprachig) ist auch zu empfehlen und erschien vorhin in einer neuen Ausgabe.

Warum in PHP programmieren?

Immer wieder höre ich Gründe, die gegen PHP sprechen (schlechte Performance, viele Sicherheitslücken), heute möchte ich mal kurz darlegen, warum ich hier auf wendzel.de und im Unternehmen PHP einsetze.

(Date/Datum: 080827-01:23, Hits: 1334)

PHP ist eine enorm einfach zu erlernende Programmiersprache, die genau aufs Web ausgelegt ist. Mit Perl/Mason kann man zwar ähnliche Features bekommen, aber PHP läuft überall, ist extrem einfach zu lernen und einzurichten.

Das bedeutet, dass man als Unternehmer auch sehr einfach an PHP-Entwickler kommt, wenn man welche benötigt (bisher war das bei uns noch nicht nötig, aber ich bin mal optimistisch ...). Natürlich muss man die Webseiten, die man mit PHP programmiert auch aufwändig absichern, aber das ist bei jeder Sprache fürs Web der Fall User-Input ist nunmal immer gefährlich. Hier muss man allerdings zwischen der Skript-Sicherheit und der Sicherheit des PHP-Interpreters und/oder mod_php unterscheiden. In den letzteren wurden ganz klar bereits einige Lücken entdeckt und auch ich betreibe PHP nur mit Suhosin-Patch. Ich hoffe, dass in PHP nur so viele Patches gefunden werden, weil diese Sprache einfach mehr Leute für die Web-Entwicklung einsetzen, aber vielleicht ist es in dieser Hinsicht wirklich verbugter.

Bezüglich der Performance bin ich auf meinen Mini- und Medium-Size-Seiten bisher zufrieden. Die performancekritischste Stelle war bei mir/uns bisher immer die Datenbank und weniger die Programmiersprache. Vielleicht ist PHP auf Systemen mit sehr hoher Auslastung oder besonders aufwändigen Skripten eine wirkliche Katastrophe -- kann sein, aber bisher bin ich nicht in solche Bereiche vorgedrungen und 95% der Webentwickler kommen wohl auch nicht in diese Situation.

Klar sagt das Hacker-Ego jetzt soetwas wie "PHP kann jeder, ich mach nur Perl!", aber das ist bescheuert. Wenn man eine wirklich performancekritische Komponente im PHP-Skript hätte, dann könnte man ja immernoch -- etwa via SVR4-IPC -- auf einen C-Prozess weiterleiten oder enorm performancekritische Komponenten in C mit FastCGI hacken. Admin-Oberflächen und wohl die meisten anderen Komponenten, die eben nicht so enorm frequentiert werden, gehen aber sicher auch mit PHP nicht unter.

Ein anderer wichtiger Punkt ist die gesparte Entwicklungszeit. PHP ist eben nicht nur enorm einfach, nein, es senkt auch die Entwicklungszeit. PHP Code zu fabrizieren, der die 0-8-15-Internet-Aufgabe-X erledigt, geht meist rucki-zucki. Und miesen Code kann man ja definitiv in jeder Sprache hacken.

Vorteile freier Software am Beispiel von Linux

Dieses Posting ist für Jedermann. Wenn man es gewohnt ist, mit freier Software zu arbeiten, dann merkt man manchmal gar nicht, wie groß die Vorteile derselben sind, bis man wieder mit kommerzieller Software in Kontakt kommt. Heute ein Posting zur Erinnerung an Vorteile freier Software aus einer Sicht, wie sie ein normaler PC-Anwender hätte.

(Date/Datum: 080812-14:27, Hits: 3710) Ich werde mich kurzfassen um langweilige Ausführungen zu vermeiden (es wird eh genug Text geben), dieses Posting richtet sich vorallendingen an den normalen Windowsbenutzer und stellt freie Software über dessen Vorteile vor. Natürlich gibt es auch Nachteile (manchmal fehlender Support, wobei es ja für wichtige Software auch kommerziellen Support gibt), aber diese sind meines Erachtens nach nicht sonderlich groß (besonders nicht für Privatanwender).
1. Vorteil: Kosten werden gespart. Auf dieses Postingthema bin ich gekommen, da ich heute den Ubuntu-Linux-Rechner meiner Eltern auf die aktuelle Version update. Man kann sich dies Vorstellen wie ein Update von Windows XP auf Windows Vista. Nur mit einem entscheidenen Unterschied: Es kostet nichts! Man hat sich also analog das Geld für Windows Vista gespart? Ja, aber man hat sich auch das Geld für Windows XP gespart! Würden öffentliche Einrichtungen und Firmen noch mehr, als bisher, auf freie Software setzen, würden unglaubliche Geldmengen eingespart werden. Zum Glück verwenden bereits viele Einrichtungen freie Software.
2. Vorteil: Featurereichtum und Vielfalt freier Software. Freie Software bietet mittlerweile derartig viele Features, dass sie den kommerziellen Produkten oft nicht mehr nachstehen bzw. sie sogar übertrumpfen. Man denke an freie Software wie den Firefox-Browser (Kommerzielles-Gegenstück: Internet-Explorer) oder das Mailprogramm Mozilla Thunderbird (Kommerzielles-Gegenstück: Outlook Express) bzw. das Mailprogramm Evolution für Linux (Kommerzielles Gegenstück: Microsoft Outlook und andere). Auch ganze Office-Umgebungen wie OpenOffice.org oder KOffice, die von der Textverarbeitung über Tabellenkalkulation und Datenbanksoftware bis hin zur Präsentationssoftware in jeglicher Hinsicht mit Programmen wie Microsoft Office Word/Excel/Powerpoint/... vergleichbar sind. Auch Desktop-Publishing Software wie Scribus oder das Grafikprogramm GIMP (Kommerzielles Gegenstück: Adobe Photoshop) sind sehr ausgereift. Man denke auch hier wieder an Vorteil #1: Kosten-Ersparnis! Auch im Unternehmensbereich, etwa bei Serveranwendungen wie Webservern, Datenbanksystemen etc. stellt freie Software hochqualitative Gegenstücke bereit. Unser Unternehmen etwa benutzt ausschließlich freie Software (LAMP+Exim+...) und spart damit hohe Lizenzkosten! Übrigens stehen die grafischen Oberflächen, die etwa Linuxsysteme mit sich bringen, in Punkto Benutzerfreundlichkeit und Grafikeffekte Oberflächen wie der von Mac OS X oder Windows Vista in nichts nach! Videos davon kann man sich hier (3D Effekte, Transparenz usw.), hier (ebenso) und hier (zeigt den KDE-Desktop in der aktuellen Version 4.1) ansehen.
3. Vorteil: Freiheit. Wer heute Windows Vista kauft, der kauft nur eine Lizenz des Produkts, er darf sein Vista nur auf einem Rechner installieren, hat Beschränkungen bzgl. der Anzahl der Prozesssoren, Hauptspeichermenge, der gleichzeitig auf dem System arbeitenden Benutzer usw. Wenn man stattdessen Linux oder *BSD verwendet, hat man dieses Problem (zumindest mit Ausnahme bestimmter kommerzieller Supportverträge, die für Heimanwender und auch einen Teil der Firmen nicht von Belang sind) nicht. Egal, ob man das Linux-System 1x oder 1000x installiert hat und ob man es auf einem Heimrechner mit einem CPU und 1 GB Hauptspeicher installiert, auf Server mit 4 CPUs und 64 GB Hauptspeicher und 20.000 Benutzern, oder ob man es auf einem Supercomputer installiert: Man darf es tun und man kann damit machen was man will! Apropos Supercomputer: Es gibt eine aktuelle Liste der 500 schnellsten Supercomputer, die derzeit existieren. Davon werden 427 (!), das sind 85.4%, mit Linux betrieben! Fünf hingegen werden mit Windows betrieben.
4. Vorteil: Update für alles! Linux-Distributionen verwenden Paketmanager. Vergleicht man dies mit Windows, sieht man, dass Windows auch über einen Updatemanager verfügt. Dieser updated allerdings nur die Programme von Microsoft, die zum Windows-System gehören. Alle anderen Anbieter verwenden entweder einen eigenen Updatemanager oder gar keinen! Der Vorteil der Paketmanager unter Linux (und ähnlichen freien Betriebssystemen) ist, dass generell alles updated wird. Das heißt, dass bei einem Update mit wenigen Klicks neue Versionen für alles vom Betriebssystemkern hin bis zum Browser auf neue Versionen hin überprüft und ggf. aktualisiert wird!
Weitere Vorteile. Es gibt noch zahlreiche weitere Vorteile, etwa den offenen Quellcode oder die unzähligen freien Entwicklertools, aber diese Vorteile sind für Heimanwender in der Regel nicht so sehr von Belang, weshalb ich sie hier nicht aufführen werde.
Nachteile für Heimanwender: Zunächst einmal muss man sich an das neue System gewöhnen. Ich finde aber, dass die Vorteile klar überzeugen und die Gewöhnung auch viel Spaß machen kann. Ein weiterer Nachteil (und das ist wohl der größte) ist, dass Windows-Programme nicht einfach auf Linux lauffähig sind. Zwar gibt es viele Programme, die auf beiden Betriebssystemen laufen (etwa Firefox oder OpenOffice.org), aber man kann eben keine .exe-Dateien ausführen und die meisten Computerspiele gibt es nach wie vor nur für Windows. Dies wird aber nicht ewig so bleiben und ändert sich langsam.
Links. Wem ich freie Software nun schmackhaft machen konnte, dem kann ich empfehlen, eine der aktuellen Linux-Distributionen herunterzuladen. Und sich die folgenden Links anzusehen.

Kommentare:
Von: Sebastian
Ieks. :-/ Nettes Posting, aber... du verwechselst Freie Software mit OpenSource hier mehrfach.

Bei 1. Kosten gehst du davon aus, dass es kostenfrei für dich ist. Dies ist bei FreeSoftware nicht immer der Fall: you should think of free as in free speech, not as in free beer , http://www.gnu.org/philosophy/free-sw.html

Bei 2. Featurereichtum zählst du auch einige Software auf - jede davon ist sicher OpenSource, bei FreeSoftware würde ich das nicht behaupten. Ausserdem ist bei der Behauptung, dass GIMP brauchbar und ein echter Photoshop-Ersatz ist, sehr viel Spielraum. Ich habe schon Menschen Stunden lang darüber sich streiten hören. Es kommt immer auf die Anforderungen der Leute an.

Bei 4. Updatefreiheit - Naja. Wenn du dir ThirdParty-Software unter GNU/Linux installierst, hast du dafür auch kein Updatesupport und so ist s halt auch bei Windows. Aber ja, die Paketmanager machen einem das Leben schon leichter, mal mehr und mal weniger .oO(Slackwares Packetmanager würde ich auch nicht als grossen Vorteil gegenüber einem Windows empfehlen). Und für MacOS X gibt s bspw. auch brauchbare Programme, was nebenen deiner Softwareaktualisierung für den Apple-Teil auch ThirdParties abklappert und nach Updates automagisch sucht. Also auch dort ist nicht kommerziell gleich kommerziel gleich schlechter als (vermeindlich) frei.

Bei Nachteile sollte man wirklich eine längere Migrationsphase anführen. Man sollte sich an OpenSource-Software langsam gewöhnen. Auf Windows schonmal OpenOffice und Firefox probieren und so stückweise den Absprung schaffen.



Sieh s bitte nicht als Kritik von mir, ist mir blos so aufgefallen beim Durchlesen. :-)

____
Von: Steffen
Zur Verwechslung: Wikipedia sagt: "In der eigentlichen Bedeutung unterscheidet sich die Open-Source-Definition nicht von freier Software. Der Begriff Open Source Software scheint aber mit der Betonung der Überlegenheit des Entwicklungsprozesses (siehe The Cathedral and the Bazaar von Eric Steven Raymond) eher die Entwicklersicht wiederzugeben, während der Begriff Freie Software den Nutzen für den Anwender und die Gesellschaft heraushebt."; Zu den Kosten: Die meiste (besonders die allgemeinwichtige) freie/open source-Software ist gratis. Das man auch Geld verlangen kann, würde (das Posting richtet sich an normale PC-Nutzer und Anfänger) hier ehr für Verwirrung sorgen, fürchte ich. Zum Thema Slackware hast Du auch meine volle Zustimmung. Da habe ich mich bereits hier zu ausgelassen: http://steffen-wendzel.blogspot.com/2011/02/slackware-will-never-die-teil-1-und-2.html
____
Von: Sebastian
Ah. Den Slackware-Artikel kannte ich noch nicht. Aber erstaunlich wie gut du es dennoch da stehen lässt. ;-)
Naja. Distributionen sind eh reine Geschmackssache finde ich.

____
Von: Rainer
Dein Posting spricht mich sehr an. Seit nunmehr 15 Jahren ausschließlich mit Windows-Systemen beruflich befasst, entdecke ich nun Linux für mich.

Ich habe vor wenigen Wochen auf einem IBM Thinkpad A31 OpenSuse 11 installiert, und bin nach den ersten Versuchen und Tests begeistert über dieses System. OpenSuse läuft auch auf einem älteren System sehr gut.

Ich bin mir klar, dass für den Anfang eine harte Einarbeitungszeit vor mir steht, um auch die Tiefen des Systems kennenzulernen. Doch bei Windows war dies noch nie anders, wenn ein Nachfolger in Sicht kam.

Linux macht viel mehr Spaß.

Mehrere Versuche, mich an Vista zu gewöhnen, sind gescheitert.

Nun also Linux. Auf der Systems habe ich zudem die aktuellen Notebookmodelle von Mac in der gebotenen Kürze der Zeit inspiziert und war von der Genialität des Betriebssystems und der Standardprogramme begeistert.

Für die Zukunft denke ich an einen Wechsel in meinem privaten Arbeitszimmer zu Apples MacBook.

PHP Registrierungen

Wie erstellt man eigentlich eine vernünftige Registrierung in PHP?

(Date/Datum: 080706-23:11, Hits: 4621) Ziel soll es für dieses Posting sein, ein vorhandenes Registrierformular so zu verändern, dass eine Überprüfung der Mailadresse durchgeführt werden kann. Aus der Sicht des Benutzers läuft es dabei üblicher Weise folgendermaßen ab:

1. Der Benutzer registriert sich und gibt dabei seine Mailadresse an.
2. Der Benutzer erhält eine Mail mit einem Bestätigungslink zum anklicken.
3. Der Benutzer klickt den Link an und dadurch wird sein Account aktiviert.
4. Die Mailadresse ist damit automatisch verifiziert und der Benutzer darf sich einloggen.

Hier also eine Kochanleitung:

Gegeben seine Datenbank im Hintergrund. Dann gibt es sicherlich eine Tabelle mit Benutzern. Dieser Tabelle fügt man zunächst ein Flag reg_sf (das steht für registration_successful) hinzu. Nachdem ein Benutzer sich registriert, wird in diesem Flag zunächst eine '0' oder ein 'n' eingetragen, was bedeutet, dass der Account noch nicht aktiviert wurde.

Zeitgleich wird in einer neuen Tabelle, ich nenne sie authkeys, ein Aktivierungscode für den Benutzer hinterlegt. In der Tabelle muss eigentlich nur die User-ID und der Authentifizerungs-Key (den der Benutzer per Mail bekommt) eingetragen werden.

Den Authentifizerungskey muss man zunächst erzeugen, dann in die Datenbank eintragen und anschließend dem Benutzer (in Linkform) per Mail schicken. Erzeugen lässt sich ein solcher Key etwa mit einer Hashfunktion (160 Bit oder mehr sollten es mindestens sein!). Dazu kann man nun verschiedene Attribute des Users (die dann aber einzigartig sein müssen!), die Zeit, Zufallszeichen etc. in einem String kombinieren. Einfach angewandt würde dies etwa so aussehen:

Erzeugung des Hashwertes:

$sha1key = sha1($username."ewfwoengerugberig43t34wg".
$password.$vorname.'abcd43ghe3gh349gherughergerg'.time());

Eintragen des Keys in die Datenbank:

/* Hier sollte man noch sicherheitshalber einige Sonderzeichen rausfiltern,
* aber das gilt ja für praktisch alle Inputs, die man in PHP bekommt.
* Dazu werde ich vielleicht in einem Posting etwas schreiben, aber google
* weiß auch Rat!
*/
$sqlcmd = "INSERT INTO authkeys (uid,authkey) values ";
$sqlcmd .= "(".mysql_real_escape_string($uid).", ".$sha1key.");";
if (!($res = mysql_query($sqlcmd))) {
die('Invalid MySQL query');
}

Nachdem der Key mit einem INSERT in die Datenbank übertragen wurde, wird der User nun noch (am besten via HTML-Mail zum "draufklicken") informiert. Wie das geht, erfährt man hier. Der Link hat dann die Form eines typischen PHP-Links, etwa http://meineseite.xyz/?sub=aktivierung&user=maxmuster&authkey=94jg34ng3904ugn34gn34g.

Jetzt fehlt noch die Aktivierungsseite (also die Seite, auf die der Benutzer in seiner Mail klickt). Diese Seite prüft, ob der Aktivierungsschlüssel für den Benutzer existiert. Ist dem so, dann werden noch folgende Schritte durchgeführt:

1. Das reg_sf-Flag für den Benutzer wird auf 'y' bzw. '1' gesetzt.
2. Das Tupel (User-ID, Authentifizerungs-Key) wird aus der authkeys-Tabelle gelöscht.

Account aktivieren und Benutzer löschen:

UPDATE `users` SET `reg_sf`='y' WHERE `uid`='...' AND ...;
DELETE FROM `authkeys` WHERE `uid`='...' AND `authkey`='...';

Nun ist man fast fertig. Aber eine Sache fehlt noch: Der Code hinter einem Login-Formular muss dahingehend modifiziert werden, dass er beim Login von nun an das Flag reg_sf überprüft.

Modifizierung des Login-SQL-Befehls:

SELECT COUNT(*) FROM `users` WHERE `username`='...' AND `password`='...' and `reg_sf`='y'

Man sollte an dieser Stelle aber bei einer Produktivseite auf GAR KEINEN Fall vergessen, dass alle bisherigen Benutzer keine aktivierten Accounts haben. In diesem Fall ist es sinnvoll, das reg_sf-Flag für alle alten Benutzer auf 'y' zu setzen. (Das ist dann die Bestrafung dafür, dass man nicht gleich eine entsprechende Funktion implementiert hat ;-))

Feedback und Fragen sind von mir wie immer ausdrücklich erwünscht!

PHP Includes absichern

(R:OK)
Über die Absicherung von PHP include()s wurde bereits viel geschrieben. Ich poste eine kurze Zusammenfassung sowie ein Zusatzhinweis, wie ich meine Webseite absichere.
(Original Posting Date: 2008-03-03-15:08, Original Hits: 6837)

PHP ist, auch wenn sie als nicht sonderlich sicher und zudem langsam als gilt, eine sehr populäre Skriptsprache im Bereich der Webprogrammierung.
Eine der wichtigsten Techniken für PHP ist dabei das dynamische Nachladen von Seiteninhalten mittels der include()-Anweisung. Damit ein PHP-Skript weiß, was es in die aktuelle Seite laden soll, wird ein Dateiname oder ein bestimmter Code als Variable übergeben. Etwa in der Form http://doomed-reality.org/index.php?sub=steffen.

Nur ganz unerfahrene Entwickler machen sich hierbei nicht die Mühe, die übergebenen Werte zu überprüfen, was besonders in der Vergangenheit, als es noch kein so großes Bewusstsein für Web-Sicherheit gab, zu einer sehr simplen Form von Angriffen führte. Dabei versuchte man etwa die passwd-Datei mittels ?sub=/etc/passwd zu laden um sich so eine Übersicht über die Accounts des Systems zu verschaffen und eventuell einen Remote-Login auf dem Webserver zu bekommen.

Absicherung
Die Absicherung ist einfach (und wurde von uns im Praxisbuch Netzwerksicherheit beschrieben): Man definiert einfach alle gültigen Werte und lässt nur diese zu. Dies lässt sich mit if-Abfragen und switch-Anweisungen am einfachsten erledigen. Beispielsweise so:

if ($_GET["sub"] == "ABC")
  include("ABC.xyz");
else if ($_GET["sub"] == "XYZ")
   include("XYZ.xyz");
else
   include("START.xyz");
 
In den meisten Fällen habe ich es mir noch etwas einfacher gemacht und alle gültigen Werte in ein Array gesteckt. Ist der Wert der Variable gleich eines Wertes im Array, so wird die Seite eingebunden. Andernfalls nicht.

Verstecken von Include-Dateien
Was hingegen weniger häufig anzutreffen ist, ist das die Dateien, die eingebunden werden, auch versteckt werden. Somit kann ein Angreifer inkludierte Dateien auch nicht so einfach direkt anfragen und somit deren Code auslesen.

Nehmen wir wieder das Beispiel vom Anfang. Es wird ein GET-Request auf http://wendzel.de/index.php?sub=steffen ausgeführt. Dann könnte der Angreifer davon ausgehen, dass sich im Dateinamen der einzubindenden Datei das Wort "steffen" befindet. Nun könnte er versuchen, die Datei durch einen direkten Request zu entdecken. Hier ein paar Beispiele, die ein Angreifer wohl ausprobieren wird:

steffen.sub
steffen
steffen_sub
steffen.inc
steffen_inc
inc.steffen
steffen.txt
steffen.php
steffen.php3
...
 
Vielleicht denkt der Angreifer auch an Unterverzeichnisse, und probiert nun auch solche Dateinamen aus:

inc/steffen.sub
sub/steffen.sub
subs/steffen.sub
inc/steffen.inc
...

Mit kleinen (und zudem nicht aufwändigen) Skripten lassen sich solche Angriffe leicht automatisieren.

Auch hier gibt es Gegenmaßnahmen
Beispielsweise könnte man sonderbare Dateinamen verwenden, deren schwer zu erratende Bestandteile an den übergebenen Parameter angefügt werden (etwa GE203fgn2-steffen-23490gt) oder könnte aus Kleinbuchstaben Großbuchstaben machen (und umgedreht).

Am einfachsten und besten finde ich aber die Methode, die ich auch hier anwende: Die Dateien werden aus einem .htaccess-geschützten Unterverzeichnis geladen (und sind natürlich zusätzlich mit einer Modifikation im Dateinamen versehen). So müsste ein Angreifer Benutzer und Passwort, das Unterverzeichnis selbst und die Modifikation der Dateinamen erraten (eine leere index.html-Datei schützt die Dateinamen im Verzeichnis -- alternativ könnte man aber auch Directory Listings deaktivieren).

KOMMENTARE AUS DEM ARCHIV:
Kommentare:
Von: just me
Hallo,
es ist doch aber so, auch wenn der Angreifer an eine Datei steffen.php3 heran käme, so würde er von der Datei ja nicht den Source Code bekommen, so lange es sich bei dem Inhalt um PHP handelt? Oder sehe ich da etwas falsch? Der Server, sofern php installiert und lauffähig ist, "compiliert" doch den Code bevor dieser verschickt wird.
Gruß

____
Von: Steffen Wendzel
An den Code einer .php-Datei kommt der Angreifer nur bei einer Fehlkonfiguration des Servers. Wenn man aber keine php-Dateien einbindet, sondern Dateien mit einer anderen Endung, dann können diese direkt mit Quellcode abgeholt werden. Man kann natürlich auch direkt .php-Dateien einbinden, das wäre auch nicht soooo unsicher. Doch dann sollte man unbedingt darauf aufpassen, dass diese Dateien nicht ohne die einbindende index.php-Datei für Angriffe ausgenutzt werden können (bspw. Überschreiben von irgendwelchen Variablen, die sonst die index.php setzen würde etc.)!
____
Von: just me 2
Hallo,
was wäre den eine schnelle UND sichere Sprache für das WWW?

Gruß

____
Von: Steffen Wendzel
Hi justme2,

die Sicherheit kommt primär auf dich an (eine sichere Sprachimplementierung sei mal gegeben). Mit PHP (das ja des Öfteren bzgl. seiner Sicherheit in der Kritik stand) habe ich in den letzten 1,5 Jahren eine große Seite (noch immer nicht online) aufgebaut und bin mit der Performance nicht ganz zufrieden. Ich werde wohl für das nächste Projekt Perl/Mason (www.masonhq.com) ausprobieren, das für Highperformance-Seiten ausgelegt ist (Amazon benutzt das angeblich auch).

Eine andere Problematik besteht darin, eine relativ schnelle Sprache (etwa Perl) zu verwenden und dann ein "tolles", aber aufgeblasenes Web-Framework zu nutzen, was dir die Performance wieder klaut.

Trotzdem (und zurück zum Thema Sicherheit): Wenn Du nicht über die webbasierten Angriffsarten informiert bist, dann hast du schon verloren.

Apropos, Johannes und ich halten im Juni wahrscheinlich einen Workshop zum Thema Linux- und Websicherheit ab, da kannst Du dann mehr über die Sicherheit von Web-Anwendungen erfahren.

Steffen

____
Von: fip25
Ich mache das so, die z.B. index.php Datei mit den Includes definiert eine Konstante z.B.
define( HAUPTSEITEGELADEN , true);


Alle Includes haben auf den ersten Zeilen dies:
if (!defined( HAUPTSEITEGELADEN ))
{
exit;
}

Funktioniert prächtig!

____
Von: Steffen
Hi fip25,

das hört sich nach einer guten Idee an. Allerdings unter der Bedingung, dass die Dateien die Endung .php kriegen, damit sie nicht direkt aufgerufen werden können. Andernfalls würde ich die Include-Dateien in jedem Fall trotzdem verstecken bzw. mit .htaccess-Schützen.

Steffen

____

Shellskript Programmierung - Teil 6 (Kommandosubstitution)

Eines der mächtigsten Feature der bash ist die Kommandosubstitution. Im sechsten Teil dieser Kurzeinführungen soll es um genau dieses Thema gehen.

(Date/Datum: 080302-19:32, Hits: 2465)

Im Normalfall führt man Kommandos aus und kann anschließend deren Ergebnisse betrachten oder leitet deren Ausgabe vielleicht durch eine Pipe an ein anderes Programm weiter.

Bei der Kommandosubstitution ist das anders. Bei dieser wird ein Unterkommando in Backticks (`-Zeichen) gesetzt. Dies bewirkt, dass die Ausgabe des Kommandos als Parameter für ein anderes Kommando benutzt wird.

Ein einfaches Beispiel

Dieses Beispiel ist etwas unsinnig, für den Einstieg wird es allerdings gute Dienste leisten. Und zwar soll die Ausgabe des ls-Programms benutzt werden, um Dateinamen aufzulisten. Die Auflistung der Dateinamen soll aber das echo-Programm übernehmen, das die Ausgabe von ls als Parameter geliefert bekommen soll.

Dies ist möglich, weil das echo-Programm das, was man ihm als Parameter angibt (einmal abgesehen von einigen speziellen Parametern) auf der Standardausgabe ausgibt. Und da es nun die Ausgabe von ls (also die Dateinamen) als Parameter geliefert bekommt, gibt es diese einfach aus.

Es ist hier zu beachten, dass das ls-Kommando in Backticks geschrieben steht:

$ echo `ls`
a b c d e f

Datum in echo-Ausgabe einbauen

Ein typischer Anwendungsfall für die Kommandosubstitution ist die Ausgabe des Datums innerhalb eines Texts mit echo. Die Syntax ist hierbei gleich:

$ echo "Heute ist der `date`".
Heute ist der So 2. Mär 19:29:06 CET 2008

Ein netteres Beispiel

Richtig nützlich wird die Kommandosubstitution aber erst dann, wenn Variablen (vgl. Teil 4) mit ins Spiel kommen. Variablen können nämlich die Ausgabe einer Kommandosubstitution als Werte annehmen.

So ist es etwa möglich, die Ausgabe von ls als Variablenwert zwischenzuspeichern. Um dies zu verdeutlichen soll nun die Ausgabe von ls zunächst in einer Variablen zwischengespeichert und dann durch echo ausgegeben werden.

$ DATEIEN=`ls`
$ echo $DATEIEN
a b c d e f

Mehr dazu findet man in Einstieg in Linux und in Linux. Das umfassende Handbuch.

(void) printf(...) vs. printf(...)

(Date/Datum: 080218-20:51, Hits: 1668)

Es macht übrigens keinen Unterschied, ob man ein (void) vor printf setzt. Dies unterdrückt lediglich Warnmeldungen von lint:

swendzel@hikoki:/tmp$ cat test?.c
#include
int main(){printf("katze");return 0;}

#include
int main(){(void)printf("katze");return 0;}
swendzel@hikoki:/tmp$ gcc -S test1.c
swendzel@hikoki:/tmp$ gcc -S test2.c
swendzel@hikoki:/tmp$ diff -up test?.s
--- test1.s 2007-08-09 16:26:47.000000000 +0200
+++ test2.s 2007-08-09 16:26:48.000000000 +0200
@@ -1,4 +1,4 @@
- .file "test1.c"
+ .file "test2.c"
.section .rodata
.LC0:
.string "katze"

Shellskript Programmierung - Teil 5 (Pipes/Ausgabeumlenkung)

(Date/Datum: 080218-20:37, Hits: 2533) Ein in all unseren Linuxbüchern ausführlichst behandeltes Thema sind so genannte Pipes. Pipes sind eine äußerst einfache Form der Kommunikation zwischen Prozessen. Man bezeichnet dies auch als Inter-Process-Communication (IPC). Hier eine kleine Einführung, denn Pipes sind in der grundlegenden Anwendung eigenltich ganz einfach zu verwenden und gleichzeitig äußerst nützlich.

Funktionsweise

Eine Pipe dient dazu die Ausgabe eines Programms aufzunehmen und an ein anderes Programm weiterzuleiten. Gibt ein Programm 'A' eine Zahl aus, so wird diese an Programm 'B' als Eingabe weitergereicht.

Schreibweise

Man schreibt eine Pipe mit dem |-Zeichen, dass sich auf deutschen Tastaturen meist neben der 'Y'-Taste befindet. Zusammengedrückt mit der Taste 'ALT' erscheint das Zeichen auf dem Bildschirm.

Die Anwendung schreibt sich nun folgendermaßen:
$ Programm1 | Programm2
Dabei wird die Ausgabe des ersten als Eingabe des zweiten Programms verwendet.

Beispiel Hier nun ein Beispiel: Es soll die Ausgabe von 'ls' an das Programm 'grep' weitergeleitet werden, dass die Eingabe nach bestimten Ausdrücken untersucht und diese herausfiltert.

Wir möchten nun alle Dateien sehen, die ein 'a' beinhalten:

$ ls | grep a
...


'ls' gibt die Dateiliste aus und 'grep' sucht alle Zeilen mit einem 'a' heraus. Wie gesagt: Die Verwendung von Pipes ist kinderleicht.

Ausgabeumlenkung

Normalerweise wird nur die Standardausgabe in eine Pipe geleitet, möchte man nun aber die Fehlerausgabe ebenfalls in eine Pipe leiten, so empfiehlt sich eine Ausgabeumlenkung.

$ ls /datei-existiert-nicht 2>&1 | grep a


Hier würde grep auch die Fehlermeldung der nicht existierenden Datei als Eingabe geliefert bekommen. Die Schreibweise 2>&1 heißt in diesem Fall, dass die Standardfehlerausgabe (Deskriptor 2) in die Standardausgabe (Deskriptor 1) eingehängt werden soll.

Weiteres

In unserem Buch 'Linux. Das distributionsunabhängige Handbuch' gehen übrigens noch auf die Systemprogrammierung (in C) mit Pipes ein. Und zwar im Kapitel zum Thema 'Prozesse und IPC' (ich tippe mal auf Seite 700-900, was ich im Moment nicht überprüfen kann, da ich im Rechenzentrum der Hochschule sitze).