Autorenarchiv: Jörg Kastning

Ideen-Verwaltung – Wie macht ihr das?

Wenn ich lange genug Urlaub mache, kommt mein Gehirn in eine kreative Phase und ich habe lauter Ideen, was ich lernen, lesen, ausprobieren und worüber ich dann bloggen möchte. Dabei kommen mir so viele Ideen, dass ein Urlaub viel zu kurz ist, um sich allen widmen zu können. Viele schreibe ich mir auf, um sie nicht zu vergessen.

Nach dem Urlaub wartet zuhause aber meist eine Liste mit wichtigen und dringenden Dingen auf mich, die zuerst erledigt werden müssen. Auch diese Liste ist meist lang und ich benötige einige Tage, bis ich wieder frei Durchatmen kann. Und so geht es weiter und weiter und viele tolle Ideen aus dem Urlaub vergammeln in meinem nahezu endlosen Backlog, das ich gar nicht so gerne anschauen mag, eben weil es schon so lang ist.

Wie verwaltet ihr Ideen, die euch kommen, die ihr aber nicht direkt angehen könnt? Schreibt ihr sie auf Notizzettel oder -bücher? Pflegt ihr Kanban-Boards oder Aufgabenlisten mit Tags und Kategorieren? Wieviel von dem, was ihr in diesen Listen verwaltet, setzt ihr mit der Zeit um? Habt ihr auch einen Haufen, der nie verfolgten Ideen?

Ich freue mich, wenn ihr eure Vorgehensweise und eure Werkzeuge in den Kommentaren zu diesem Beitrag teilt. Falls euer Beitrag moderiert werden muss, habt bitte ein wenig Geduld. Ich schalte ihn so schnell wie möglich frei.

Ich selbst habe es in der Vergangenheit mit Kanban und Aufgabenlisten versucht, was mir beides nicht so gut gefallen hat. Für Dinge, die sich gut terminieren lassen bzw. die terminiert werden müssen, verwende ich heute einfach meinen digitalen Kalender und speichere alle relvanten Informationen mit im Termin oder referenziere von dort auf sie. Für Dinge, die nicht terminiert werden können/müssen, nutze ich eine Methode aus dem Journaling. Ich schreibe mir stichpunktartig in mein handschriftlich geführtes Journal welches die wichtigsten Dinge für den Tag bzw. die Woche sind, die ich unbedingt erledigen möchte. Es ist für mich ein positives Erlebnis, diese anschließend abhaken zu können. Wenn ich mal keine Punkte habe, schreibe ich halt auch mal einen Tag nix auf.

Nun freue ich mich, von euch zu lesen. :-)

My-IT-Brain hat jetzt auch eine dunkle Seite

Hallo zusammen,

@foxit.opensync.info hat sich in #my-it-brain:matrix.org gewünscht, dass dieser Blog in Abhängigkeit der lokalen Systemeinstellungen hell oder dunkel dargestellt wird. Dazu habe ich folgendes CSS von Gemini generieren lassen und in mein Twenty-Twelve-Child-Theme eingebaut:

/* Dark Mode für Twenty Twelve basierend auf Systemeinstellungen */
@media (prefers-color-scheme: dark) {
  /* Seitenhintergrund & Textfarbe */
  body, 
  body.custom-background {
    background-color: #121212 !important;
    color: #e0e0e0 !important;
  }

  /* Der weiße Inhaltscontainer von Twenty Twelve */
  #page {
    background-color: #1e1e1e !important;
    border-color: #333333 !important;
  }

  /* Links */
  a {
    color: #64b5f6 !important;
  }

  a:hover {
    color: #90caf9 !important;
  }

  /* Überschriften */
  h1, h2, h3, h4, h5, h6,
  .entry-title a {
    color: #ffffff !important;
  }

  /* Navigation & Menü */
  .main-navigation a {
    color: #e0e0e0 !important;
  }

  .main-navigation li:hover > a,
  .main-navigation li.focus > a {
    color: #64b5f6 !important;
  }

  /* Sidebar, Widgets & Footer */
  .widget-area .widget a,
  footer[role="contentinfo"] a {
    color: #b0bec5 !important;
  }

  /* Formulare & Eingabefelder */
  input[type="text"],
  input[type="email"],
  input[type="url"],
  input[type="password"],
  input[type="search"],
  textarea {
    background-color: #2c2c2c !important;
    color: #ffffff !important;
    border-color: #444444 !important;
  }

  /* Bilder leicht abdunkeln (für angenehmeren Kontrast) */
  img {
    opacity: 0.88;
    transition: opacity 0.3s ease;
  }
  img:hover {
    opacity: 1;
  }
}

Falls ihr Darstellungsprobleme oder weitere Anpassungswünsche habt, hinterlasst mir gerne einen Kommentar unter diesem Beitrag oder schreibt an webmaster (at) my-it-brain (dot) de.

Eine OpenPGP-Smartcard, ein ThinkPad, GnuPG, Fedora und ich

Mit diesem Beitrag teile ich meine Erfahrungen mit der Inbetriebnahme einer OpenPGP–Smartcard und des Smartcard-Leser in meinem ThinkPad T14s Gen1. Ihr erfahrt, was alles zu tun war und was ich davon halte. Aber beginnen wir doch ganz am Anfang.

Motivation

Es war einmal die FrOSCon 2026. Dort sah ich am Merchandise-Stand im Foyer diese schicken OpenPGP-Smartcards und einige Karten-Lese/Schreib-Geräte ausliegen.

Ich sprach meine Bekannten auf ihre Erfahrungen mit diesen Karten und GnuPG an, welche überwiegend mit Kopfschütteln und Stöhnen reagierten. Offenbar sind sie nicht so leicht für etwas zu interessieren wie ich. Doch schien mir das Thema für den Moment weniger reizvoll und ich habe das Thema erstmal vertagt.

Das Thema ließ mich jedoch nicht los und so habe ich auf der Zugfahrt nach Hause nochmal nachgelesen, was es mit GnuPG und OpenPGP auf sich hat. Denn dass ich mich zuletzt damit beschäftigt hatte, war schon eine Weile her.

Mein ThinkPad T14s Gen1 besitzt einen Smartcard-Leser, den ich bisher noch nie verwendet hatte. Dieser lachte mich geradezu an und vielleicht half noch der ein oder andere Satz von Christian und ich bestellte mir die OpenPGP Smart Card V3.4 + MiFare DESFire im FLOSS-Shop.

Inbetriebnahme von Kartenleser und Erkennen der Karte

Das kann doch nicht so schwer sein. Das ist doch schnell erledigt.

Berühmte letzte Worte unbekannter Herkunft.
~]$ gpg --card-status
gpg: selecting card failed: No such device
gpg: OpenPGP card not available: No such device

Vorstehender Code-Block zeigt, dass es nicht auf Anhieb klappte. Dann halt erstmal Fehlersuche bzw. die Suche nach Dokumentation und Anleitungen.

Der erste Fehler war schnell gefunden. Der Smartcard-Leser war im UEFI noch deaktiviert. Ich habe die Angewohnheit, alle Geräte, die ich nicht regelmäßig verwende, dort abzuschalten. Nachdem der Kartenleser aktiviert war, wurde er auch von Linux erkannt – von gpg jedoch nicht.

Auf der Produktseite wird folgende URL zu Anleitungen und Erklärungen zu GnuPG, Kartenlesern mit und ohne Pinpad und zur Einrichtung und Verwendung der OpenPGP-Karte verlinkt: https://wiki.datenkollektiv.net/public/gnupg/gnupg-card-howto. Leider lieferte dieser Link einen HTTP-502-Fehler zurück, als ich die Seite gebraucht hätte. Also habe ich das Sprachmodell meiner Wahl um Rat gebeten, welches mir geraten hat, doch erstmal die erforderlichen Treiber und Tools zur Nutzung des Kartenlesers zu installieren. Na gut:

~]$ sudo dnf install pcsc-lite pcsc-lite-ccid pcsc-tools
~]$ sudo systemctl enable --now pcscd.service

Leider war es damit noch nicht getan und das Sprachmodell fing langsam das Halluzinieren an. Also bediente ich mich der Suchmaschine meines geringsten Misstrauens und recherchierte auf althergebrachte Weise. Ich war schon ziemlich genervt, als ich endlich einen passenden Hinweis in der Nitrokey-Dokumentation fand. Nachdem ich diese durchgearbeitet hatte, war ich einen großen Schritt weiter:

~]$ gpg --card-status
Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

Die Karte wird von gpg erkannt, ist wie erwartet noch leer und kann nun endlich benutzt werden. Die Karte ist mit einer PIN und einer Admin-PIN versehen, welche bei bestimmten Operationen bzw. zum Entsperren der Karte abgefragt werden. Beide PINs sind auf individuelle PINs zu ändern. Sonst ist das Ganze sinnlos (siehe --change-pin).

GPG-Schlüssel auf der Karte generieren

Ab hier hilft die Manpage gpg(1) weiter. Der folgende Code-Block zeigt die Abfolge von Befehlen zur Generierung von GPG-Schlüsseln auf der Karte:

~]$ gpg --edit-card

Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> admin
Admin commands are allowed

gpg/card> generate
Make off-card backup of encryption key? (Y/n) Y

Please note that the factory settings of the PINs are
   PIN = '123456'     Admin PIN = '12345678'
You should change them using the command --change-pin

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Bob
Email address: bob@example.com
Comment: der Baumeister
You selected this USER-ID:
    "Bob (der Baumeister) <bob@example.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
rogpg: Note: backup of card key saved to '/home/jkastning/.gnupg/sk_9C88B267003429CB.gpg'
gpg: revocation certificate stored as '/home/jkastning/.gnupg/openpgp-revocs.d/2B3FFC727504AFFAEF0C50C080B662D727FEFF5F.rev'
public and secret key created and signed.

pub   rsa2048 2026-10-23 [SC]
      2B3FFC727504AFFAEF0C50C080B662D727FEFF5F
uid                      Bob (der Baumeister) <bob@example.com>
sub   rsa2048 2026-10-23 [A]
sub   rsa2048 2026-10-23 [E]


gpg/card> list

Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 4
KDF setting ......: off
Signature key ....: 2B3F FC72 7504 AFFA EF0C  50C0 80B6 62D7 27FE FF5F
      created ....: 2026-10-23 18:42:38
Encryption key....: 35CD 7AA9 CADB CA74 6103  C261 9C88 B267 0034 29CB
      created ....: 2026-10-23 18:42:38
Authentication key: 04C5 D0D4 E501 B90A 51BF  85FE B6C6 967B EFF5 5EF9
      created ....: 2026-10-23 18:42:38
General key info..: 
pub  rsa2048/80B662D727FEFF5F 2026-10-23 Bob (der Baumeister) <bob@example.com>
sec>  rsa2048/80B662D727FEFF5F  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26
ssb>  rsa2048/B6C6967BEFF55EF9  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26
ssb>  rsa2048/9C88B267003429CB  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26

gpg/card>

Fertig. Auf der Karte befinden sich nun je ein Schlüsselpaar zum Signieren, Ver- und Entschlüsseln und für die Authentisierung (z.B. an einem SSH-Dienst). Ein Backup und ein Widerrufszertifikat wurden in folgenden Pfaden gespeichert:

  • Backup: .gnupg/sk_9C88B267003429CB.gpg
  • Widerrufszertifikat: .gnupg/openpgp-revocs.d/2B3FFC727504AFFAEF0C50C080B662D727FEFF5F.rev

Das Off-Card-Backup enthält nur den Encryption Key, nicht aber den Primärschlüssel. Ich empfehle, beide Dateien sicher und offline aufzubewahren. Sie sollten nicht auf dem Host verbleiben, wo sie kompromittiert werden können. Die Schaltkreise auf der Smartcard verhindern, dass der geheime/private Schlüssel von der Karte ausgelesen werden kann. So ist auch eine nachträgliche Erstellung einer weiteren Sicherheitskopie nicht möglich. Achtung: Mit dem Off-Card-Backup können nicht alle Schlüssel wiederhergestellt werden. Dies wird in meinen Augen im GnuPG HOWTO nicht deutlich.

Mir ist bei der Generierung aufgefallen, dass ich weder das Verfahren noch die Schlüssellänge auswählen konnte. Es wurde RSA 2048 Bit gewählt. Das ist mir ehrlich gesagt zu kurz. Leider gibt weder gpg(1) noch das GnuPG Smartcard HOWTO Hinweise, ob sich die Schlüssellänge beeinflussen lässt. Erst durch Suchen und Ausprobieren habe ich herausgefunden, dass man diese Parameter mit dem Admin-Befehl key-attr ändern kann. Der folgende Code-Block zeigt den Weg dorthin:

~]$ gpg --edit-card
…
gpg/card> admin
Admin commands are allowed

gpg/card> key-attr
Changing card key attribute for: Signature key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 2
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 
The card will now be re-configured to generate a key of type: ed25519
Note: There is no guarantee that the card supports the requested
      key type or size.  If the key generation does not succeed,
      please check the documentation of your card to see which
      key types and sizes are supported.
Changing card key attribute for: Encryption key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection?

Für die folgenden Beispiele nutze ich jedoch weiterhin den bereits erstellten rsa2048-Schlüssel.

Im Schlüsselbund des Hosts werden die Schlüssel wie folgt dargestellt:

~]$ gpg --list-keys
pub   rsa2048 2026-10-23 [SC]
      2B3FFC727504AFFAEF0C50C080B662D727FEFF5F
uid           [ultimate] Bob (der Baumeister) <bob@example.com>
sub   rsa2048 2026-10-23 [A]
sub   rsa2048 2026-10-23 [E]

~]$ gpg --list-secret-keys
sec>  rsa2048 2026-10-23 [SC]
      2B3FFC727504AFFAEF0C50C080B662D727FEFF5F
      Card serial no. = 0005 0000DA26
uid           [ultimate] Bob (der Baumeister) <bob@example.com>
ssb>  rsa2048 2026-10-23 [A]
ssb>  rsa2048 2026-10-23 [E]

Zuerst werden die öffentlichen Schlüssel angezeigt, die im Schlüsselbund des Hosts gespeichert sind. Ich empfehle, diese ebenfalls zu sichern und auf einem anderen Medium aufzubewahren. Gehen sie verloren, können sie nicht mithilfe der Smartcard rekonstruiert werden. Anschließend werden Informationen zu den privaten Schlüsseln ausgegeben. Das ‚>‘ hinter den Schlüsseln zeigt an, dass sich die geheimen/privaten Schlüssel auf einer Smartcard befinden und nicht im Schlüsselbund vorliegen.

Eine Datei signieren

Schlüsseloperationen funktionieren wie gewohnt. Statt der Passphrase wird man nach der PIN der Smartcard gefragt. Im folgenden Beispiel signiere ich eine Textdatei, wobei ich explizit angebe, welche User-ID für die Signatur benutzt werden soll. Anschließend verifiziere ich die Signatur:

~]$ gpg --sign --local-user bob@example.com datei
~]$ gpg --verify datei
datei      datei.gpg  
[jkastning@t14s ~]$ gpg --verify datei.gpg 
gpg: Signature made Fr 23 Okt 2026 21:31:44 CEST
gpg:                using RSA key 4384D92F686DC876A3CFF458E8AF43DE9E151FF3
gpg:                issuer "bob@example.com"
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   2  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 1f, 0u
gpg: next trustdb check due at 2030-06-22
gpg: Good signature from "Bob (der Baumeister) <bob@example.com>" [ultimate]

Die Karte auf Werkseinstellungen zurücksetzen

Soll das Schlüsselmaterial von der Karte entfernt werden, z.B. weil man sie weitergeben möchte, kann sie wie folgt auf Werkseinstellungen zurückgesetzt werden:

~]$ gpg --edit-card

Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 5
KDF setting ......: off
Signature key ....: 4384 D92F 686D C876 A3CF  F458 E8AF 43DE 9E15 1FF3
      created ....: 2026-10-23 19:29:37
Encryption key....: 245E CD79 8DF9 D0FE 233B  9C95 D955 9262 22CF B708
      created ....: 2026-10-23 19:29:37
Authentication key: 7C86 CC37 9C74 776B 162E  AE31 FD5C 43DB 9DCD 233E
      created ....: 2026-10-23 19:29:37
General key info..: 
pub  rsa2048/E8AF43DE9E151FF3 2026-10-23 Bob (der Baumeister) <bob@example.com>
sec>  rsa2048/E8AF43DE9E151FF3  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26
ssb>  rsa2048/FD5C43DB9DCD233E  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26
ssb>  rsa2048/D955926222CFB708  created: 2026-10-23  expires: never     
                                card-no: 0005 0000DA26

gpg/card> admin
Admin commands are allowed

gpg/card> factory-reset
gpg: OpenPGP card no. D27600012401030400050000DA260000 detected

gpg: Note: This command destroys all keys stored on the card!

Continue? (y/N) y
Really do a factory reset? (enter "yes") yes

gpg/card> list

Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card>

Bitte denkt dran, auch die entsprechenden Schlüssel aus dem Schlüsselbund eures Hosts zu entfernen. Damit ist der saubere Ausgangszustand wiederhergestellt.

Vorhandene Schlüssel auf die Smartcard verschieben

Bitte erstellt ein Backup des .gnupg-Verzeichnisses, denn eure privaten Schlüssel werden auf die Karte verschoben (nicht kopiert). Ihr könnt sie anschließend von der Karte nicht zurückholen.

Ich demonstriere hier, wie Beispiel-Schlüssel auf die Karte verschoben werden und werfe anschließend alles weg. Der folgende Code-Block zeigt den Vorgang:

~]$ gpg --edit-key B5248E9B6E71B11BD9B979E996E2980D6CF4189E
gpg (GnuPG) 2.4.9; Copyright (C) 2025 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   2  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 1f, 0u
gpg: next trustdb check due at 2030-06-22
sec  brainpoolP256r1/96E2980D6CF4189E
     created: 2026-10-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb  brainpoolP256r1/2403FEED88DD3FE9
     created: 2026-10-24  expires: never       usage: E   
[ultimate] (1). Kim <kim@example.com>

gpg> key 1

sec  brainpoolP256r1/96E2980D6CF4189E
     created: 2026-10-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb* brainpoolP256r1/2403FEED88DD3FE9
     created: 2026-10-24  expires: never       usage: E     
[ultimate] (1). Kim <kim@example.com>

gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2

sec  brainpoolP256r1/96E2980D6CF4189E
     created: 2026-10-24  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb* brainpoolP256r1/2403FEED88DD3FE9
     created: 2026-10-24  expires: never       usage: E     
[ultimate] (1). Kim <kim@example.com>

Note: the local copy of the secret key will only be deleted with "save".
gpg> save

Ich habe zuvor lokal einen GPG-Schlüssel mit dem Algorithmus Brainpool P-256 erstellt und anschließend den Encryption Key mit keytocard in den Encryption-Slot auf der Karte verschoben. Nicht im Code-Block zu sehen ist, wie ich den Hauptschlüssel in den Signatur-Slot der Karte verschoben habe. Die privaten Schlüssel von Kim befinden sich nun auf der Karte, was sich mit gpg --card-status überprüfen lässt:

~]$ gpg --card-status
Reader ...........: Alcor Micro AU9540 00 00
Application ID ...: D27600012401030400050000DA260000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: ZeitControl
Serial number ....: 0000DA26
Name of cardholder: [not set]
Language prefs ...: de
Salutation .......: 
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: brainpoolP256r1 brainpoolP256r1 rsa4096
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
Signature key ....: B524 8E9B 6E71 B11B D9B9  79E9 96E2 980D 6CF4 189E
      created ....: 2026-10-24 18:20:39
Encryption key....: 203F 7E4C 23A0 BB06 DB51  B3E9 2403 FEED 88DD 3FE9
      created ....: 2026-10-24 18:20:39
Authentication key: [none]
General key info..: pub  brainpoolP256r1/96E2980D6CF4189E 2026-10-24 Kim <kim@example.com>
sec>  brainpoolP256r1/96E2980D6CF4189E  created: 2026-10-24  expires: never     
                                        card-no: 0005 0000DA26
ssb>  brainpoolP256r1/2403FEED88DD3FE9  created: 2026-10-24  expires: never     
                                        card-no: 0005 0000DA26
ssb   brainpoolP256r1/5B658E197413BAE0  created: 2026-10-24  expires: never

Die Ausgabe von gpg --list-secret-keys zeigt ebenfalls durch das ‚>‘-Zeichen an, dass die privaten Schlüssel auf einer Smartcard liegen:

~]$ gpg --list-secret-keys
sec>  brainpoolP256r1 2026-10-24 [SC]
      B5248E9B6E71B11BD9B979E996E2980D6CF4189E
      Card serial no. = 0005 0000DA26
uid           [ultimate] Kim <kim@example.com>
ssb>  brainpoolP256r1 2026-10-24 [E]

Tut euch selbst einen Gefallen und prüft im Vorfeld, welche Algorithmen ihr für eure Schlüssel verwendet und welche von eurer Smartcard unterstützt werden. Versucht ihr, Schlüssel auf die Karte zu verschieben, die von der Smartcard nicht unterstützt werden, schlägt dies mit kryptischen Fehlermeldungen fehl. Diese sind so irreführend, dass ich ein Sprachmodell um Rat bitten musste, um meinem Fehler auf die Spur zu kommen. Ich hatte zuerst versucht, Schlüssel mit dem Algorithmus Curve 25519 auf die Karte zu verschieben. Dieser wird von der Karte nicht unterstützt. Die Fehlermeldung behauptete jedoch, ich hätte die Admin-PIN falsch eingegeben.

Ähnliche Erfahrungen habe ich gemacht, als ich mit dem Befehl key-attr die Einstellungen für die Key-Slots auf Parameter ändern wollte, welche von der Karte nicht unterstützt werden. Auch hier deutete die Fehlermeldung auf eine falsche Admin-PIN hin.

Fazit

Mit 22,00 Euro zzgl. Versandkosten ist die OpenPGP Smart Card V3.4 + MiFare DESFire erschwinglich, sieht schick aus und passt gut ins Portemonnaie. Darüber hinaus passt sie selbstverständlich auch gut in die Smartcard-Leser, die in vielen ThinkPad-Modellen (und ebenfalls in Business-Laptops anderer Hersteller) verbaut sind.

GnuPG-Dokumentation und -Howto sind zum Thema Smartcard alt und lückenhaft. Es bedarf eines gewissen technischen Interesses und Durchhaltewillens, um hier bis ans Ziel zu kommen. Aus meiner Sicht ist dies klar ein Nischenthema für Nerds und Menschen, die zur Nutzung dieser Technologie gezwungen sind.

Ich selbst bevorzuge, ein Offline-Backup meiner Schlüssel sicher aufzubewahren und vorhandene Schlüssel auf die Smartcard zu verschieben. Denn so kann ich meine GnuPG-Konfiguration wiederherstellen, falls die Smartcard kaputtgeht oder ich zukünftig ein Endgerät ohne Smartcard-Slot verwende.

Links zu verwandten Beiträgen

Wartungsseite für NGINX-Webseiten

Im Blog von Shamal Iroshan habe diese gute Anleitung gefunden. Ich habe mir analog eine Wartungsseite für diesen Blog erstellt, welche ich nun schnell und einfach online schalten kann, falls ich den Blog für Wartungsareiten oder zur Mitigation von PHP-Schwachstellen abschalten möchte.

Bild der Wartungsseite

Zum Aktivieren und Deaktivieren der Wartungsseite genügt ein Befehl:

maintenance site <on/off>

Das war es auch schon für heute. Der Dank für diese Lösung gebührt Shamal. :-)

Mein inoffizieller Red Hat Errata-Monitor

Hi, in diesem Beitrag möchte ich euch ein Projekt vorstellen, an dem ich gerade arbeite. Inspiriert ist es von meinem RHEL CVE Monitor für arme Admins. Doch bevor es losgeht, beginne ich mit einem Disclaimer und einem Transparenzhinweis. Anschließend erläutere ich die Probleme, die ich mit diesem Projekt lösen möchte und gebe ein Beispiel wie man es nutzt.

Disclaimer: Es handelt sich hierbei um ein Community-Projekt, welches in keinster Weise von Red Hat stammt bzw. unterstützt wird. Es nutzt ausschließlich öffentlich verfügbare APIs, die ohne Authentifizierung genutzt werden können.

Transparenzhinweis: Das Projekt ist unter Nutzung eines KI-Coding-Assistenten entstanden.

Wofür ist das gut?

Ich führe mit meinen Kunden regelmäßig Videokonferenzen durch, um sie über Neuigkeiten zu informieren und ihre Sorgen, Nöte und Anträge aufzunehmen. Da ich ihre Red Hat-Subskriptionen kenne, möchte ich sie darüber informieren, welche Red Hat Errata seit unserem letzten Termin veröffentlicht wurden. Die Scripts aus diesem Projekt helfen mir dabei, diese Informationen effizient zusammenzustellen und in die Agenda einzufügen.

Aktuell bieten die Red Hat Errata Notifications noch keine Möglichkeit die Errata nach Produkt zu filtern. Mein Errata-Monitor bietet diese Funktionalität in Form von Filtern. Im Modus monitor speichert er auch den Status der letzten Ausführung, um bei erneuter Ausführung nur die Änderungen zum vorherigen Lauf auszugeben.

Das Projekt eignet sich damit sowohl für Ad-hoc-Abfragen, als auch für einen Monitoring-Modus, wo das Skript zeitgesteuert ausgeführt wird und neue Errata ausgibt bzw. diese Informationen per E-Mail versendet.

Wie nutzt man das?

Bitte schaut für eine ausführliche Beschreibung in das README des Projekts unter URL: https://github.com/Tronde/rh_errata_monitor. Oder nutzt die Hilfe eines der Scripte:

$ python3 rh_errata_monitor.py --help
usage: rh_errata_monitor.py [-h] [--filters FILTERS] [--state-file STATE_FILE] [--initial-days INITIAL_DAYS] [--format {json,csv,md}] [--output OUTPUT] [--exit-code]
                            [--dry-run] [--verbose]
                            {monitor,list-products,search} ...

Monitor Red Hat Errata Search API for new errata.

positional arguments:
  {monitor,list-products,search}
    monitor             Check for new errata per filter (default)
    list-products       List available product names from the API
    search              One-off stateless errata search

options:
  -h, --help            show this help message and exit
  --filters FILTERS     Path to INI filter config file (default: filters.conf)
  --state-file STATE_FILE
                        Path to JSON state file (default: .errata_state.json)
  --initial-days INITIAL_DAYS
                        On first run (no state), look back this many days (default: 30)
  --format {json,csv,md}
                        Output format (default: md)
  --output OUTPUT       Write report to file in addition to stdout
  --exit-code           Exit with code 2 when new errata are found
  --dry-run             Show queries without hitting the API
  --verbose, -v         Enable debug logging

examples:
  rh_errata_monitor.py monitor
  rh_errata_monitor.py list-products
  rh_errata_monitor.py list-products --search satellite
  rh_errata_monitor.py search --product "Red Hat Satellite" --after 2024-01-01
  rh_errata_monitor.py search --synopsis '"Ansible Automation Platform" "Setup Bundle"'
  rh_errata_monitor.py monitor --format json --output /tmp/errata.json

Die folgenden beiden Codeblöcke zeigen ein kurzes Beispiel für eine Filterdatei und einen Aufruf, den ich benutze, um eine Markdown-Ausgabe für meine Agenda zu generieren.

$ cat filter.conf 
# Red Hat Errata Monitor -- Filter Configuration
#
# Each [section] defines a named filter that the monitor checks on every run.
# Available keys:
#
#   product  = Exact product name as listed by 'list-products' command
#              Maps to: fq=portal_product_names:("...")
#
#   synopsis = Free-text search terms matched against errata synopsis/content
#              Use quotes for exact phrases: "Satellite 6" "release"
#              Maps to: q=...
#
# Both keys are optional.  If both are set, results must match BOTH (AND logic).
# If neither is set, all errata are returned (not recommended).
#
# Run 'list-products' to discover valid product names:
#   python3 rh_errata_monitor.py list-products
#   python3 rh_errata_monitor.py list-products --search satellite

# -- Red Hat Satellite -------------------------------------------------------

[satellite-releases]
# All errata for the "Red Hat Satellite" product that mention "Satellite 6"
product = Red Hat Satellite
synopsis = Satellite 6

[satellite-capsule]
product = Red Hat Satellite Capsule

# -- Red Hat Enterprise Linux ------------------------------------------------
[RHEL]
product = Red Hat Enterprise Linux for x86_64

Ich möchte also Errata für den Red Hat Satellite, Capsules und RHEL abrufen, was wie folgt aussehen kann (Ausgabe gekürzt):

$ python3 rh_errata_monitor.py search --filters filter.conf --after 2026-09-24
### satellite-releases (0 errata since 2026-09-24)

  - none

### satellite-capsule (0 errata since 2026-09-24)

  - none

### RHEL (50 errata since 2026-09-24)

  - [RHBA-2026:73791 - New Application Stream container images](https://access.redhat.com/errata/RHBA-2026:73791) - None
  - [RHSA-2026:73766 - Important: pki-core security update](https://access.redhat.com/errata/RHSA-2026:73766) - Important
  - [RHSA-2026:73765 - Important: dogtag-pki security update](https://access.redhat.com/errata/RHSA-2026:73765) - Important
  - [RHBA-2026:73746 - New Application Stream container images](https://access.redhat.com/errata/RHBA-2026:73746) - None
  - [RHEA-2026:73547 - multiple NVIDIA kernel module packages bug fix and enhancement update](https://access.redhat.com/errata/RHEA-2026:73547) - None
  - [RHEA-2026:73546 - multiple NVIDIA kernel module packages bug fix and enhancement update](https://access.redhat.com/errata/RHEA-2026:73546) - None
  - [RHSA-2026:73512 - Moderate: gawk security update](https://access.redhat.com/errata/RHSA-2026:73512) - Moderate
  - <AUSGABE GEKÜRZT>

**Total: 50 errata since 2026-09-24 across 1 filter**

Ich lasse mir hier die Errata ausgeben, die nach dem 24.09.2026 veröffentlicht wurden. Während es für den Satellite und dessen Capsules nichts neues gibt, sind 50 Errata für RHEL veröffentlicht worden. Ich habe die Ausgabe hier im Blog gekürzt, das Format ist jedoch ersichtlich.

Diese Liste kann ich nun per Copy&Paste in das Tool übernehmen, mit dem ich die Agenda für meinen TAM-Call generiere.

Wie stabil ist das Projekt?

Bei dem was ihr aktuell auf GitHub findet, handelt es sich um ein Pre-Release. Ich nutze es seit einigen Tagen und bisher hat es meinen Rechner nicht gestört.

Für die Filter nutze ich die Produktnamen aus der API und Filter die Strings aus dem Abschnitt Synopsis. Gerade letzteres ist Fehlerbehaftet und kann zu ungenauen bzw. fehlerhaften Ausgaben führen. Falls euch Fehler auffallen, freue ich mich, wenn ihr diese meldet.

Falls ihr dieses Projekt nützlich findet, lasst es mich gerne wissen. Dazu könnt ihr gern einen Kommentar unter diesem Beitrag hinterlassen oder einen Stern auf GitHub vergeben. Die CONTRIBUTING.md enthält Informationen, wie ihr darüber hinaus zum Projekt beitragen könnt.

Gelöst: Intel e1000e „Detected Hardware Unit Hang“

Dieser Post umfasst eine kurze Problembeschreibung und verweist auf die Lösung, die ich dazu im Internet gefunden und implementiert habe.

Er dient mir als Dokumentation und ich freue mich, wenn er euch ebenfalls hilft, wenn ihr von dem gleichen Problem betroffen seid.

Problembeschreibung

Ein Server mit einer Intel-Netzwerkkarte, welche den Treiber e1000e nutzt, verliert plötzlich die Netzwerkanbindung. Im Protokoll des Servers finden sich dazu wiederholt folgende Meldungen:

kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang:

Remote-Verbindungen werden unterbrochen und es ist nur noch ein Zugriff über eine lokale Konsole möglich. Das kann unpraktisch sein, wenn sich der Server in einem hunderte Kilometer entfernten Standort befindet.

Lösung

Die Lösung habe ich bei der Internetrecherche im Blog von Ruhani Rabin gefunden: https://rabin.blog/fix-intel-e1000e-detected-hardware-unit-hang-on-proxmox/#solution-summary-proxmox-intel-e1000e-hardware-unit-hang-fix

Ruhani hat eine systemd.unit erstellt, welche die problematischen Funktionen des Treibers deaktiviert. Zusätzlich wird ein Watchdog eingerichtet, welcher helfen soll, das Problem bei erneutem Auftreten selbst zu lösen.

Bitte schaut in Ruhanis Blog-Artikel für alle Details zur Lösung. Er hat diese wirklich gut beschrieben.

Ich dokumentiere in den folgenden Code-Blöcken lediglich die systemd.units, die ich auf meinem Host implementiert habe:

# /etc/systemd/system/disable-nic-offload-eno1.service

[Unit]
Description=Disable NIC offloading for Intel e1000e interface eno1
After=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/sbin/ethtool -K eno1 gso off gro off tso off tx off rx off rxvlan off txvlan off sg off
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Und der Watchdog:

# /etc/systemd/system/e1000e-eno1-watchdog.timer
[Unit]
Description=Run e1000e eno1 watchdog every 2 minutes

[Timer]
OnBootSec=2min
OnUnitActiveSec=2min
AccuracySec=30s
Unit=e1000e-eno1-watchdog.service

[Install]
WantedBy=timers.target

# /etc/systemd/system/e1000e-eno1-watchdog.service
[Unit]
Description=Watch for Intel e1000e hardware hangs and reset eno1
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/e1000e-eno1-watchdog

Watchdog-Skript:

#!/usr/bin/env bash
set -u
set -o pipefail

IFACE="eno1"
LOOKBACK="5 minutes ago"
LOCK="/run/e1000e-${IFACE}-watchdog.lock"
STAMP="/run/e1000e-${IFACE}-last-reset"
MIN_RESET_INTERVAL_SECONDS=600

exec 9>"$LOCK"
flock -n 9 || exit 0

if ! journalctl -k --since "$LOOKBACK" --no-pager \
  | grep -Eqi "e1000e .*${IFACE}: Detected Hardware Unit Hang|Detected Hardware Unit Hang"; then
  exit 0
fi

now="$(date +%s)"
last=0
[ -f "$STAMP" ] && last="$(cat "$STAMP" 2>/dev/null || echo 0)"

if [ $((now - last)) -lt "$MIN_RESET_INTERVAL_SECONDS" ]; then
  logger -t e1000e-watchdog "hardware hang detected on ${IFACE}, but reset suppressed by rate limit"
  exit 0
fi

logger -t e1000e-watchdog "hardware hang detected on ${IFACE}; resetting NIC"

if ! ip link set "$IFACE" down; then
  logger -t e1000e-watchdog "failed to bring ${IFACE} down; NIC reset incomplete"
  exit 1
fi

sleep 2

if ! ip link set "$IFACE" up; then
  logger -t e1000e-watchdog "failed to bring ${IFACE} up; NIC reset incomplete"
  exit 1
fi

# Re-apply the offload mitigation after link reset, just in case.
ethtool -K "$IFACE" gso off gro off tso off tx off rx off rxvlan off txvlan off sg off 2>/dev/null || \
  logger -t e1000e-watchdog "warning: unable to re-apply offload mitigation on ${IFACE}"

date +%s >"$STAMP"

logger -t e1000e-watchdog "NIC reset completed for ${IFACE}"

Bugtracker

Laut des KI-Agenten meines geringsten Misstrauens ist das Problem in folgenden Trackern dokumentiert:

Zum Erscheinungsdatum dieses Beitrags befinden sich beide im Status ‚NEW‘.

RHEL CVE Monitor für arme Admins

User Story: Als RHEL-Systemadministrator:in möchte ich für einige ausgewählte Kompontenten, wie z.B. kernel, openssl oder samba, über neue CVE für diese Komponenten informiert werden. Leider steht mir dazu keine Schwachstellenmanagementlösung zur Verfügung. Einen Red Hat Satellite Server habe ich nicht und den Vulnerability Service in der Hybrid Cloud Console kann bzw. darf ich nicht nutzen.

Transparenzhinweis: Ich arbeite als TAM für Red Hat. Die im Folgenden vorgestellte Anwendung habe ich als Open-Source-Projekt unter MIT-Lizenz veröffentlicht. Es steht in keiner offiziellen Verbindung zu Red Hat.

RHEL CVE Monitor ist ein Python-Tool, das die Red Hat Security Data API regelmäßig abfragt und neue Sicherheitslücken (CVEs) für eine konfigurierbare Liste von RHEL-Paketen meldet.

Die zu überwachenden Pakete werden in packages.txt festgelegt (z. B. kernel, openssl, samba, rear). Beim ersten Lauf werden CVEs der letzten 30 Tage ausgegeben; danach zeigt das Tool nur noch neue Einträge seit dem letzten erfolgreichen Durchlauf. Bereits gemeldete CVEs werden in einer lokalen Zustandsdatei (.cve_monitor_state.json) gespeichert, damit nichts doppelt erscheint.

Die Ausgabe kann als Text, JSON oder CSV erfolgen und eignet sich für manuelle Prüfungen, Cron-Jobs oder systemd-Timer. Mit --exit-code lässt sich das Tool auch in CI/CD-Pipelines einbinden, die bei neuen CVEs alarmieren sollen.

Wie benutzt man das?

Der folgende Code-Block zeigt die CVE im RHEL-kernel der letzten 5 Tage:

[host.example.com rhel_cve_monitor]$ python3 rhel_cve_monitor.py --initial-days 4
=== kernel (1 new CVE) ===
  CVE-2026-80725       important    2026-08-29  https://access.redhat.com/security/cve/CVE-2026-80725

Total: 1 new CVE across 1 package

Die Ausgabe ist bewusst spartanisch gehalten. Man erhält lediglich die CVE-Nummer, die Severity, das Erscheinungsdatum und die URL zur Red Hat CVE Datenbank, wo man weitere Informationen zur Schwachstelle findet.

Verfügbare CLI-Optionen findet man in der Hilfe:

[host.example.com rhel_cve_monitor]$ python3 rhel_cve_monitor.py --help
usage: rhel_cve_monitor.py [-h] [--packages PACKAGES]
                           [--state-file STATE_FILE]
                           [--initial-days INITIAL_DAYS] [--output OUTPUT]
                           [--exit-code] [--verbose] [--dry-run]
                           [--format {text,json,csv}]
                           [--reset-packages PACKAGE [PACKAGE ...]]
                           [--reset-after YYYY-MM-DD]

Monitor Red Hat Security Data API for new CVEs affecting given RHEL packages.

options:
  -h, --help            show this help message and exit
  --packages PACKAGES   Path to file with one package name per line (default:
                        packages.txt)
  --state-file STATE_FILE
                        Path to state file tracking last run time (default:
                        .cve_monitor_state.json)
  --initial-days INITIAL_DAYS
                        On first run (no state file), look back this many days
                        (default: 30)
  --output OUTPUT       Optional file path to write the report to (in addition
                        to stdout)
  --exit-code           Exit with code 2 when new CVEs are found (useful for
                        CI/automation)
  --verbose, -v         Enable verbose logging
  --dry-run             Preview what would be queried without hitting the API
  --format {text,json,csv}
                        Output format: text (default), json, or csv
  --reset-packages PACKAGE [PACKAGE ...]
                        Clear seen-CVE state for these packages (use 'all' for
                        every package) and exit
  --reset-after YYYY-MM-DD
                        When resetting, also set last_run to this date so next
                        run queries from here

Mehr kann die kleine Anwendung nicht.

Und wo gibt es das?

Unter der URL: https://github.com/Tronde/rhel_cve_monitor

Das englischsprachige README enthält weitere Beispiele und Hinweise zur Nutzung.

Falls ihr diese kleine Anwendung nützlich findet, freue ich mich, wenn ihr mir hier im Blog einen Kommentar hinterlasst und eure Erfahrung weiterverbreitet. Wenn ihr Fehler findet oder Verbesserungsvorschläge habt, meldet diese bitte im GitHub-Issue-Tracker des Projekts.

Meine FrOSCon 2026

Letzte Woche, um diese Zeit, öffnete die 21. FrOSCon ihre Tore für technik- und Open-Source-begeisterte Menschen. Nun ist sie bereits seit einer Woche vorbei und ich habe Konferenzblues überwunden.

Es hat mich sehr gefreut, Alexandra, Armin, Chris, Christian Thinkpadowik (den Museumsdirektor), Christof, Christoph (stoeps), Dirk, Henning, Jens und Sujeevan wiederzutreffen. Ebenso habe ich mich gefreut, einige neue Gesichter kennenzulernen. Wir werden uns sicher auf zukünftigen Konferenzen wieder über den Weg laufen und irgendwann, werde ich mir eure Namen auch merken können (bitte entschuldigt, mein Namensgedächtnis ist wirklich schlecht).

Vorträge gab es reichlich. Unbekannt heißt nicht unzugänglich – Warum OSS Nutzung Mut braucht von Silvia Deimeke ist tatsächlich der einzige Vortrag, den ich vor Ort gehört habe und ich finde ihn großartig. Sivlvia hat zum ersten Mal auf einer Open-Source-Konferenz gesprochen und einen interessanten Beitrag geleistet. Aus für gewöhnlich gut informierten Quellen kam mir zu Ohren, dass dies nicht ihr letzter Beitrag zu einer Open-Source-Konferenz gewesen sein soll.

Dass ich es nicht zu mehr Vorträgen geschafft habe, liegt zum einen an den schönen Gesprächen auf dem Gang, im Hof und an den Ständen und zum anderen, dass ich dieses Jahr gleich mit zwei Vorträgen und einem Workshop beigetragen habe. Allein sind drei Beiträge kaum zu stemmen, weswegen ich mich mit Christian Stankowic zusammentan habe, um folgende Beiträge abzuliefern:

Christian, es war mir eine große Freude, mit dir gemeinsam zu dieser Konferenz beizutragen.

Darüber hinaus habe ich ein Thema beigetragen, welches mir persönlich wichtig ist und Rückmeldungen zufolge einige Backlogs gefüllt hat:

Ich betrachte darin ein Unterthema aus dem digitalen Nachlass und wünsche mir, dass noch mehr Nerds auch in diesem Bereich Vorsorge betreiben.

Normalerweise finde ich nach einer Konferenz nicht die Zeit, mir Vortragsaufzeichnungen anzusehen. Dieses Mal haben es jedoch folgende Beiträge geschafft, mein Interesse zu wecken, so dass ich mir die Zeit genommen habe:

In letzterem findet ihr auch einige interessante Statistiken zur diesjährigen Konferenz.

Für mich heißt es nun: Nach der Konferenz ist vor der Konferenz. Ich freue mich als nächstes auf die Chemnitzer Linux-Tage 2027.

Nerds gefährden die digitale Souveränität ihrer Familie

Dies ist der Begleit-Artikel zu meinem gleichnamigen Vortrag auf FrOSCon 2026 am Samstag um 11:15 Uhr in Raum HS 4. Ich möchte das Thema hier nochmals in Textform aufarbeiten und zur Diskussion stellen.

Worin besteht die Gefahr?

Für uns Nerds oder allgemein für technikaffine Personen ist der Umgang mit Technik interessant, spannend und häufig normal. Nicht selten betreiben wir in unserem Haus oder Wohnung eine komplexe Heimnetz-Infrastruktur. Viele von uns blicken gerne hinter die Technik und wollen sie verstehen. Diese Faszination teilen leider die meisten Menschen nicht.

Außerhalb unserer kleinen Nerd-Blase gibt es eine sehr große Gruppe von Menschen, die Technik benutzen, weil sie müssen oder die Nutzung digitaler Dienste Komfort verspricht und ihnen nützlich ist. Dass all dieser Kram funktioniert, wird häufig als selbstverständlich hingenommen und nicht selten mit schwarzer Magie in Zusammenhang gebracht. Und es mag einige unter uns überraschen, doch nicht alle Menschen finden Technik interessant und wollen diese verstehen. Die meisten Menschen wollen tatsächlich einfach nur keine Probleme damit haben.

Ein ganz normales Heimnetzwerk (ohne Nerd)

Abbildung 1 zeigt ein Bild von einem Heimnetzwerk, so wie es sich die meisten Internetdiensteanbieter und normale Menschen vorstellen.

dekorativ
Abb. 1: Ein einfaches Heimnetzwerk, wie es sich Internetdiensteanbieter und normale Menschen vorstellen.

Wer einen Internetanschluss bucht, erhält vom Anbieter meist eine Box und einen Brief mit Zugangsdaten. Letzterer ist optional und kann entfallen, wenn die Box schon komplett vorkonfiguriert ist. Während Kundige hierin einen WLAN-Router mit integriertem Kabel- oder DSL-Modem erkennen, beizeichnen andere Menschen diese Box schlicht als Das Internet. Das ist aus ihrer Perspektive nachvollziebar, denn funktioniert der Kasten nicht richtig, geht meist der Internetzugriff verloren. Dennoch ist diese Bezeichnung natürlich fachlich falsch. Doch was kümmert das den Menschen?

Alle netzwerkfähigen Geräte befinden sich in Abb. 1 in einem Netzwerk. Die Kaffeevollautomaten, Kühlschränke, Waschmaschinen und Wäschetrockner, Heizung, PV-Anlage, etc. habe ich rein aus Platzgründen weggelassen.

Während dieses einfache Setup viele Nachteile mit sich bringt, besitzt es allerdings auch einige Vorteile. Fast alle Internetdiensteanbieter, Elektronik-Fachmärkte und PC-Einzelhändler sind mit diesem Setup vertraut und nehmen an, dass es bei uns so aussieht. Die üblichen Boxen sind meist bekannt und können entsprechend konfiguriert oder im Fehlerfall ersetzt werden. Hierzu sind weder ein Informatikstudium noch 20 Jahre Berufserfahrung notwendig. Kurz gesagt, man findet leicht relativ günstige Hilfe, wenn es mal klemmt.

Ein (stark vereinfachtes) Nerd-Netzwerk

Ich verdiene mein Geld seit über 20 Jahren mit EDV/IT. Ich kenne sehr viele Menschen, die eine ähnliche Einstellung zu Technik haben, wie ich selbst. Glaubt mir bitte, wenn ich hier schreibe, dass das Netzwerk aus Abbilung 2 noch relativ einfach für Menschen unserer Profession ist.

dekorativ
Abb. 2: Beispiel eines stark vereinfacht dargestellten Nerd-Netzwerks

Das geschulte Auge erkennt, dass es hier nichts besonderes zu sehen gibt. Eine Firewall mit Dual-WAN-Konfiguration über zwei separate Internetdiensteanbieter (kanten- und knotendisjunkt) mit unterschiedlicher Technik, Mesh-WLAN, NAS, Linux-Hypervisor und eine Menge an Netzwerkgeräten.

Was in Abb. 2 nicht dargestellt ist, jedoch häufig ebenfalls vorzufinden ist, sind zentral verwaltete Switches mit Spanning-Tree-Protokoll, VLAN-Segmentierung für unterschiedliche Geräteklassen, diverse Netzwerkzonen und unterschiedliche WLAN-Netze für Bewohner, Besucher und Geräte aus Küche und Keller.

Nun stellen wir uns alle kurz vor, was es für unsere Familie bedeutet, wenn ein Dienst bzw. eine App auf dem Smartphone oder Tablet nicht mehr wie gewohnt funktionieren, wir nicht verfügbar sind und sie sich mit einer solchen Infrastruktur konfrontiert sehen. Tipp: Fragt eure Familie, wie sie im Fall einer IT-Störung ohne euch vorgehen würde und wie sicher sie wäre, diese Situation zu bewältigen, ohne ein tiefes Tal der Tränen durchschreiten zu müssen.

Um es einmal deutlich zu machen, mit unserer Nichtverfügbarkeit meine ich unsere Abwesenheit durch Scheidung, Krankheit, Knast oder Tod. Auf uns zu warten ist keine Option.

Vereinfacht dargestellt, sieht sich unsere Familie nun mit folgenden Herausforderungen konfrontiert:

  • Wie finde ich heraus, wo der Fehler liegt bzw. was nicht mehr funktioniert?
  • Wie greife ich auf diese vielen unterschiedlichen Geräte zu und wo finde ich die Zugangsdaten?

Exkurs: Ich erzähle immer gerne die Anekdote, dass ich in meiner Ausbildung zum Fachinformatiker FR. Systemintegration in Privathaushalten die DSL-Internetzugänge eingerichtet habe. Wenn ich an der entscheidenen Stelle um die Internetzugangsdaten bat, wurde mir häufig der Ordner mit den Telefonrechnungen gegeben. Es bedurfte dann weiterer Erklärung, was ich brauche und wie dies aussieht. Manchmal stellte sich dann heraus, dass der entsprechende Brief als unwichtig erachtet und bereits entsorgt wurde.

Der kleine Exkurs macht deutlich, dass es für „normale Menschen“ schon bei einer einfachen Umgebung die Chance zum Scheitern gab und gibt. Viel Spaß mit der Spielwiese eures Nerds. Vielleicht nutzt eure Familie eure selbstgehosteten Dienste wie z.B. Paperless-NGX und sind sogar darauf angewiesen. Doch weiß sie, dass dieser Anwendung durch mehrere rootless Podman-Container bereitgestellt wird, die in einer virtuellen Maschine auf eurem Linux-Server laufen?

Dabei muss sich eure Familie für ihre Unkenntnis nicht schämen. Denn bei OPNsense, Linux-Hypervisor mit virtuellen Maschinen und Containern und einer nicht ganz so weit verbreiteten WLAN-Mesh-Lösung sind auch die meisten Support-Abteilungen der Internetdiensteanbieter, PC-Einzelhändler und Elektronikmärkte überfordert. Zwar können hier häufig professionelle Systemhäuser weiterhelfen, doch dann wird es schnell sehr teuer (bei Tagessätzen zwischen 800-1400 Euro).

Hypothese: Wir basteln gern und probieren gerne Dinge aus. Die wenigsten von uns pflegen einen Servicekatalog für die Dienste im Heimnetzwerk.

Das Risiko ist groß, dass eure Familie den Zugriff auf Dokumente, Familienfotos und die Haussteuerung verliert, wenn ihr nicht mehr verfügbar seid und ein Fehler auftritt.

Lösungsansätze

Doch wie bereiten wir unsere Familie nun auf unsere Nichtverfügbarkeit vor?

In meinen Augen gibt es nicht die eine Lösung, die überall funktioniert. Ich stelle euch im Folgenden meine Lösungsansätze vor. Falls ihr denkt, dass diese auch für euch funktionieren, dürft ihr sie selbstverständlich gerne übernehmen. Versteht sie als Anregung, ohne Anspruch auf Vollständigkeit und Fehlerfreiheit.

Zugangsdaten

Ich verwalte meine Zugangsdaten in KeePassXC. Meine Familie hat weder auf die Geräte Zugriff, wo die KeePassXC-Datenbank liegt, noch auf die Datenbank selbst.

Einen gemeinsamen Passwort-Manager zu verwenden, wo wir den Zugriff auf bestimmte Zugangsdaten teilen können, funktioniert für uns nicht. Unsere Nutzungsgewohnheiten sind dafür aktuell einfach zu unterschiedlich.

Daher drucke ich alle wichtigen Zugangsdaten aus und stecke sie in einen Umschlag. Zu den Zugangsdaten gehören auch die Backup-Codes für Konten mit Multi-Faktor-Authentifizierung. Der Umschlag wird verschlossen, über der Verschlusslasche wird das Datum notiert und es kommt noch ein transparenter Klebestreifen darüber. Das ist eine einfache Sicherung, um zu erkennen, ob der Umschlag geöffnet wurde. Aus meiner Erfahrung ist es nicht möglich, den Klebestreifen zu entfernen und den Umschlag zu öffnen, ohne dass die Beschriftung erheblichen Schaden nimmt. Der Umschlag selbst wird an einem uns wohlbekannten Ort hinterlegt.

Falls der Umschlag mal geöffnet wurde und es niemand gewesen sein will, oder er gar weg ist, bedeutet das für mich einen Einmalaufwand zur Zugangsänderung. Das nehme ich in Kauf.

Meine Familie kann so im Notfall an die wichtigsten Zugangsdaten gelangen und sich Zugriff verschaffen.

Ein Risiko ist damit nicht abgesichert, nämlich dass der Umschlag und ich beide nicht verfügbar sind. Dieses Risiko akzeptieren wir.

Der Inhalt des Umschlags wird immer dann aktualisiert, wenn sich wichtige Zugangsdaten geändert haben. Glücklicherweise passiert dies nur ca. 1-2 Mal im Jahr.

Die Dokumentation für den Notfall

Jeder Systemadministrator schätzt eine gute Dokumentation.
Kein Systemadministrator schreibt gerne Dokumentation.

Meine Meinung

Es hilft aber alles nichts. Ich habe zu diesem Thema bereits die Artikel Dokumentation für den Notfall bzw. das digitale Erbe und das Update dazu geschrieben. Für den Vortrag habe ich eine Version erstellt, in der ich unsere echten Daten durch Platzhalter und Beispiele ersetzt habe. Diese habe ich als Datei in diesen Artikel eingefügt.

Ich hoffe, in dieser Dokumentation den richtigen Ton getroffen zu haben, so dass diese sowohl meiner Familie, als auch einer hinzugerufenen Fachkraft hilft.

Den Schreibtischtest hat diese Dokumentation bestanden. Meine Frau hat diese Dokumentation gelesen und sie für hilfreich befunden. Eine Notfall-Übung steht jedoch noch aus.

Fazit

Wir Nerds denken und funktionieren zum Teil anders als unsere Familienangehörigen. Es ist sinnvoll, mit diesen über das Theme der eigenen Nichtverfügbarkeit zu sprechen und zu erörtern, welche Informationen diese im Notfall benötigen.

Einigt euch bei der Dokumentation und Hinterlegung von Informationen auf Formate und Orte, die für alle Beteiligten funktionieren. Unsere Angewohnheiten unterscheiden sich teils deutlich.

Haltet die Notfall-Dokumentation aktuell, sonst nützt sie nichts. Dies ist vermutlich der schwierigste Punkt.

Führt Übungen durch. Sonst ist es ein Schrödingers-Notfall-Konzept.

Nächstes Wochenende ist wieder FrOSCon

Die Free and Open Source Software Conference bringt am 15.–16. August wieder Open‑Source‑Begeisterte aus ganz Europa an der Hochschule Bonn‑Rhein‑Sieg zusammen – und online!

URL: https://froscon.org

2 Tage, 7 Vortragsstränge + 2 Workshops parallel, Live‑Streams, Social Event & mehr, bei kostenlosem Eintritt.

Wo? In der Hochschule Bonn-Rhein-Sieg. Die Adresse für’s Navi: Grantham-Allee 20, 53757 Sankt Augustin. Das aktuelle Programm findet ihr unter der URL: https://programm.froscon.org/2026/

Die diesjährigen Keynotes werden in englischer Sprache gehalten:

Neben diesen möchte ich eure Aufmerksamkeit eigen- und uneigennützig auf folgende Vorträge in chronologischer Reihenfolge richten:

Dies ist natürlich nur eine kleine Auswahl. Und neben den Vorträgen und Workshops warten auch noch die Auststeller darauf, mit euch über ihre vielfältigen und tollen Open-Source-Projekte zu sprechen.

Möglich wird diese Konferenz durch die Unterstützung ihrer Partner und durch viele private Spenden. Vielen Dank allen Unterstüzenden!

Ich freue mich schon sehr und kann es kaum noch erwarten. Welchen Vorträgen oder Workshops seht ihr entgegen? Was gefällt euch an der FrOSCon und zieht euch nach Sankt Augustien? Schreibt es mir in die Kommentare.