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 HDValentin

Ich habe über die Computertruhe ein altes iPad 2 gespendet bekommen. Leider ist es so alt, dass Apple die Softwareunterstützung eingestellt hat. Die letzte iOS-Version hat die Nummer 9.3.5. Aktuell ist 2023 eine Version rund um Nummer 16. Damit kann ich es nicht an bedürftige Menschen weitergeben.

Das Gerät lässt sich starten und einrichten. Allerdings funktionieren die meisten Internetseiten, Mediatheken und Streamingdienste nicht. Geschätzt 95 Prozent der Anwendungen im App Store können nicht installiert werden. Es kommt die Meldung, dass die App inkompatibel ist oder eine höhere Betriebssystemversion erfordert.

Was kann ich mit dem Gerät noch tun

Das iPad hat mit seinen 12 Lebensjahren noch einen klaren Klang, der Bildschirm ist leuchtstark und einwandfrei und der Akku wird geladen. Also für mein Empfinden ist es noch zu früh für den Recyclinghof. Also habe ich mich auf die Suche gemacht.

Letzte funktionierende App installieren

Über einen Umweg lassen sich Apps doch installieren. Gefunden habe ich die Lösung auf der Seite macreports.com.

https://www.youtube.com/watch?v=Rg-iBlexOqM

Jailbreak

jailbreaking in der englischen Wikipedia jailbreaking in der Wikipedia

https://www.wikihow.com/Jailbreak-an-iPad-2

https://www.reddit.com/r/jailbreak/

The best you can do is to jailbreak it and nope people have archived / cracked old versions of apps that either entertain you or still work as @Nimesh Neema suggested.

For current hardware and software, jailbreaks can add new features and light customization of iOS, it’s not really a new OS. Almost never does a jailbreak allow you to install apps that require a newer iOS, but likely you can install apps outside of the AppStore or ones that are no longer signed or updated or distributed from Apple.

Virtualisierung

https://getutm.app/

Linux auf dem iPad

Linux auf Apple Geräten in der englischen Wikipedia ipadlinux.org arstechnica tuxpad you-can-teach-an-old-ipad-new-tricks-linux-kernel-5-18-on-apple https://www.tecchannel.de/a/windows-mac-os-x-und-linux-auf-dem-ipad-pro-nutzen,3289467

https://docs.getutm.app/installation/ios/ https://altstore.io/

https://macreports.com/how-to-install-apps-on-older-devices-running-older-versions-of-ios/

https://www.macwelt.de/article/966351/iphone-ipad-ipod-alt-alternative.html

https://www.maclife.de/ratgeber/altes-ipad-weiter-nutzen-anwendungen-aeltere-tablets-100112107.html

https://www.mactechnews.de/forum/discussion/iPad-von-1012-zu-alt-fuer-ALLES-341414.html

 
Weiterlesen...

from rootww

We'll use OpenVPN install script.

Downloading Script

curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh

Running Script

sudo ./openvpn-install.sh

For IP address, just press enter.

If you wanna use IPV6, you can say y, if you don't want, you can say n.

In port choice, I recommend using Random.

In Protocol, I recommend UDP. If it's not available, just use TCP.

Select a DNS to use in your VPN. I recommend Adguard DNS.

In compression, I recommend n.

In encryption settings, I recommend n. Because script is setting a lot of settings already. We don't need to modify them.

Script will install packages.

We'll create a client. It can be your PC, phone etc. Give a name for it.

If you wanna use a password, you can select it.

It will create ovpn file in your home directory. We need to download this file to your host machine.

You can use sftp in your host machine.

Connecting

Download OpenVPN, and connect to your VPN.

If you are using KDE Plasma, you don't need to download OpenVPN app. Just go to * Settings * Wi-Fi & Internet * + * Import new connection * Select your OVPN file * Click to network button in your taskbar * Find your VPN connection * Click Connect

 
Read more...

from rootww

DNF is very slow without modifying dnf.conf. We'll modify /etc/dnf/dnf.conf for speed up DNF.

Dependencies

deltarpm

DNF.conf

Add these to /etc/dnf/dnf.conf:

# dnf.conf
fastestmirror=true
max_parallel_downloads=20
deltarpm=true

By the way, you can add defaultyes=true for [Y/n] (default is [y/N]) in package installs.

 
Read more...

from rootww

You can encrypt/decrypt your files with GPG.

1. Creating GPG Key

Run gpg --full-gen-key and answer questions.

IMPORTANT key-id = keys' mail

1.1. Creating Backup for a GPG Key

1.1.1. Creating Backup File

gpg --export-secret-keys --output private-key.asc --armor [key-id]

1.1.2. Importing Backup File

gpg --allow-secret-key-import --import private-key.asc

[!WARNING] You should store this private-key.asc file in a safe storage like your USB. Don't upload it to Drive etc., if you want to do that, you can upload it as encrypted zip file.

2. Exporting and Importing Public Keys

You can share your public key. With public key, people can encrypt files for you.

You can find people's keys in https://keys.openpgp.org. Just type an email, you'll see GPG key. For example, you can try typing rootww@duck.com for my GPG key.

If you encrypt a file with your key, only YOU can decrypt it.

2.1. Exporting Public Key

gpg --armor --output [keyname].key --export [key-id]

2.2. Importing Public Key

gpg --import [keyname].key

3. Encrypt and Decrypt Files

3.1 Encrypting Files

gpg -r [key-id] --encrypt [non-encrypted file]

For example, you have my key. (As I said, you can find in OpenPGP Keys page.) You can encrypt a file for me with rootww@duck.com key-id.

3.2 Decrypt Files

gpg --decrypt [encrypted file] --output [output file]

If file is encrypted for you, you can decrypt it with this command. But don't forget, you should have your private key to decrypt.

 
Read more...

from Marc's Blog

I thought I'd write a summary in English of what's going on in German politics at the moment, as even the Germans don't have enough hands anymore to throw them up in horror, and the details may be lost in the aftermath of the US election. So I figured it might be of interest to some people abroad who don't follow German news so closely.

Well, the German coalition government of SPD (social democrats), Greens and FDP (liberals) collapsed last Wednesday and there will be early elections in February 2025. Regular elections would have been held in November anyway, so there's not that much of difference timewise.

But the reason for the collapse is clear: FDP leader Christian Lindner, until last week finance minister. He and his party have repeatedly shown that they are not trustworthy coalition partners. Wikipedia describes the FDP as liberal, but I think that has a different meaning in Germany than it does in the US. I would consider them free-market neo-feudalists, so they are more right than left. If they could, they would like to completely abolish the welfare state and privatise everything, in the spirit of Margaret Thatcher. They only do patronage politics for the rich.

To be honest, it's surprising that the coalition lasted as long as it did. In the last months there has been a big fight between the three parties over the budget, and Lindner has blocked any compromise and any concessions from the others. Roughly a week before the meeting last Wednesday, he published a paper advocating a completely different and opposing economic policy, which could only be seen as an affront. His aim was to bring down the coalition and lead to new elections. This was supported from the beginning by Matthias Döpfner, CEO of the Axel-Springer publishing house, which owns the German Bild newspaper and Die Welt, among others.

But at Wednesday's meeting, Lindner made a mistake and gambled away. The FDP was indiscreet with the press, which reported during a session break that there would be new elections. Scholz reacted to this loss of trust by sacking Lindner on the spot. Afterwards, Scholz gave probably the best speech of his life and publicly slammed Lindner in a way that no one would have expected him to do.

His speech can be seen here, with the possibility of english subtitles: https://www.youtube.com/watch?v=_q7sVdDibIU

As a result, the FDP and all its ministers left the coalition. The only exception was Transport Minister Volker Wissing, who left the FDP instead – a thoroughly respectable decision.

Now the opposition is taking the stage. Chancellor Olaf Scholz wanted to call a vote of confidence in mid-January. This was too late for the opposition party CDU and its leader Friedrich Merz. In order to push through urgent legislation together with the SPD and the Greens, he tried to blackmail Scholz into bringing forward the vote of confidence and thus forcing new elections earlier. (Because everyone wants to campaign during the Christmas period... Not).

After some back and forth, it has now been informally decided that new elections will be held on 23 February.

What are the prospects for the future? Scholz is once again the SPD's candidate for chancellor. Many think that Defence Minister Boris Pistorius would have been a better choice, as he is far more popular than Scholz, but never mind. Robert Habeck, the current Minister of Economic Affairs, has thrown his hat into the ring as the Greens' candidate for chancellor.

According to the latest polls, the FDP's approval ratings are so low that they are unlikely to return due to the 5% threshold. Good riddance.

However, it is highly likely that Friedrich Merz will win a majority with the CDU. (The CDU is also the party to which Chancellor Angela Merkel belonged.) Merz himself is seen as a kind of Trump light by many. He may be able to form coherent sentences, but he is bending the facts to suit his agenda. He is a tough populist and a power-political tactician. In recent months, he has made headlines for his rhetoric against foreigners and the unemployed. He has adopted much of the narratives of the far-right AfD, which has grown stronger in recent months, partly because its positions have been further normalised in the media.

It is difficult to say what the next election results will be, as there is another free radical in the form of the new BSW party. They are even less concerned with the facts and tend to favour Russian propaganda.

In any case, there is a good chance that the CDU, AfD and BSW will get a big slice of the cake. The AfD wants to destroy democracy from within and I think it will be nearly impossible to form a stable government with these three parties.

The SPD and the Greens are unlikely to get a majority, as many were unhappy with the current coalition. But this was also caused by various smear campaigns in the Axel Springer press. It is also difficult to say how good a candidate Habeck is for the Greens' chancellorship. He is by far the only one who makes his policies transparent and who can argue well and objectively. Nevertheless, there are many who don't necessarily like him. He is not afraid to confront people with unpleasant truths, which does not always go down well. In addition, many regular Green voters are extremely angry because the party has also supported decisions that go against its own values, particularly in the area of asylum law.

In short, the new election will be a game of Russian roulette. We may be lucky, but I also see a high risk for the future of Ukraine, for European unity and for the fight against climate change.

 
Read more...

from Michael Gisiger

Adolph von Menzel: Menzels Schwester Emilie im Schlaf

In unserer digitalisierten Welt werden wir zunehmend von Metriken begleitet. Egal ob es die Anzahl gelesener Seiten, die Schritte auf dem Fitness-Tracker oder die Schlafstatistik sind – Zahlen und Daten sind allgegenwärtig. Metriken können uns helfen, Fortschritte zu sehen und Orientierung zu schaffen. Doch sie bergen auch Risiken, die häufig übersehen werden. Sobald eine Kennzahl selbst zum Ziel wird, entfaltet sie oft nicht mehr die ursprünglich beabsichtigte Wirkung.

Diese Problematik wird durch das sogenannte Goodharts Gesetz treffend beschrieben: „Wenn eine Messgrösse zum Ziel wird, ist sie keine gute Messgrösse mehr.“ Dieser Gedanke des britischen Ökonomen Charles Goodhart stammt ursprünglich aus der Wirtschaft, zeigt jedoch auch im Bereich des Selbstmanagements seine Gültigkeit. In diesem Beitrag möchte ich beleuchten, wie sich eine übertriebene Fixierung auf Metriken im Alltag auswirken kann und wie wir uns stattdessen auf das Wesentliche konzentrieren können.

Metriken und das eigentliche Ziel

Zu Beginn ist es wichtig festzuhalten, dass Metriken an sich nichts Negatives sind. Sie können uns motivieren, Schritte nachzuverfolgen, Fortschritte sichtbar zu machen, Erfolge und damit die erfolgreiche Etablierung von #Habits zu dokumentieren. So weit, so gut – die Tücken beginnen, wenn wir uns so sehr auf diese Zahlen fokussieren, dass wir das eigentliche Ziel aus den Augen verlieren. Ein Beispiel hierfür ist das Schlaftracking. Viele von uns tragen inzwischen Fitnesstracker oder Smartwatches, die unsere Schlafqualität überwachen. Die Idee dahinter klingt vernünftig: Ein gesunder Schlaf ist wichtig für unsere Leistungsfähigkeit und unser Wohlbefinden. Doch was passiert, wenn wir beginnen, unseren Schlaf nur noch an den Daten zu messen?

Ich selbst habe erlebt, wie sich dieser Ansatz in eine Art „Schlafoptimierungswahn“ verwandeln kann. Das tägliche Überprüfen der Schlafstatistik erzeugte irgendwann den Druck, die perfekte Schlafbewertung zu erreichen. Diese Fixierung führte jedoch keineswegs zu besserem Schlaf – im Gegenteil. Die Sorge um die perfekte Schlafqualität sorgte für Unruhe und hinderte mich daran, entspannt einzuschlafen. Letztlich wird der Schlaf, der uns eigentlich Ruhe und Erholung bringen sollte, durch den Fokus auf die Kennzahlen gestört. In der Psychologie gibt es dafür sogar einen Namen: Orthosomnie – eine Form der Schlafstörung, die durch das übermässige Tracking und die daraus resultierenden Ängste hervorgerufen wird.

Das Beispiel verdeutlicht, wie schnell der Wunsch nach Selbstoptimierung in Überforderung umschlagen kann, wenn Zahlen wichtiger werden als unser Wohlbefinden. Wir beginnen, unser Leben nach einem Raster zu organisieren, das uns am Ende mehr stresst als bereichert.

Weitere Tücken des Metrik-Denkens

Ein weiteres Beispiel findet sich im Bereich des Lesens. Wer seine Leseliste zu einem festen Ziel umwandelt – etwa eine bestimmte Anzahl von Büchern pro Jahr zu lesen – läuft Gefahr, sich auf die reine Quantität statt auf die Qualität des Gelesenen zu fokussieren. Die Motivation, „x Bücher pro Jahr“ zu lesen, kann dazu führen, dass wir Bücher oberflächlich und gehetzt konsumieren, um das Ziel zu erreichen. Doch was bleibt am Ende davon? Statt uns mit Inhalten auseinanderzusetzen und das Gelesene zu verinnerlichen, hetzen wir durch die Seiten und verlieren den eigentlichen Zweck aus den Augen: den Wunsch, unser Wissen zu erweitern und unsere Perspektive zu bereichern.

In solchen Fällen wird aus einer sinnvollen Metrik – hier die Anzahl gelesener Bücher – eine leere Zielmarke, die uns oberflächlich weiterbringt, ohne uns wirklich zu bereichern.

Prinzipien statt Metriken: Ein Perspektivwechsel

Wie lässt sich diese Falle umgehen? Der Schlüssel liegt darin, Metriken als Orientierung zu nutzen, ohne ihnen die volle Kontrolle über unsere Ziele zu überlassen. Statt uns von Zahlen dominieren zu lassen, können wir uns auf Prinzipien und Werte stützen, die das #Selbstmanagement wirklich fördern. Damit meine ich, dass wir uns fragen, was uns wirklich wichtig ist und wie unsere Handlungen diesem Zweck dienlich sein können.

Hier sind einige Ansätze, die Dir dabei helfen können:

  1. Beim Schlafen loslassen: Nutze Deinen Fitnesstracker als Orientierungshilfe. Es geht nicht darum, jede Nacht eine perfekte Punktzahl zu erreichen, sondern grundsätzlich auf ausreichenden und erholsamen Schlaf zu achten. Wenn Du ab und zu eine schlechtere Nacht hast, ist das kein Grund zur Sorge. Ziel ist ein langfristig guter Schlafrhythmus, der Dir Energie und Erholung bringt.

  2. Fokus auf die Tiefe beim Lesen: Statt eine hohe Anzahl von Büchern pro Jahr anzustreben, konzentriere Dich auf Bücher, die Dich wirklich interessieren und von denen Du Dir neue Einsichten versprichst. Selbst wenn Du am Ende des Jahres „nur“ fünf Bücher gelesen hast, aber diese intensiv durchgearbeitet und reflektiert hast, wirst Du mehr davon haben als von einer endlosen Liste.

  3. Reflexion statt starrer Ziele: Überlege Dir in verschiedenen Bereichen Deines Lebens, ob Du Dich von einer Metrik leiten lässt, die Dir gar nicht wirklich weiterhilft. Frage Dich, welche Werte oder Prinzipien Dir eigentlich wichtig sind – zum Beispiel Gesundheit statt Fitnessscore oder Wissen statt Seitenzahlen. So schaffst Du Dir eine Orientierung, die Dir mehr Flexibilität und Zufriedenheit ermöglicht.

Ein bewusstes Verhältnis zu Zahlen und Zielen

Zahlen und Metriken können wertvolle Helfer sein – wenn wir sie als Wegweiser nutzen und nicht als Zielmarken. Wer sich dessen bewusst ist, kann Daten zur Orientierung heranziehen und gleichzeitig Raum für Flexibilität und Selbstfürsorge schaffen. Wir müssen nicht jede Kennzahl in unserem Leben optimieren, um Zufriedenheit oder Erfolg zu erreichen. Gerade im Selbstmanagement gilt: Weniger ist oft mehr.

Goodharts Gesetz erinnert uns daran, dass wir das eigentliche Ziel stets im Blick behalten sollten. Denn wenn die Metrik zur Zielvorgabe wird, verliert sie ihren Wert. Letztlich geht es darum, eine Balance zu finden, die uns auf sinnvolle Weise weiterbringt, ohne dass wir uns in Zahlen verlieren.


Bildquelle Adolph von Menzel (1815–1905): Menzels Schwester Emilie im Schlaf, Hamburger Kunsthalle, 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 #ProductivityPorn

 
Weiterlesen...

from Libertas

Nicht Arbeit genug! Dass so ein Wahn in den Köpfen der Mehrzahl Platz greifen konnte, zeigt, wie verkehrt das ganze wirtschaftliche System der modernen Staaten ist. Nicht Arbeit genug? Das ist, als wenn ein Bär sagte, er habe nicht Haare genug. Es gibt in der Welt mehr Arbeit, als die Menschen tun können, und wenn sie noch so viele Maschinen erfinden, werden sie doch alle beschäftigt werden können, wenn sie nur die Freiheit haben, arbeiten zu dürfen, d. h. wenn man ihnen die Erde nicht verwehrt, auf der und aus der sie geboren sind. Sobald der Arbeiter keinen Tribut zu zahlen braucht für das Privilegium, arbeiten zu dürfen, wird die Klage über Arbeitsmangel verstummen.

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

Anmerkung

Dieser kurze Kommentar ohne Angabe des Verfassers steht unmittelbar nach der Übernahme eines kurzen Textes aus der „Michigan Arbeiter-Zeitung“ und bezieht sich wohl auf diesen.

 
Weiterlesen...

from Libertas

Steuern.

[H[err?]. C. Bechtold in der „Michigan Arbeiter-Zeitung.“]

Jedes bis jetzt bekannte Steuersystem ist ungerecht, weil es sich auf den Zwang gründet. Die zufällig Herrschenden haben es in ihrer Gewalt, jedes Individuum durch die Steuerschraube seines Eigentums zu berauben oder das ganze Eigentum des Volks zu konfiszieren, sei es zur Bezahlung von Staatsschulden, Gründung von Monopolen oder Bereicherung einzelner privilegierten Familien. Es gibt darum keinen einzigen Menschen, der die Zwangssteuer gern bezahlt. Jeder sucht die Bezahlung von Steuern zu umgehen, weil sie in allen Fällen ein Raub sind, wodurch ein Teil der Arbeit des Volks, wenn nicht die ganze, oder gar die Arbeit künftiger Geschlechter mit Beschlag belegt wird. Wo die Steuer nicht zu umgehen ist, wird sie stets von den Reichen auf die Unbemittelten, von den Starken auf die Schwachen abgewälzt. Nur freiwillige Besteuerung zu gemeinsamen Zwecken hat einen Sinn unter freien Menschen.

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

Anmerkung

Zur „Michigan Arbeiter-Zeitung“ und deren Herausgeber C. Bechthold vgl. die Anmerkungen hier.

 
Weiterlesen...

from Johannes Leutenegger

Die Konferenz an der Berufsfachschule Uster war hochkarätig besetzt, so war nicht nur Regierungsrätin und Bildungsdirektorin Silvia Steiner (Mitte) anwesend, sondern auch der Amtschef des Mittelschul- und Berufsbildungsamts Niklaus Schatzmann. Den anwesenden Spitzenkräften wurde von der Vertretung der BFSU und der ZHAW auch kräftig Honig um den Bart geschmiert.

Gemeinsamer Teil in der Aula

In den Grusswörtern wurde die Berufsmaturität als eine der grössten Innovationen des dualen Bildungssystems der Schweiz gepriesen. Durchaus berechtig. Allerdings wies Miriam Hänni vom EHB in ihrem Referat darauf hin, dass die Berufsmaturität nicht unbedingt alle Hoffnungen erfüllt.

  • So wird zum einen die BM als wichtiges Mittel für Chancengerechtigkeit bezeichnet. In der Statistik zeigt sich aber, dass eine Mehrheit der BM-Absolvent:innen selber bereits Eltern mit Tertiärbildung haben
  • Die BM wird als Tor zur Tertiärbildung verkauft, was es ja effektiv auch ist. Ein nicht zu unterschätzender Faktor ist allerdings, dass viele nach ihrer BM gar nicht an einer Hochschule studieren

Ein weiteres Thema das vielen BM-Lehrpersonen momentan unter den Nägel brennt ist das Aufnahmeprozedere. Interessant war es, dass die Situation – wie könnte es anders sein – je nach Kanton verschieden ist. Einige Kantone haben immer noch Aufnahmeprüfungen, andere Anforderungen an Schnitte, wieder andere verlangen eine Empfehlung der abgegebenden Schule, andere Kantone wiederum verpflichten die potenziellen BM-Lernenden vor dem BM2-Start zu einem Vorbereitungskurs, der Kanton Tessin führt jeweils Aufnahmegespräche durch.

Doch wie verhält es sich mit der Abschlussquote je nach Aufnahmeprozedere. Erstaunlicherweise ist die Abschlussquote bei Kantonen mit Aufnahmeprüfung tiefer als bei fast allen anderen Prozessen. Über die genauen Gründe kann man nur spekulieren, ausserdem ist völlig unklar wie gut diese Abschlüsse effektiv waren und die Gegebenheiten im Kanton, wie die gymnasiale Quote, die Branchenverteilung und so weiter sind nicht berücksichtigt.

Ich wäre vorsichtig, daraus direkte Schlüsse zu ziehen. Was auf jeden Fall klar ist: Aufnahmeprüfungen sind/waren in vielen Kantonen schon vor Corona nicht üblich und diese Verfahren sind nicht grundsätzlich schlechter als die Aufnahmeprüfung.

Was auch interessant war ist, dass die BM-Quote je nach Beruf sehr unterschiedlich war. Im Grunde genommen ist die Erkenntnis relativ banal, aber dass Köchinnen und Köche selten bis nie eine BM absolvieren und Elektrotechniker:innen fast zu zwei Dritteln (BM1 und BM2) zusammengerechnet, scheint naheliegend.

Fachgruppe Deutsch: Digitales Lesen / #BookTok

Ich unterrichte kein Deutsch, allerdings muss bei mir im Geschichtsunterricht und auch in der Philosophie, wenn ich das irgendwann wieder einmal unterrichten darf, auch viel gelesen werden.

Dass das Lesen auf Bildschirmen, was ich als “digitales Lesen” verstanden habe, eher schlechter und mindestens anders funktioniert als das Lesen auf Papier, habe ich mich für diesen Workshop eingeschrieben. Einen Workshop für Geschichte gab es nicht, wahrscheinlich weil das Fach nicht zu den sogenannte “Basiskompetenzen” gehört.

Jedenfalls war der Workshop ganz anders als gedacht. Es ging um die Lesemotivation junger Leute. Dazu hat ein Dozent der ZHAW die junge Buchhändlerlin und Booktokerin Arwen Rose eingeladen, die erzählt hat, wie Booktok funktioniert. Hier ein paar Dinge, die mir geblieben sind.

  • “Emotionen vor Qualität” sei bei den New Adult Geschichten wichtig, die auf Booktok besprochen werden. Im Schulzimmer konnte man den Deutschlehrpersonen beim innerlichen Sterben zusehen, als diese Aussage fiel.
  • Booktok ist erstaunlich bibliophil. Bücher sollen schön aussehen, spezielle Auflagen, aber auch Erstauflagen, Goodies wie Charakterkarten sind begehrte Sammlerobjekte. Das finde ich als bescheiden Bibliophiler natürlich schön.
  • “Spice” also eine gewisse erotische Stimmung ist wichtig. Dem Vernehmen nach ist das ein running gab bei Leuten die über Booktok berichten. Alle Berichte die ich dazu gestern noch gesehen haben, machen sich über das Thema der Erotik in solchen Büchern lustig.
  • Sachbücher spielen bei Booktok offenbar nur am Rande ein Thema. Höchstens Selbsthilfebücher wie “Das Kind in dir” werden rezipiert.
  • Männer sind auf Booktok gemäss Auskunft der Vortragenden praktisch nicht vorhanden. Das scheint eher ein Phänomen von weiblichen “Content Creators” im Alter von ca. 20 bis 30 Jahren zu sein.
  • Junge Menschen wollen lesen, aber vielleicht nicht unbedingt den Schulkanon.
 
Weiterlesen...

from Der Emil

§ 1

Die Umstellung der Uhrzeit führt nicht zu den erhofften Effekten, sondern ist sogar für einen negativen gesundheitlichen Effekt, für höhere Unfallzahlen u. v. m. ursächlich. Daher wird

1) ab 2025 keine Verschiebung in die OstEuropäische Zeitzone mehr erfolgen, nicht mehr auf MESZ umgestellt.

2) allen Institutionen, Untenehmen, Organisationen, Behörden, Ämtern, Anstalten usw. usf. die Verschiebung der bei ihnen üblichen Arbeits-, Öffnungs- und ähnlichen Zeiten freigestellt.

§ 2

Grenzüberschreitende Zeitvereinbarungen und -abgleiche, Termine usw. usf. werden ab 2025 ausschließlich in UTC getroffen. Die Verwaltung, die Justiz, die Polizei des Bundes und der Länder, Betreiber und Ersteller von Systemen der Informationstechnik, der Kommunikationstechnik, des Verkehrswesens usw. haben ihre Technik dahingehend anzupassen bis zum 01.03.2025.

§ 3

Dieses Gesetz wurde beschlossen und verkündet am 31.10.2024 und tritt am 01.02.2025 im Geltungsbereich des Grundgesetzes der Bundesrepublik Deutschland in Kraft.

 
Read more...

from Der Emil

Beschissen. Anders kann ich es nicht beschreiben.

Schuld daran hat niemand. Denn niemand wird absichtlich krank, um etwas, auf das große Vorfreude herrscht, absagen zu können. Ja, eine Infektion versaut zwei Menschen dieses Wochenende. (Aber Corona ist ja vorbei …)

Andererseits: Etwas, auf das wir so lange gewartet haben, verschiebt sich jetzt um irgendeine Zeitpanne. Es verschiebt sich nur … (Und fühlt sich dennoch echt beschissen an, siehe oben.)

 
Read more...

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 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 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 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...