tchncs

Latest articles

This is the local timeline where you can see the latest articles from this instance. You can control the visibility of each of your blogs. New blogs are currently set to unlisted by default. You can change this in each blogs settings.

from Libertas

Eine Exkursion nach Plymouth Rock.

Wenige Städte haben eine schönere Umgebung als Boston und Boston selber ist nicht ohne grossen Reiz. Überall kommt die Natur dem Gemüt und der Fantasie des Menschen entgegen. Alles ladet zu heiterem Lebensgenuss ein. Was einzig dazu erforderlich ist, ist eine unbefangene und freie Auffassung der Natur und des Lebens. Nirgends könnten sich freie Menschen mehr des Daseins freuen, als hier. Aber gerade das fehlt: freie Menschen, das Vorherrschen einer unbefangenen und natürlichen Welt- und Lebensanschauung. Infolgedessen hat das Leben in Neu-England einen düsteren Anstrich. Der Einladung der Natur, an den Sonntagen hinaus ins Freie zu ziehen, Gram und Sorge und Armut an die Seite zu schieben, und bei Wein und Bier und freudvollem Tanz und Spiel mit den Frauen [Freunden?; Wort unleserlich] sich zu freuen, darf man hier nur auf die Gefahr hin zu folgen wagen, mit dem Polizeistock und dem Gerichtshof in Berührung zu kommen. Der freie, frohe Lebensgenuss ist gesetzlich untersagt. Der fromme Puritaner könnte sich beim Anblick fröhlicher Feste die Augen verrenken.

Aber die Menschen wissen sich zu helfen. Wie „Mein Onkel Benjamin“ bemerkt, verkehrt die Fröhlichkeit immer mit der Knechtschaft; „das Volk trug Ketten, aber es tanzte darin, und wenn sie rasselten, so klang es wie Kastagnetten.“ Wenn man auf dem Lande nicht seine Feste feiern und der Freude leben darf, so wehrt’s einem doch niemand auf der See. Zwar wurde s. Z. der Menschenhandel auf der See durch die Gesetze des Landes als Kapitalverbrechen behandelt, (während sie ihn auf dem Boden der Republik beinahe ein Jahrhundert lang als ein heiliges Recht beschützten), und ein heidnischer Lebensgenuss ist im Auge des christlichen Gesetzes kaum ein geringeres Verbrechen als der Menschenhandel. Daraus könnte man schliessen, dass heidnischer Lebensgenuss auch auf der See wie ein Verbrechen behandelt würde, zumal ihm auf dem Lande keine so liebevolle Fürsorge zuteilwird, wie einst dem Menschenhandel. Das ist aber nicht der Fall. Wenn das Gesetz auch auf dem Lande das Heidentum lieber gleich mit Stumpf und Stiel ausrotten möchte, so gibt es demselben doch auf dem Meere die Zölle frei. So recht eigentlich das Sinnbild der Freiheit, ladet die See zudem zu heiterem Lebensgenuss geradezu ein. Diesen Umstand machten sich die Bostoner Turner am letzten Sonntag zu Nutze, indem sie für die Gelegenheit ein Dampfboot mieteten und eine Exkursion nach Plymouth Rock veranstalteten.

Stark besetzt, und reichlich mit den Gaben des Bacchus und Gambrinus versehen, verliess das Boot „Nantasket“ präzis zehn Uhr Vormittags unter den erhebenden Klängen der Musik das [sic!] Werft. Alles strahlte von Freude. Und immer lustiger wurde es, je weiter wir uns von den Marken des Gesetzes entfernten und mutig hinausstiessen auf das freie, herrenlose Gebiet des wild dahin wogenden Meeres. Der Anblick des ungebundenen und doch massvollen Verkehrs der Menschen an Bord des [sic!] „Nantasket“ liess eine Ahnung des Lebens aufsteigen, wie es sich einst unter der Freiheit gestalten wird. Hier wurde allerdings nur der freie Sonntag und die Freiheit Gambrins gefeiert. Es war das keine segelnde Republik, wie sie Garibaldi vorgeschwebt hatte, immer bereit, da zu landen, wo es für die Freiheit zu kämpfen gelten würde. Die Betrachtung, dass sich die Turner, wie überhaupt das freisinnige Deutschtum, nicht für die ganze und allseitige Freiheit zu begeistern vermögen, wirkt ernüchternd. Auch wir Anarchisten sind willens, für den freien Sonntag und für die Freiheit Gambrinus zu Felde zu ziehen, aber unsere Freiheitsliebe findet nicht hier ihre Grenze. Wir erheben die ganze und allseitige Freiheit auf unseren Schild. Ich habe Männer kennengelernt, die bereit gewesen waren, für die Trinkfreiheit ihr Leben einzusetzen, die sich aber allen darüber hinaus zielenden Freiheitsbestrebungen gegenüber entschieden feindlich verhielten. Die Münchener machen Revolution, wenn eine neue Steuer vom Bier erhoben werden soll, aber ich habe noch nicht gehört, dass sie für die Befreiung der Arbeit von der erdrückenden Last gesetzlicher Privilegien auch nur den kleinen Finger gerührt haben. Bei derartigen Betrachtungen kommt mir immer das Wort Heinzens in den Sinn: „Nieder mit dem Bier, solange es nicht heisst, hoch die Idee!“

Nach einer nahezu vierstündigen Fahrt langten wir in Plymouth Rock an. Die Stunde, die uns zum Aufenthalte daselbst gewährt war, wurde zur Aufsuchung der reichlich vorhandenen geschichtlichen Denkmäler benutzt. Hier landeten bekanntlich im Winter des Jahres 1620 jene Pilgrime, die auf der „Mayflower“ ein Reich suchten, das nicht von dieser Welt war, das Reich der Gedanken- und Gewissensfreiheit. Ihrer Gesinnungen wegen im alten Vaterlande verketzert und verfolgt, unterzogen sie sich selbstvertrauend und hoffnungsvoll den Entbehrungen und Mühseligkeiten, welche die Gründung eines freien Gemeinwesens in dem neuen Weltteil damals mit sich brachte. Anders als die Abenteurer, die sich auf die Jagd nach Gold begaben, waren diese Menschen ausgezogen, um einen Fleck Erde zu suchen, auf dem sie frei und sorglos ihrem besseren Selbste leben konnten. Leider vergassen sie später, als sie die Freiheit für sich errungen hatten, die Segnungen derselben auch den ihrem engeren Kreise fernstehenden Menschen zuteilwerden zu lassen. Ja, aus Verfolgten wurden sie selber zu Verfolgern. Das gilt namentlich von den Puritanern, welche bald nach der Niederlassung der Pilgrime auf Plymouth Rock von England herüberkamen und neue Ansiedlungen gründeten. Indem ich aber im Geiste durch die Zeiten zu ihnen hinüberschweifte, entdeckte ich immerhin manche Berührungspunkte und vieles, das mich sympathisch ansprach; wenn nicht die Gesamtheit, so doch bemerkenswerte Einzelheiten, welche auf das wahrhaft Grosse hinwiesen. Auch konnte ich, der ich mit meinen Gesinnungsgenossen selber in eine neue Welt gezogen bin, in die Welt des Anarchismus, mir einigermassen das harte und beschwerliche Leben mit seinen unendlichen Kämpfen und Sorgen vergegenwärtigen und würdigen, welches hier das Los der Pilgrime und Puritaner wurde. Haben wir doch ähnliche Pioniersarbeiten zu verrichten. Und obgleich der Felsen von Plymouth, wie ein deutsch-amerikanischer Dichter singt, noch keine goldnen Früchte getragen hat, so fand ich es doch schön und passend, dass ein „dankbares Volk“ auf einem auf einer Anhöhe errichteten, noch unvollendeten Monument im Namen „der religiösen und bürgerlichen Freiheit“ das Gedächtnis dieser Pioniere feiert, aber es erschien mir als eine traurige Illustration zu dieser Freiheit, „Pilgrim Hall“ mit ihren Sehenswürdigkeiten am Sonntage geschlossen zu finden. Mit grossem Interesse las ich auf einem Steine den Wortlaut des Vertrags, wonach die Passagiere an Bord der „Mayflower“ sich vereinbarten, auf dem neuen Grund und Boden ein freies, auf „gleichen und gerechten Gesetzen“ beruhendes Gemeinwesen zu gründen; es erweckte aber eine tiefe Wehmut in meiner Brust, als ich weiter las, dass dieser Vertrag am 11. November 1620 ausgefertigt und unterzeichnet wurde und sich mir die Betrachtung aufdrängte, dass die hier geborene Freiheit an einem anderen 11. November in Chicago erwürgt und zu Grabe getragen wurde.

Weitere Betrachtungen überlasse ich dem Leser. Hier nur noch die Frage: werden die Menschen ewig um die Freiheit kämpfen, nur um sie nach errungenem Sieg wieder zu zertreten? Heinzen verglich einmal die Freiheit mit dem Meer. Aller Unrat und aller Schmutz der Welt wird dem Meere zugeführt, aber mit selbstreinigender Kraft erhält es sich ewig frisch und klar und rein. Wird die Erkenntnis niemals tagen, dass auch die Freiheit ihrem innersten Wesen gemäss mit selbstreinigender Kraft alle schmutzigen, unsittlichen und feindlichen Elemente der Gesellschaft unerbittlich ausscheidet und nur das Reine, Gesunde und Starke duldet? Nur an diese Erkenntnis knüpfe ich meine Hoffnungen für die Freiheit.

G.S.

(Libertas 7, Samstag, 30. Juni 1888, S. 5.)

Anmerkungen

  • Plymouth Rock ist heute noch ein beliebtes Ausflugsziel.
  • Der Name des Boots, „Nantasket“ bezieht sich auf einen Strand in der Umgebung Bostons.
  • Mein Onkel Benjamin (Mon oncle Benjamin) ist ein humoristisch-satirischer Roman des Franzosen Claude Tillier (1801–1844) aus dem Jahre 1843. Eine Übersetzung ins Amerikanische fertigte Benjamin Tucker an.
  • Zum Publizisten Karl Heinzen s. die Anmerkungen hier.
 
Weiterlesen...

from Hannes

20.10.2024 Hin und her. Nachdem ich aus der Kirche kam, kümmerte ich mich um das Katzenpaar. Der Kater schlief noch hinter der Wäschetruhe, unter einer Decke halb versteckt. Die Katze lag auf dem Stuhl unter dem Tisch. Kaum das ich ein Tütchen Trockenfutter hatte und raschelte, kam das Weibchen angerannt und wollte etwas davon. Gegen Mittag, kam der Kater aus seinen Versteck hervor und andauernd hin und her. mal ins Wohnzimmer, mal ins Schlafzimmer. Dieses tat er viel, bis er müde wurde. Dann leckte er im Wohnzimmer seine Pfötchen ab. Manchmal begegnete sich das Pärchen und das Katzenweibchen jagte den Kater in die Flucht. Hauptsache der Kater ist etwas zutraulicher geworden und beschlagnahmte die oberste Etage vom Kratzbaum. Er rollte sich auf der obersten Etage auch hin und her. Auch wenn der Kater draußen ist, darf man ihn nicht anfassen, er ist noch ängstlich und fängt an zu knurren, also Vorsicht .

 
Weiterlesen...

from Hannes

18.10.2024 Katzenpärchen Hallo meine Freunde, jetzt habe ich ein Katzenpärchen in meiner Wohnung, sie sind niedlich anzuschauen. Nun der Reihe nach: Ich fuhr zuerst zu meiner Hausärztin und ließ mir die Bisswunden behandeln, die der Kater mir am 14.10. zugefügt hat. Die Wunden sind am Verheilen. Gestern Abend wollte ich Katzenfutter dem Pärchen zuteilen, kam das Weibchen an und wurde auf einmal liebestoll, so hatte sie mein Vertrauen gefunden, der Kater war noch ängstlich und betrachtete mich aus 5 m Entfernung. Heute Mittag kam die Dame, von der ich die Katzen habe zu Besuch und machte Fotos von ihnen. Sie war überzeugt davon, das ich die Tiere gut behandle. Ich schieb ihr eine Mittteilung, das sie die Katzen an mich abgab. Ich gab dann anschließend den Katzen ihr Futter. und beobachtete beide, wie sie springen konnten. Auch der Kater ist heute etwas zutraulicher geworden und sprang auf das Fensterbrett, obwohl die Gardine davor hing. Immer hin und her. Mal ins Wohnzimmer und aufs Fensterbrett. Als Letztes kontrolliere ich ihr Futter, wieviel davon noch da ist, denn die Katzen sind Nachttiere und können im Dunkeln noch gut sehen.

 
Weiterlesen...

from Hannes

17.10.2024 Hoffnungsschimmer Also ich hatte mich wieder mal verschlafen, darum wurde ich um 7 Uhr wach. Als Erstes guckte ich nach den Katzenpärchen, sie hatten etwas gefressen, Gott sei Dank. Dann schob ich den Wäscheturm aus der Küche in das Hinterzimmer hinein und bereitete mein Frühstück vor, auch war der Kaffee zu genießen. Ich spülte den Abwasch weg. Hinterher bügelte ich die Wäsche und musste feststellen, das kaum noch Spülmittel da war. So fuhr ich zum Geschäft und kaufte die fehlenden Artikel. Um 14 Uhr ging ich zum AWO- Nachbarschaftstreff runter. Dort wurde gespielt (Rommecup) Margret spielte es damals so gern. Als ich wieder zu Hause war, schrieb ich der Dame, das mir am 14.10 ihre Katzen an mich abgegeben hat. Ich machte für die Katzen ihr Futter fertig.. Auf einmal kam das Katzenweibchen ganz zaghaft an die Küchentür heran und ließ sich füttern. von da ab hatte in mir Vertrauen gefunden. Sie leckte meine Haare, tollte auf dem Sofa herum und ich streichelte sie. Sie stieß mit ihren Köpfchen immer meine Hand und spielte mit mir. Mein Abendbrot aß ich dadurch etwas später. Zwischendurch kam der Kater und guckte mich mißtrauisch an, er guckte zu, was ich mit der Katze mache und verschwand unterm Bett.. Die Küchentür machte ich zu und drehte den Schlüssel von der Haustür um, damit sie nicht entweichen können. In der Küche ist die Gastherme, da kann immer was passieren, wenn sie daran spielen, oder hinter die Waschmaschine fallen, da kommen sie allein nicht mehr heraus. Ja, Freunde, das sind Vorsichtsregeln, die man beachten muss, wenn man 2 Katzen in der Wohnung hat.

 
Weiterlesen...

from Libertas

Die freie Konkurrenz.

Das zweite Wort der Staatssozialisten ist stets ein Verdammungsurteil über die freie Konkurrenz. Der schrankenlosen, freien Konkurrenz, wie sie das Ding auch nennen, wird ohne weiteres Forschen die Schuld für die herrschende Misere in die Schuhe geschoben. Für alle die sozialen Übelstände, über welche gerechter- und erfreulicherweise immer lautere Beschwerde geführt wird, machen die Anhänger des Staatssozialismus die freie Konkurrenz verantwortlich. Es fällt ihnen nicht ein, einmal zu untersuchen, ob es auch wirklich auf dem Gebiet der Industrie im wahren Sinne des Worts eine freie Konkurrenz gebe. Vergebens verweist man sie auf die Tatsache, dass die Konkurrenz nicht eigentlich eine freie ist, dass also die gegen sie erhobenen Anklagen nicht die freie Konkurrenz treffen, und dass es vielmehr eine unfreie Konkurrenz ist, aus welcher die heutigen sozialen Übelstände entspringen. Vergebens hält man ihnen vor, dass Bodenrente, Kapitalzins und Profit, diese Hauptformen des an der Arbeit verübten Raubs, gerade auf die gesetzliche Beschränkung und Unterdrückung der freien Konkurrenz zurückzuführen sind, und dass unter dem Walten wahrhaft freier Konkurrenz diese Ausbeutungsformen sich nicht erhalten könnten und die Arbeit in den Besitz ihres vollen Ertrags gelangen würde. Es nutzt alles nichts, die Staatssozialisten halten eigensinnig an der einmal angenommenen Ansicht fest. Vielleicht kann ich den Staatssozialisten gegenüber die Ansicht, welche die freie Konkurrenz mit der Herausbildung und dem Fortbestand der heutigen misslichen Eigentumsverhältnisse belastet, auf keine wirksamere Weise widerlegen als durch das nachfolgende Zitat aus einer Rede Lassalles:

Rodbertus hat Sie darauf hingewiesen; wie sind die jetzigen Besitzverhältnisse entstanden? Haben dieselben unter der Herrschaft der freien Konkurrenz begonnen? Sind die Grundsätze der heutigen Vermögensverhältnisse durch die freie industrielle Arbeit gelegt? Sie sind vielmehr das Produkt einer Vergangenheit von zwei Jahrtausenden. Diese haben die Grundlage gelegt für die heutigen Verhältnisse des Besitzes. In diesen zweitausend Jahren war erst Sklaverei, dann Leibeigenschaft, dann Hörigkeit und daneben Zunftzwang. Das sind alles Staatsinstitutionen gewesen, ganz positive Staatseinrichtungen. Unter diesen Einrichtungen und durch diese gezwungen haben Sie, resp. Ihre Vorfahren, als Sklaven, als Leibeigene, als zünftige Lehrlinge und Gesellen für die jetzigen besitzenden Klassen das Vermögen produziert, das sie nun haben. Kam endlich die Französische Revolution und proklamierte die Rechtsfreiheit und die freie Konkurrenz, aber natürlich behielten die Besitzenden das Vermögen, die Waffen, die Sie ihnen geschmiedet, und erlauben Ihnen nun, unbewaffnet, mit Ihren Nägeln und Zähnen in den Wettkampf, in die freie Konkurrenz mit eben den Kapitalien und Maschinen einzutreten, die Sie durch so viele Jahrhunderte hindurch für jene erarbeitet haben.

Aus diesem Zitat geht deutlich hervor, dass Lassalle nicht die freie Konkurrenz für die herrschenden ungleichen und ungerechten Eigentumsverhältnisse verantwortlich machte, sondern den Staat mit seinen gewaltsamen Eingriffen in das Erwerbsleben der Menschen. Daraus ergibt sich für den logischen Geist von selber die Forderung nach der Elimination des Staats aus dem Industrieleben des Volks und der Herstellung wirklich freier Konkurrenz.

Aber weil es nach der Meinung der Staatssozialisten nichts Gutes mit der freien Konkurrenz auf sich hat, weil sie nach ihrer Behauptung die Gütererzeugung und Verteilung nicht in Gemässheit mit dem Begriff der Gerechtigkeit zu regeln vermag, weisen sie die Aufgabe dieser Regulierung dem Staate zu. Als ob der Staat dies vermochte! Der durch diese Forderung bekundete sozialistische Staatsbegriff entspricht genau dem Gottesbegriff des religiösen Glaubens. Ohne einen Gott kann sich der religiöse Mensch das Weltall gar nicht vorstellen. Ähnlich ergeht es dem Staatssozialisten im Hinblick auf die Volkswirtschaft. Ohne den Staat würde sich nach seiner Behauptung der industrielle Verkehr des Volks in die hellste Unordnung auflösen.

Nun, wir haben ja den Staat, und man sieht’s täglich, wie es um die Ordnung bestellt ist.

Nein, wir brauchen keinen Staat, um auf dem Gebiet des Erwerbslebens Ordnung herzustellen und zu erhalten. Was wir brauchen, ist mehr Freiheit, wirkliche, durchgreifende freie Konkurrenz. Eine ideale Ordnung wird es nie geben, aber ich hege die feste Überzeugung, dass sich die grösstmögliche Annäherung an dieselbe aus dem freien Walten der natürlichen, durch keine staatlichen Zwangsmassregeln behinderten Gesetze des menschlichen Zusammenlebens und Verkehrs herausbilden wird. Die herrschende schreiende Unordnung ist nicht die Folge der freien Konkurrenz, noch wird sie durch dieselbe aufrechterhalten; diese Unordnung ist vielmehr eine Schöpfung des Monopols, des Staats.

Nieder mit dem Monopol! Es lebe die Konkurrenz, aber die freie Konkurrenz!

G. S.

(Libertas 7, Samstag, 30. Juni 1888, S. 5.)

Anmerkungen

  • Die kursiven Hervorhebungen entsprechen dem Originaltext.
  • Ferdinand Lassalle (1825–1864) war Schriftsteller, sozialistischer Politiker im Deutschen Bund und einer der Wortführer der frühen deutschen Arbeiterbewegung. Als Hauptinitiator und Präsident der ersten sozialdemokratischen Parteiorganisation im deutschen Sprachraum, des 1863 gegründeten Allgemeinen Deutschen Arbeitervereins (ADAV), zählt er zu den Gründervätern der Sozialdemokratischen Partei Deutschlands (SPD), die 26 Jahre nach seinem Tod aus der Sozialistischen Arbeiterpartei (SAP) hervorging.
  • Das Zitat Lassalles konnte bis zum jetzige Zeitpunkt noch nicht festgemacht werden; es kann vermutet werden, dass Schumm hier aus einem Briefwechsel zitiert.
  • Johann Karl Rodbertus (1805–1875) war ein deutscher Nationalökonom. Rodbertus gilt als Begründer des Staatssozialismus, verstanden als Verstaatlichung der Produktionsmittel und des politischen Monopols.
 
Weiterlesen...

from Libertas

Herr Louis Prang von Boston bricht in einem wohldurchdachten Artikel im „American Lithographer and Printer“ eine Lanze für Freihandel. Sehr richtig finde ich es, dass er Protektion im Sinne des Staatssozialismus auffasst und verwirft. Aber wie Protektion auf den Staatssozialismus hinausläuft, so führt der konsequent durchgeführte Freihandel zum Anarchismus. Herr Prang sagt das nicht, aber ich vermute, dass er es versteht. Die meisten Freihändler verstehen es aber nicht.

(Libertas 7, Samstag, 30. Juni 1888, S. 4.)

Anmerkungen

  • Es darf vermutet werden, dass der Verfasser dieser kurzen Notiz Tucker selbst war.
  • Der „American Lithographer and Printer“ war eine seit 1883 wöchentlich in New York erscheinende Branchen-Zeitung, herausgegeben von Fred. Buehring (Quelle).
  • Louis Prang (1824–1909) war ebenfalls ein aus Deutschland über die Schweiz in die USA emigrierter 1848er. Er war Drucker, Lithograf und Verleger und wurde bekannt als „Vater der amerikanischen Weihnachtskarte“.
  • Zum Thema Staatssozialismus, Freihandel und Anarchismus vgl. Tuckers Staatssozialismus und Anarchismus.
 
Weiterlesen...

from Michael Gisiger

Lovis Corinth: Porträt des Malers Benno Becker

Kürzlich habe ich in der NZZ vom 8. Oktober 2024 einen Artikel von Mischa Senn gelesen, der mich zum Nachdenken angeregt hat. Den Beitrag fand ich in gewisser Weise inspirierend, da er eine neue Perspektive auf den Umgang mit Falschinformationen in den #Medien aufzeigt. Besonders in sozialen Netzwerken und bei durch künstliche Intelligenz generierten Inhalten wird die bewusste Unterscheidung von Wahrheit und Unwahrheit immer schwieriger. Senn unterbreitet in seinem Artikel einige Vorschläge, die uns zu einem grundsätzlich neuen Ansatz der Medienkompetenz führen könnten: Einer „Unrichtigkeitsvermutung“ gegenüber medialen Inhalten. Diesen Gedankengang möchte ich weiterführen, ergänzt durch einen Ansatz von Cal Newport, der uns hilft, unseren Nachrichtenkonsum qualitativ zu verbessern.

Senn, Dozent für Medien- und Werberecht sowie Vizepräsident der Schweizerischen Lauterkeitskommission, stellt in seinem Artikel eine These auf, die zunächst kontraintuitiv erscheinen mag: Er plädiert für eine Umkehrung des klassischen Vertrauensvorschusses, den wir vielen Medieninhalten entgegenbringen. Statt einfach davon auszugehen, dass das, was wir lesen, sehen oder hören, wahr ist, empfiehlt er eine bewusste Haltung des Misstrauens – eine Unrichtigkeitsvermutung. Diese Idee besagt, dass man jede Information zunächst als potenziell falsch betrachten sollte, solange man ihre Richtigkeit nicht unabhängig bestätigen kann.

Was zunächst als ein radikaler, vielleicht gar zynischer Ansatz wirken mag, entpuppt sich bei genauerer Betrachtung als eine notwendige Reaktion auf die Informationsflut unserer Zeit. Insbesondere in sozialen Medien, wo Inhalte oft mit einem emotionalen Unterton verbreitet werden und Algorithmen bevorzugt das zeigen, was hohe Interaktionsraten verspricht, ist eine gesunde Skepsis unabdingbar. Auch bei durch #KI generierten Inhalten ist Vorsicht angebracht, denn diese Modelle optimieren sehr oft auf kohärente Ausdrucksweise, nicht unbedingt auf faktische Richtigkeit.

Diese Unrichtigkeitsvermutung soll jedoch nicht als universeller Pessimismus verstanden werden. Vielmehr fordert sie uns dazu auf, Informationen bewusst zu prüfen und kritisch zu hinterfragen. Es geht darum, die Mechanismen der Medienproduktion besser zu verstehen und ein aktiver Teilnehmer im Kommunikationsprozess zu sein, statt ein passiver Konsument. Der Misstrauensvorschuss, von dem Senn spricht, führt nicht dazu, den Wert von Medien generell infrage zu stellen, sondern soll eine Art intellektueller Sicherheitsgurt sein, der uns vor voreiligen Schlussfolgerungen bewahrt.

Verantwortungsvoller Konsum von Informationen

Ergänzend zu Senns Ansatz möchte ich einen weiteren Vorschlag einführen, den ich in einer Podcast-Folge von Cal Newport gehört habe. Newport, Professor an der Georgetown University und bekannter Autor, Verfechter eines minimalistischeren und fokussierteren Lebensstils, spricht sich dafür aus, den Konsum von Nachrichten – und generell von Informationen – auf qualitative Weise zu steigern, während die Quantität gleichzeitig reduziert wird.

Newport schlägt ein dreistufiges Modell vor, das sich auf unterschiedliche Zeithorizonte erstreckt: täglich, monatlich und saisonal. Auf täglicher Basis empfiehlt er, eine einzelne, nicht algorithmisch kuratierte Quelle zu nutzen — zum Beispiel eine gedruckte Zeitung oder einen Newsletter. Dies steht im Gegensatz zu den Social-Media-Feeds, die uns häufig in eine Informationsschleife ziehen, in der nur Inhalte auftauchen, die besonders hohe Aufmerksamkeit generieren. Eine Tageszeitung ist hingegen eine kompakte und qualitätsorientierte Alternative.

Monatlich empfiehlt Newport zudem, zwei bis sechs lange Magazinartikel zu lesen, die Themen, die uns beschäftigen, umfassend behandeln. Diese Art der Informationsaufnahme erlaubt uns, Zusammenhänge besser zu verstehen und uns mit komplexen Fragen intensiver auseinanderzusetzen, ohne uns dabei ständig dem Aktualitätsdruck auszusetzen.

Saisonal, also einmal im Quartal, rät Newport dazu, ein fundiertes Buch zu einem der für uns relevanten Thema zu lesen. Auf diese Weise können wir uns einem Gegenstand umfassend widmen, ihn aus verschiedenen Perspektiven beleuchten und ein differenziertes Verständnis entwickeln, das weit über das hinausgeht, was durch Nachrichten oder mediale Diskurse möglich ist. Diese Leseempfehlung ermöglicht es uns, das Wissen zu vertiefen und nachhaltiger zu verankern.

Fazit: Zwei Ansätze, die sich ergänzen

Die Unrichtigkeitsvermutung nach Senn und Newports dreistufiges Modell des Informationskonsums sind auf den ersten Blick unabhängige Ansätze, die jedoch einen ähnlichen Zweck verfolgen: Beide bieten eine Reaktion auf die Herausforderungen unserer modernen Informationsgesellschaft. Senn fordert uns auf, Inhalte kritisch zu hinterfragen, bevor wir ihnen Glauben schenken. Newport wiederum gibt uns eine konkrete Methode an die Hand, wie wir bewusst Informationen selektieren können, um uns nicht im sich ständig schneller drehenden Nachrichtenzyklus zu verlieren.

Beide Ansätze rufen zu einem bewussteren Umgang mit Informationen auf, jedoch auf unterschiedliche Weise. Senn möchte unsere Haltung gegenüber Medieninhalten verändern, Newport hingegen die Art und Weise, wie wir den Informationsfluss strukturieren. Im Zusammenspiel bieten beide Modelle eine effektive Möglichkeit, der Reizüberflutung und der oftmals fragwürdigen Qualität der angebotenen Informationen entgegenzuwirken.


Bildquelle Lovis Corinth (1858–1925): Porträt des Malers Benno Becker, Von der Heydt-Museum, Wuppertal, Public Domain.

Disclaimer Teile dieses Texts wurden mit Deepl Write (Korrektorat und Lektorat) überarbeitet. Für die Recherche in den erwähnten Werken/Quellen und in meinen Notizen wurde NotebookLM von Google verwendet.

Topic #Kommerz

 
Weiterlesen...

from Der Emil

sage ich zu mir und stecke einmal mehr im Spalt zwischen himmelhoch jauchzend und zu Tode betrübt fest. Immer dann, wenn mir etwas nicht schnell genug geht, kommen Ängste dazu, deren Überwindung mich viel mehr Kraft kostet, als ich dafür auzuwenden dachte. Und dann die jubelnde, hoch hinauftragende Hoffnung, wenn etwas dem entspricht, in etwa dem entspricht, das ich mir ausgemalt hatte in leuchtenden Grautönen (Farben sind dann doch eher nicht meines). Ja, das Leben ist nicht mittelmäßig, es ist mittelschön (und mittelschlecht kenne ich auch). Das heißt, die schönen Momente überwiegen um eine Winzigkeit die schlechten Momente. Und wenn ich erst begriffen haben werde, daß die Ängste vollkommen irrational und überflüssig sind, dann …

Ich gestehe, ich habe seit langem wieder einmal eine Ahnung davon, wie ein (für mich) gutes Leben aussehen kann; und daß es so wird, ist nicht mehr absolut unwahrscheinlich.

Kryptisch? Naja, es ist nicht einfach, auf diesem Gebiet alle Tarnungen und Schutzmechanismen fallenzulassen.

 
Read more...

from Hannes

  1. 10.2924- 15.10.1024 wechselhaft, Freudentränen Guten Tag, am Freitag, war bei mir wenig zu tun, bis auf wenige Haushaltsarbeiten war alles sauber. Die Lieferung der Katzennahrung stellte ich in dem unteren Teil des Bücherschrankes, dort lagern sie gut. Ich bereitete schon im Wohnzimmer alles vor. Natürlich blieb das Katzenzubehör vorerst in den Schränken. Ich kann es nicht haben, wenn vorher alles herumsteht, obwohl die Katzen noch beim Halter sind. Anschließend schrieb einige Kapitel vom Blog in das Handbuch.——— Der 13.10. 2024 war ein kalter und unfreundlicher Tag, zuerst war es ziemlich trocken. Es wehte manchmal ein Wind in Böen und pfiff uns um die Ohren. Daher stellte ich das Auto am Parkstreifen ab und ging in die Wohneinrichtung W.O.S. Dort warteten wir zu Dritt auf das Taxi, das uns nach Oberhausen zum St. Anthoniusfest bringen sollte. Nach 50 minutiger Fahrt, erreichten wir das Gelände. Es war schon ziemlich was los. Wir trafen auch unsere Andachtsfreunde und gingen an Marktständen vorbei. Viele Leute sah man in Biedermannkleider herum laufen, sie waren lustig anzusehen. Außer den Würstchen und ein Becher Bier, hatte mir nichts genommen. Ab und zu fuhr eine kleiner Dampfzug seine Runden und mussten Platz machen, als er kam. Später waren viele Leute auf dem Gelände. Es kam Regen auf und mussten uns unterstellen. Als es um 16 Uhr war, verabschiedeten wir uns von dem Rest des Teams und fuhren nach Hause. Im Großen und Ganzen war es ein schöner Sonntag, auch das Uschi, Sascha, Dorothee, Neele und wir 3 mit dabei waren. Vor Allem, das ich nach langer Zeit aus den 4 Wänden heraus kam, um mal was anderes zu erleben. 14.10.2024. Hurra, die Katzen holte ich ab, gestern Abend rief die Dame noch bei mir an, ob ich ihre Katzen schon früher abholen könnte, ich sagte ja und stellte mein Navi auf Vorbereitung ein. ———-Endlich war es so weit, mit Hilfe des Navis steuerte das Auto nach Hagen. Geplant, war 9 Uhr 30 ich war aber 10 Minuten früher am Standort, wie es sich gehört. Ich hörte Stimmen im Haus, die Haustür öffnete sich, eine junge Dame kam heraus, und überreichte mir einige Tüten voll mit Katzenzubehör. Ich brachte die Transportboxen nach oben, aber ich musste draußen vor der Tür warten. Die Katzen hatten Angst, aber ich nahm die Boxen ins Auto und transportierte die Tiere nach Hause. Ich ließ sie frei. Nun musste ich erst mal fertig machen für sie, die Katzentoiletten her richten, Futter und Wasser für sie hinstellen. Der Kater versteckte sich unter der Heizung . ich wollte ihn herausholen und er biss mir in die Hand. Es hat auch geblutet und ging zum Arzt und ließ mir die Wunde sterilisieren und verbinden. Ich musste Tabletten schlucken . Am Abend trank ich eine Aspirintablette, damit die Schmerzen nachlassen. Im Supermarkt kaufte ich noch Vorrat für die Andacht ein.———15.10.2024 Nachts hörte ich ein Scheppern. Eine Katze war im Büro am Fensterbrett und schmiss eine Ziervase herunter. Leider war sie kaputt. Am Morgen sammelte ich Scherben auf. der Kater hatte sich versteckt und die Katze war unterm Bett. Das ist klar, das sie Angst vor mir haben, sie verkriechen sich. Aber das ist immer so neue Menschen und andere Gegend. Sie müssen sich erst einmal dran gewöhnen, um zu mir Vertrauen zu gewinnen.
 
Weiterlesen...

from Inside Out Insights

In today's interconnected world, user authentication plays a critical role in ensuring the security and integrity of computer systems. Whether it's logging into an application, accessing sensitive data, or protecting digital assets, effective user authentication is essential to verify the identity of individuals accessing these resources.

One powerful tool in the realm of authentication is the Pluggable Authentication Module (PAM). PAM provides a flexible framework for implementing authentication mechanisms in various Unix-like systems, allowing system administrators to integrate multiple authentication methods seamlessly.

In this blog post, we will delve into the intricacies of PAM, exploring its architecture, modules, and control flags. We will understand how PAM separates the authentication process from individual applications, providing a centralized and standardized approach to authentication.

Furthermore, we will take our understanding of PAM a step further by demonstrating how to develop a custom PAM module using Python. With Python's simplicity and versatility, we can create a module that extends the authentication capabilities of our system, enabling us to implement custom authentication logic to meet our specific requirements.

We will walk through the process of developing a Python-based PAM module, discussing the code, its functionality, and the configuration options available. Additionally, we will explore the steps for integrating our custom module into the PAM system and provide practical guidance for configuring and using the module effectively.

By the end of this blog post, you will have a comprehensive understanding of PAM, the ability to create custom PAM modules, and the knowledge to enhance authentication solutions in your system. So, let's dive in and unravel the world of PAM and custom authentication modules!

An Overview of PAM

What is PAM?

Pluggable Authentication Modules, or PAM, are dynamic libraries that provide a generic interface for authentication-related tasks. It effectively separates the specifics of authentication from applications, allowing system administrators to customize authentication procedures without changing or rewriting the software.

By using PAM, a system can implement a range of authentication methods including, but not limited to, password, biometric, or hardware-based authentication. PAM's flexibility and extensibility give it a significant advantage over hard-coded authentication mechanisms, ensuring the system remains robust and adaptable to emerging security challenges.

When an application needs to authenticate a user, it can invoke PAM as an authentication module. Here's an explanation of how the application interacts with PAM during the authentication process:

  1. Application Initialization: The application initializes the authentication process, typically when a user attempts to log in or access a protected resource. It identifies that user authentication is required.
  2. Application-PAM Interaction: The application interacts with PAM by calling PAM functions or APIs provided by the operating system. These functions allow the application to initialize the PAM authentication process and pass relevant information, such as the username and authentication credentials, to PAM.
  3. PAM Stack Invocation: Once the application interacts with PAM, the PAM layer comes into play. PAM invokes a predefined stack of modules based on the configuration for the specific service or application. The stack defines the order and types of modules to be executed during the authentication process.
  4. Authentication Modules: The first set of modules to be executed within the PAM stack are the authentication modules. These modules are responsible for verifying the user's identity by validating the provided credentials, such as a password, biometric data, or a cryptographic key. Each authentication module performs its verification process, and the results are passed back to the PAM layer.
  5. Account Modules: After the authentication modules, the account modules are invoked. These modules check whether the authenticated user has the necessary permissions or access rights to use the application or access-specific resources. They enforce any account-related policies or restrictions defined in the configuration.
  6. Session Modules: The session modules come into play once the user's authentication and account have been validated. These modules handle the setup and management of the user's session, ensuring that resources are allocated, environment variables are set, and any necessary actions are performed to initialize the user's session.
  7. Password Modules: If the user successfully passes the previous modules, the password modules are invoked. These modules manage password-related tasks, such as password change or updating mechanisms. They enforce password policies, handle password encryption, and perform any necessary actions to maintain the security of user credentials.
  8. PAM Result: Throughout this process, PAM keeps track of the results from each module. Based on the results, PAM determines whether the authentication process is successful or not. The final result is passed back to the application, indicating whether the user is authenticated or denied access.

By invoking PAM as an authentication module, the application leverages the flexibility and extensibility of the PAM framework. It delegates the responsibility of authentication to the PAM layer, allowing for centralized and customizable authentication processes across different applications and services.

Dive into PAM Modules and Stacks

PAM employs a modular approach to authentication. Each PAM module is essentially a shared library, written in C or another supported language, which implements a specific authentication mechanism. Some common examples of PAM modules include pam_unix.so for traditional password authentication, pam_cracklib.so for password strength checking, and pam_nologin.so for denying logins when /etc/nologin exists.

Each of these modules performs specific tasks by implementing different interfaces. Some modules implement all of these interfaces (pam_unix.so, pam_systemd.so, etc). These interfaces are executed as various stages of the authentication process. such as verifying a user password (auth), providing password changing function (password), setting up user credentials (session), or establishing account management commands (account).

PAM uses a concept called “stacks” to organize these modules for each service that requires authentication. A PAM stack is essentially an ordered list of module entries, read from top to bottom. For each module entry, PAM will execute the corresponding module and depending on its success or failure, and the control flag associated with it, will continue, terminate, or skip other modules.

Control flags play a pivotal role in controlling the authentication flow. There are four types of control flags:

  • required: The module must pass for authentication to succeed. If it fails, the user will not be notified until the results of all module executions are available.
  • requisite: Similar to required, but in case of failure, the authentication process returns immediately, denying the user.
  • sufficient: The module is not necessary for authentication. If it passes and no previous required module has failed, PAM returns immediately, granting the user access.
  • optional: The module is not necessary for authentication. It only matters if it is the only module associated with a particular service.

Let's visualize this with a hypothetical PAM stack for the login service:

# /etc/pam.d/login
auth       requisite      pam_securetty.so
auth       required       pam_unix.so nullok
auth       optional       pam_group.so
account    required       pam_unix.so
password   required       pam_cracklib.so
password   required       pam_unix.so obscure sha512
session    required       pam_unix.so

This PAM configuration you've provided is related to the login service on a Unix-like system. It contains four types of module-types: auth, account, password, and session. Here's a breakdown:

  1. auth: Determines how a user will prove their identity. In this case, there are three modules:
    • pam_securetty.so: It restricts root access to the system through devices that aren't listed in the /etc/securetty file. “Requisite” here means that if this module fails, the entire authentication process will be dropped immediately, presenting a failure message to the user.
    • pam_unix.so: It is a standard module for traditional password authentication. It uses standard UNIX password encryption. The nullok argument means it's okay if the password field is empty; it won't cause an authentication failure.
    • pam_group.so: It is used to grant additional group memberships based on the user's ID, service, and terminal. It is only included as optional
  2. account: Manages user account properties, usually related to access controls and resource usage.
    • pam_unix.so: In the context of the account type, it checks for password expiration, account expiration, and whether the user is allowed to access the system at the current time.
  3. password: Deals with password management.
    • pam_cracklib.so: It checks the strength of a password against a library of known weak passwords.
    • pam_unix.so: It handles password updates. The obscure argument checks for simple passwords, and sha512 indicates that the updated passwords should be hashed using the SHA-512 algorithm.
  4. session: Configures and manages user sessions.
    • pam_unix.so: It handles session-related tasks such as mounting the user's home directory and logging session opening/closing.

Remember that PAM modules are processed in the order they're written in the configuration file. The flow stops either when a module fails (if it's marked as requisite or required) or at the end of the module list (if all the modules are marked as optional). In this case, if pam_securetty.so fails, the user isn't authenticated, no matter the result of the other two auth modules.

This modular design gives PAM immense flexibility, allowing you to choose authentication policies that best suit your system's security needs.

The ability to customize the control flow via these flags allows for a granular level of control over the authentication process, making PAM an adaptable and powerful framework for system security.

Developing a Custom PAM Module

As we delve deeper into the world of PAM, it becomes clear that one of its standout features is the ability to develop custom modules. This functionality not only allows for system-specific authentication methods, but also enables rapid development and integration of new security mechanisms as the need arises. This way, you can seamlessly adapt your authentication strategies to meet evolving security challenges or unique system requirements.

However, it's worth noting that with this flexibility and adaptability comes an increased responsibility. When developing custom PAM modules, care should be taken to ensure that security best practices are followed. After all, the code you write will form a part of the system's authentication mechanism. In particular, the source code for the modules should be guarded carefully. If an attacker gains access to this code, they could potentially modify it to circumvent the entire authentication process.

In this section, we will demonstrate how to create a custom PAM module using Python – a language chosen for its ease of use and wide range of libraries. Our module will extend the system's existing authentication capabilities, showcasing the flexibility and adaptability that makes PAM a powerful tool in the hands of system administrators and security professionals.

What Makes a PAM Module?

A PAM module is essentially a shared library that provides one or more of four basic service types: authentication management (auth), password management (password), account management (account), and session management (session).

In a PAM module, there are several interfaces that correspond to different stages of an authentication process. These stages include setting up credentials, managing user accounts, managing user sessions, and changing authentication tokens. For each of these stages, there's a corresponding function that the module needs to implement:

  • pam_sm_authenticate: This is the primary function of a PAM module responsible for carrying out the authentication process. It uses the authentication mechanism defined for the module to verify the user's identity. For our Python-based PAM module, this function prompts the user for their Password and validates it against the stored Password in the shadow file.
  • pam_sm_setcred: After a successful authentication, the PAM framework often needs to set up specific user credentials. This process is handled by pam_sm_setcred. Our module, however, doesn't require any specific credential setup, so this function always returns PAM_SUCCESS, signaling a successful operation to the PAM system.
  • pam_sm_acct_mgmt: Once the user is authenticated and their credentials have been set, the PAM framework proceeds with account management tasks, which is where pam_sm_acct_mgmt comes into play. Again, our module doesn't perform any specific account management tasks, hence the function simply returns PAM_SUCCESS.
  • pam_sm_open_session and pam_sm_close_session: These functions correspond to the lifecycle of a user session, from initiation to termination. They can be employed for specific tasks upon opening or closing a user session. For our module, both these functions return PAM_SUCCESS as we're not managing session-specific activities.
  • pam_sm_chauthtok: This function is invoked when the user's authentication token (such as a password) is to be changed. While our module doesn't handle token changes and returns PAM_SUCCESS, in more comprehensive applications, this function could enforce password complexity rules, synchronize password changes across systems, or provide other token management features.

Let's take a closer look at a simple PAM module written in Python. The module will perform basic password authentication, comparing a user's input against a stored password:

import spwd
import crypt

def pam_sm_authenticate(pamh, flags, argv):
    try:
        entered_password = pamh.authtok
        stored_password = spwd.getspnam(pamh.user)[1]
    except Exception as e:
        return pamh.PAM_AUTH_ERR

    if crypt.crypt(entered_password, stored_password) != stored_password:
        return pamh.PAM_AUTH_ERR

    return pamh.PAM_SUCCESS

def pam_sm_setcred(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_acct_mgmt(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_open_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_close_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_chauthtok(pamh, flags, argv):
    return pamh.PAM_SUCCESS

In this example, pam_sm_authenticate is the main function of interest. It takes three arguments: pamh (the PAM handle, which is an object encapsulating all PAM-related data), flags (which can be used to modify the module's behavior), and argv (the arguments passed to the module).

This function fetches the entered password from the PAM handle and the stored password for the given user from the system's shadow password database. It then uses the crypt library to hash the entered password with the salt from the stored password. If the hashed entered password doesn't match the stored password, the function returns PAM_AUTH_ERR, indicating an authentication error. Otherwise, it returns PAM_SUCCESS, indicating successful authentication.

The other functions (pam_sm_setcred, pam_sm_acct_mgmt, pam_sm_open_session, pam_sm_close_session, and pam_sm_chauthtok) are required to complete the PAM module. In this simple example, they don't do anything and simply return PAM_SUCCESS. In a more complex module, these could handle tasks like setting user credentials, managing user accounts, opening and closing sessions, and changing authentication tokens (passwords), as mentioned above.

This example should give you a basic idea of what a PAM module looks like. From here, you can extend and modify this template to create a PAM module that meets your specific needs.

Modifying the template to a custom PIN Login

Let's explore our custom Python PAM module. This module uses a custom PIN for authentication. Here's the complete code:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import json

def _get_config(argv):
    config = {}
    for arg in argv:
        argument = arg.split('=')
        if len(argument) == 1:
            config[argument[0]] = True
        elif len(argument) == 2:
            config[argument[0]] = argument[1]
    return config

def _get_pin_file(config):
    try:
        pin_file = config['pin_file']
    except:
        pin_file = "$HOME/.config/pin"
    return pin_file.replace('$HOME',os.environ.get('HOME'))

def _get_max_tries(config):
    try:
        max_tries = config['max_tries']
    except:
        max_tries = 0
    return max_tries

def pam_sm_authenticate(pamh, flags, argv):
    config = _get_config(argv)

    try:
        user = pamh.get_user()
    except pamh.exception, e:
        return e.pam_result

    if not user:
        return pamh.PAM_USER_UNKNOWN

    try:
        resp = pamh.conversation(pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,
                                 'Password: '))
    except pamh.exception, e:
        return e.pam_result

    max_tries = _get_max_tries(config)
    pin_file = _get_pin_file(config)

    if not os.path.exists(pin_file):
        return pamh.PAM_AUTH_ERR

    creds = json.load(open(pin_file))
    if creds['tries'] <= max_tries or max_tries == 0:
        if creds['pin'] == resp.resp:
            creds['tries'] = 0
            json.dump(creds, open(pin_file, 'w+'))
            return pamh.PAM_SUCCESS
        else:
            creds['tries'] += 1
            json.dump(creds, open(pin_file, 'w+'))

    return pamh.PAM_AUTH_ERR

def pam_sm_setcred(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_acct_mgmt(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_open_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_close_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS

def pam_sm_chauthtok(pamh, flags, argv):
    return pamh.PAM_SUCCESS

The main function here is again pam_sm_authenticate. It reads the module configuration from the arguments passed to it. The configuration parameters include the path to the PIN file (pin_file) and the maximum number of authentication attempts allowed (max_tries).

The PIN file is a JSON file storing the correct PIN and the number of unsuccessful authentication attempts made so far. If this file doesn't exist or can't be read, the function immediately returns an authentication error.

Following that, the function retrieves the user's credentials. If the user doesn't exist, it instantly returns an error signaling an unknown user.

The function then prompts the user to enter their PIN. If the PIN matches the one stored in the file and the number of unsuccessful attempts has not exceeded the maximum allowed, the function resets the count and returns PAM_SUCCESS, signifying successful authentication. If the entered PIN doesn't match the stored one, the function increments the count of tries and returns PAM_AUTH_ERR, indicating an authentication error.

This custom PAM module adds a second factor of authentication, or simple PIN Authentication with a custom user configurable PIN. By leveraging Python's innate support for JSON and OS interfaces, this demonstrates the potential and flexibility that custom PAM modules can provide.

Integration and Usage

Now that we have our Python-based PAM module ready, the next step is integrating it into our system and putting it to use.

Pre-requisites

To use our custom Python PAM module, we must satisfy a few pre-requisites:

  • Python: Since our module is written in Python, you must have Python installed on your system. Most Unix-like operating systems already come with Python pre-installed. You can check the installed version by typing python --version in your terminal. If Python is not installed, or you need a different version, follow the official Python installation guide.
  • pam_python: pam_python is a PAM Module that runs the Python interpreter, thus allowing PAM Modules to be written in Python. The module we've developed relies on pam_python.so to interface with the system's PAM library. Depending on your Linux distribution, you may need to install it manually. On Ubuntu, for example, you could install it with: sudo apt-get install libpam-python For other distributions, please consult their specific package management systems or compile from source if necessary. Be aware that pam_python.so must be compatible with the version of Python you're using for your module.
  • Python Libraries: Ensure all Python libraries used in your PAM module are installed. In our example module, we're using os and json, which are part of Python's standard library and thus do not need separate installation.
  • System Permissions: PAM modules are run as the root user, since they need to interact with system-level authentication processes. Ensure that your system permissions allow for the execution of your PAM module, and that it is securely stored in a directory that's accessible to the root user.

Placing the Module

Copy the Python PAM module script to a suitable location. For instance, you can place it in /usr/local/lib/security/. Make sure the permissions are set correctly, so that the module is readable by the services that will use it.

sudo cp my_module.py /usr/local/lib/security/
sudo chmod 644 /usr/local/lib/security/my_module.py

Configuring PAM

The PAM library determines the sequence and execution of the PAM modules through the configuration files. Each service using PAM has its own configuration file. On most Unix-like systems, these are stored in the /etc/pam.d/ directory. The configuration files use a simple syntax to define the module stack for a given service.

Firstly, you must decide which service(s) you want your custom module to be integrated with. This could be a single service like SSH (sshd), or multiple services depending on your needs.

Once decided, you will need to edit the configuration file for each selected service. Let's use sshd as an example. Open the SSH PAM configuration file using a text editor with root privileges. You can use nano, vi, or any text editor of your choice. Next, add the following line to the configuration file:

auth required pam_python.so /usr/local/lib/security/my_module.py

Here's a breakdown of what this line means: * auth: This indicates the type of module. In this case, it's an authentication module, which verifies the user's identity. * required: This is the control flag. If the module returns a failure, the whole authentication process fails, and no subsequent modules of the same type (in this case, auth) are executed. * pam_python.so: This is the PAM module to be invoked. pampython.so runs Python scripts as PAM modules. * /usr/local/lib/security/my_module.py: This is the full path to the Python script we want pampython.so to execute.

Note that the line we added should be placed correctly according to the desired sequence of module execution in the stack.

Once you've saved and closed the file, PAM is configured to use your custom module for SSH authentication.

Remember, always back up your original configuration files before making any changes to them. In case something goes wrong, you can restore the original configuration. Be aware that incorrect PAM configurations can potentially lock you out of your system.

Configuring Module Parameters

You can pass parameters to your PAM module directly from the configuration file. In our custom module, we used parameters to configure the PIN file location and the maximum number of tries.

To set these parameters, you add them to the end of the line in the configuration file, like so:

auth required pam_python.so /usr/local/lib/security/my_module.py pin_file=/path/to/pin/file max_tries=3

In this line, pin_file is set to /path/to/pin/file, and max_tries is set to 3. These will be the default settings for the module unless they're overridden by the user.

This way, you can tailor the behavior of your module without modifying the Python code, making your module more flexible and reusable.

Testing

Testing is of paramount importance in any software development process, and it becomes especially critical when dealing with sensitive components like authentication modules. There are several reasons why rigorous testing should be an integral part of developing a custom PAM module:

  • Verification of Functionality: Testing ensures that the module functions as expected, successfully performing its intended tasks. A PAM module handles sensitive operations related to user authentication, making it crucial to verify that it correctly authenticates valid users and restricts unauthorized ones.
  • Security Assurance: A poorly tested PAM module could have vulnerabilities that could be exploited, potentially leading to severe security breaches. Comprehensive testing helps detect and address any such weaknesses, thereby enhancing the overall security of the system.
  • Prevention of System Disruptions: PAM modules are intimately linked with the system's authentication processes. If not correctly implemented or integrated, they can cause widespread disruptions or even lock users out of the system. Rigorous testing can prevent such disruptions by identifying issues before deployment.
  • Enhancing Code Quality: Testing can also help improve the quality of the module's code by identifying inefficient or redundant segments. This process can lead to more maintainable and efficient code, making future updates or modifications easier.

Given these critical factors, it is clear that thorough testing is not just an optional step but an essential part of the development and integration of a custom PAM module. It contributes significantly to ensuring the stability, security, and reliability of the overall system.

Troubleshooting

When integrating and testing your PAM module, you might encounter some issues. Here's how to troubleshoot common problems, including which log files can provide useful insights.

  • Authentication Fails Unexpectedly:

If the module fails to authenticate despite providing valid credentials, check for any syntax or logical errors in your Python script. Also, verify if the PIN file is correctly formatted and contains the correct data. The Python error logs can often provide useful insights about what's causing the failure. Additionally, the /var/log/auth.log file records all authentication attempts, and checking this log can help you pinpoint the issue.

  • The Module Doesn't Seem to be Invoked:

If it seems like your module isn't being invoked at all, double-check the PAM configuration. Make sure that the module is correctly referenced in the appropriate service's configuration file and the path to the Python script is accurate. If the problem persists, the /var/log/syslog or /var/log/secure (location depends on your system) can provide more information about system events and could contain details about why your module isn't being called.

  • PAM Ignores the Control Flag:

If it appears that PAM isn't respecting the control flag (e.g., required, sufficient, etc.), ensure that the flag is correctly specified in the configuration file. Remember, the order of the modules in the configuration file matters, and they are processed in the order they appear. The /var/log/auth.log file can provide insights into the authentication process, which may help diagnose the problem.

  • Changes to the Configuration File Don't Take Effect:

If changes to the PAM configuration file don't seem to take effect, make sure you're editing the correct file for the service you're testing. Also, confirm that you've saved the changes and the configuration file has the correct permissions. The /var/log/syslog or /var/log/secure files may have relevant information if the system isn't recognizing your changes.

  • System-Wide Issues After Deploying the Module:

If you experience system-wide issues after deploying the module (e.g., users unable to log in), it might be because the module is incorrectly blocking authentications. Be very cautious when deploying a custom PAM module system-wide and always have a secure way to revert the changes. In such a case, both the /var/log/auth.log and the /var/log/syslog or /var/log/secure files can provide crucial information about what went wrong.

Remember, understanding PAM and its working is critical when troubleshooting a custom PAM module. Incorrect configurations can lead to system-wide issues, potentially locking all users out of the system. Always test your module thoroughly in a controlled environment before deploying it on a live system.

Conclusion

In this blog post, we explored Pluggable Authentication Module (PAM) and how to create a custom PAM module in Python. We learned about the importance of user authentication and how PAM provides a flexible framework for authentication.

By developing a custom PAM module, you can extend the authentication capabilities of your system. We discussed the structure and functionality of a Python-based PAM module and covered the integration and usage process.

Thorough testing is essential to ensure proper functionality and system stability. We highlighted the significance of troubleshooting and provided guidance on where to look for relevant log files.

Creating custom PAM modules allows you to tailor authentication processes to your specific needs, enhancing security and flexibility. We encourage you to continue exploring PAM and experimenting with custom modules to bolster the security of your systems.

Happy coding and secure authentication!

 
Weiterlesen...