{ "$schema": "../schema/questions.schema.json", "format": "lpic-sim-questions", "meta": { "file": "questions_110_set2.json", "brief": "Zweiter Fragensatz zu Topic 110 Sicherheit (LPIC-1 102-500, Objectives 5.0)", "author": "Björn Runden ", "owner": "Björn Runden ", "assist": "KI-unterstützt (Claude Opus 5.5), geprüft von Björn Runden ", "version": "0.1.0 (30.10.2026)" }, "exam": "lpic1-102", "questions": [ { "id": "110.1-005", "objective": "110.1", "type": "multi", "difficulty": 2, "question": "`umount /mnt/usb` meldet „target is busy“. Mit welchen Befehlen findet man die Prozesse, die das Dateisystem noch verwenden?", "options": [ { "id": "a", "text": "`fuser -vm /mnt/usb`", "correct": true, "explanation": "`-m` betrachtet das ganze eingehängte Dateisystem, `-v` zeigt Benutzer, PID und Zugriffsart." }, { "id": "b", "text": "`lsof /mnt/usb`", "correct": true, "explanation": "Für einen Einhängepunkt listet `lsof` alle offenen Dateien auf diesem Dateisystem." }, { "id": "c", "text": "`df /mnt/usb`", "correct": false, "explanation": "Zeigt nur Belegung und Größe." }, { "id": "d", "text": "`mount -l`", "correct": false, "explanation": "Listet eingehängte Dateisysteme mit Labels." }, { "id": "e", "text": "`ps -m`", "correct": false, "explanation": "`-m` zeigt Threads, keine Dateibezüge." } ], "explanation": "Häufige Ursache: Eine Shell steht mit ihrem aktuellen Verzeichnis im Einhängepunkt. `fuser -km` beendet die Prozesse (Vorsicht).", "references": ["man 1 fuser", "man 8 lsof"] }, { "id": "110.1-006", "objective": "110.1", "type": "fill", "difficulty": 2, "question": "In welcher Datei (vollständiger Pfad) legt man über PAM dauerhafte Ressourcenlimits (wie bei `ulimit`) für Benutzer und Gruppen fest?", "answers": ["/etc/security/limits.conf"], "explanation": "Zeilen der Form ` `, z. B. `@studenten hard nproc 100`. Ergänzungen in `/etc/security/limits.d/`.", "references": ["man 5 limits.conf"] }, { "id": "110.1-007", "objective": "110.1", "type": "single", "difficulty": 2, "question": "Was erlaubt die sudoers-Zeile `bob ALL=(root) /usr/bin/systemctl restart nginx`?", "options": [ { "id": "a", "text": "`bob` darf auf allen Hosts genau diesen Befehl als root ausführen (mit seinem eigenen Passwort).", "correct": true, "explanation": "Aufbau: Benutzer Hosts=(Zielbenutzer) Befehle." }, { "id": "b", "text": "`bob` darf alle Befehle als root ausführen.", "correct": false, "explanation": "Dafür stünde am Ende `ALL`." }, { "id": "c", "text": "`bob` darf nginx ohne Passwort neu starten.", "correct": false, "explanation": "Ohne Passwortabfrage nur mit `NOPASSWD:` vor dem Befehl." }, { "id": "d", "text": "root darf Befehle als `bob` ausführen.", "correct": false, "explanation": "Die Zeile berechtigt `bob`, nicht root." }, { "id": "e", "text": "`bob` muss das root-Passwort eingeben.", "correct": false, "explanation": "sudo fragt standardmäßig das Passwort des **aufrufenden** Benutzers." } ], "explanation": "Gruppen beginnen mit `%`, z. B. `%admin ALL=(ALL:ALL) ALL`. Erlaubte Befehle zeigt `sudo -l`.", "references": ["man 5 sudoers"] }, { "id": "110.1-008", "objective": "110.1", "type": "single", "difficulty": 1, "question": "Was bewirkt `su - anna`?", "options": [ { "id": "a", "text": "Es startet eine Login-Shell als `anna` mit deren Umgebung und Home-Verzeichnis.", "correct": true, "explanation": "`-` (bzw. `-l`) simuliert eine vollständige Anmeldung." }, { "id": "b", "text": "Es wechselt zu `anna`, behält aber Umgebung und Verzeichnis des Aufrufers.", "correct": false, "explanation": "Das macht `su anna` **ohne** Bindestrich." }, { "id": "c", "text": "Es entfernt das Konto `anna`.", "correct": false, "explanation": "Konten löscht `userdel`." }, { "id": "d", "text": "Es führt einen Befehl als root aus und fragt nach dem Passwort von `anna`.", "correct": false, "explanation": "`su` fragt nach dem Passwort des **Zielbenutzers** (hier anna), außer root ruft auf." }, { "id": "e", "text": "Es sperrt `anna` für die Dauer der Sitzung.", "correct": false, "explanation": "`su` sperrt keine Konten." } ], "explanation": "Einzelnen Befehl: `su - anna -c \"befehl\"`. Ohne Benutzername wechselt `su` zu root.", "references": ["man 1 su"] }, { "id": "110.1-009", "objective": "110.1", "type": "single", "difficulty": 1, "question": "Welcher Befehl zeigt **fehlgeschlagene** Anmeldeversuche aus `/var/log/btmp`?", "options": [ { "id": "a", "text": "`lastb`", "correct": true, "explanation": "„last bad“; nur für root lesbar." }, { "id": "b", "text": "`last`", "correct": false, "explanation": "Zeigt erfolgreiche Anmeldungen aus `wtmp`." }, { "id": "c", "text": "`lastlog`", "correct": false, "explanation": "Zeigt je Benutzer die letzte Anmeldung." }, { "id": "d", "text": "`who`", "correct": false, "explanation": "Zeigt aktuell angemeldete Benutzer." }, { "id": "e", "text": "`w`", "correct": false, "explanation": "Zeigt angemeldete Benutzer und deren Aktivität." } ], "explanation": "Viele fehlgeschlagene SSH-Anmeldungen sind ein Hinweis auf Brute-Force-Versuche (Abhilfe z. B. Schlüssel statt Passwort).", "references": ["man 1 last"] }, { "id": "110.1-010", "objective": "110.1", "type": "multi", "difficulty": 2, "question": "Welche Aussagen zu `nmap` treffen zu?", "options": [ { "id": "a", "text": "`nmap -sT host01` führt einen TCP-Connect-Scan durch.", "correct": true, "explanation": "Baut vollständige TCP-Verbindungen auf; braucht keine Root-Rechte." }, { "id": "b", "text": "Portscans sollten nur gegen eigene Systeme oder mit ausdrücklicher Erlaubnis laufen.", "correct": true, "explanation": "Fremde Systeme zu scannen kann rechtliche Folgen haben." }, { "id": "c", "text": "`nmap` ändert die Firewall-Regeln des Ziels.", "correct": false, "explanation": "`nmap` beobachtet nur, es konfiguriert nichts." }, { "id": "d", "text": "`nmap -p 22 host01` scannt alle Ports außer 22.", "correct": false, "explanation": "`-p 22` scannt **nur** Port 22." }, { "id": "e", "text": "`nmap` kann nur den eigenen Rechner prüfen.", "correct": false, "explanation": "Es scannt beliebige erreichbare Hosts und Netze." } ], "explanation": "Ohne Angabe prüft nmap die 1000 häufigsten Ports. `-sU` scannt UDP, `-sV` erkennt Dienstversionen.", "references": ["man 1 nmap"] }, { "id": "110.2-006", "objective": "110.2", "type": "single", "difficulty": 2, "question": "Was bewirkt `systemctl mask cups.service`?", "options": [ { "id": "a", "text": "Die Unit wird auf `/dev/null` verlinkt und kann weder manuell noch als Abhängigkeit gestartet werden.", "correct": true, "explanation": "Stärker als `disable`; rückgängig mit `systemctl unmask`." }, { "id": "b", "text": "Der Dienst wird nur beim nächsten Start nicht automatisch gestartet.", "correct": false, "explanation": "Das ist `disable`; manuell starten ginge weiterhin." }, { "id": "c", "text": "Der Dienst wird versteckt, läuft aber weiter.", "correct": false, "explanation": "`mask` stoppt einen laufenden Dienst nicht automatisch – starten lässt er sich danach aber nicht mehr." }, { "id": "d", "text": "Die Protokollausgabe des Dienstes wird unterdrückt.", "correct": false, "explanation": "`mask` hat mit Logging nichts zu tun." }, { "id": "e", "text": "Der Dienst läuft danach nur noch für root.", "correct": false, "explanation": "`mask` kennt keine Benutzerbeschränkung." } ], "explanation": "Zum sofortigen Stoppen zusätzlich `--now` angeben. Status `masked` zeigt `systemctl status` bzw. `list-unit-files`.", "references": ["man 1 systemctl"] }, { "id": "110.2-007", "objective": "110.2", "type": "single", "difficulty": 1, "question": "Was passiert, wenn ein Benutzer mit der Login-Shell `/usr/sbin/nologin` sich per SSH anmelden will?", "options": [ { "id": "a", "text": "Eine Meldung wird ausgegeben und die Verbindung beendet; eine interaktive Sitzung entsteht nicht.", "correct": true, "explanation": "`nologin` gibt „This account is currently not available.“ (bzw. `/etc/nologin.txt`) aus und endet mit Fehler." }, { "id": "b", "text": "Der Benutzer erhält eine eingeschränkte Bash.", "correct": false, "explanation": "Es wird gar keine Shell gestartet." }, { "id": "c", "text": "Das Konto wird dauerhaft gelöscht.", "correct": false, "explanation": "`nologin` ändert keine Konten." }, { "id": "d", "text": "Die Anmeldung gelingt nur mit SSH-Schlüssel.", "correct": false, "explanation": "Auch mit Schlüssel endet die Sitzung sofort." }, { "id": "e", "text": "Es gilt nur für root, normale Benutzer sind nicht betroffen.", "correct": false, "explanation": "Es gilt für jedes Konto mit dieser Shell." } ], "explanation": "Nicht verwechseln mit `/etc/nologin`: Diese Datei sperrt **alle** Nicht-root-Anmeldungen, solange sie existiert.", "references": ["man 8 nologin"] }, { "id": "110.2-008", "objective": "110.2", "type": "fill", "difficulty": 2, "question": "Mit welchem `systemctl`-Aufruf (Befehl und Unterbefehl) listet man alle Socket-Units mit ihren lauschenden Adressen auf?", "answers": ["systemctl list-sockets"], "explanation": "Socket-Units (`*.socket`) lauschen stellvertretend und starten den Dienst bei Bedarf.", "references": ["man 1 systemctl", "man 5 systemd.socket"] }, { "id": "110.2-009", "objective": "110.2", "type": "single", "difficulty": 2, "question": "Welche Aussage zu **xinetd** trifft zu?", "options": [ { "id": "a", "text": "Als Super-Server lauscht er für mehrere Dienste und startet sie erst bei einer Verbindung; Konfiguration in `/etc/xinetd.conf` und `/etc/xinetd.d/`.", "correct": true, "explanation": "In `/etc/xinetd.d/` schaltet `disable = yes` einen Dienst ab." }, { "id": "b", "text": "xinetd ist eine Firewall auf Paketebene.", "correct": false, "explanation": "Paketfilter sind z. B. nftables/iptables." }, { "id": "c", "text": "xinetd ersetzt den Kernel-Scheduler.", "correct": false, "explanation": "Kein Zusammenhang." }, { "id": "d", "text": "xinetd wird über `/etc/inittab` konfiguriert.", "correct": false, "explanation": "`/etc/inittab` gehört zu SysV-init." }, { "id": "e", "text": "xinetd ist der Nachfolger von systemd.", "correct": false, "explanation": "Umgekehrt: systemd-Socket-Units übernehmen heute meist diese Aufgabe." } ], "explanation": "Auf modernen Systemen selten; Prinzip „Dienste nur bei Bedarf starten“ lebt in systemd-Socket-Aktivierung weiter.", "references": ["man 8 xinetd", "man 5 xinetd.conf"] }, { "id": "110.2-010", "objective": "110.2", "type": "multi", "difficulty": 1, "question": "Welche Maßnahmen verringern die **Angriffsfläche** eines Servers?", "options": [ { "id": "a", "text": "Nicht benötigte Dienste stoppen und deaktivieren", "correct": true, "explanation": "Jeder laufende Netzwerkdienst ist ein möglicher Angriffspunkt." }, { "id": "b", "text": "Dienste, die nur lokal gebraucht werden, nur an `127.0.0.1` binden", "correct": true, "explanation": "Dann sind sie aus dem Netz nicht erreichbar." }, { "id": "c", "text": "`/etc/shadow` für alle lesbar machen (644)", "correct": false, "explanation": "Damit könnten alle Benutzer die Hashes offline knacken." }, { "id": "d", "text": "SSH-Anmeldung als root mit Passwort erlauben", "correct": false, "explanation": "Erhöht das Risiko durch Passwortraten auf das mächtigste Konto." }, { "id": "e", "text": "Telnet für die Fernwartung verwenden", "correct": false, "explanation": "Telnet überträgt alles inklusive Passwort im Klartext." } ], "explanation": "Vorgehen: lauschende Ports ermitteln (`ss -tulpn`), unnötige Dienste abschalten, Rest mit Firewall und Updates absichern.", "references": ["LPI 102-500 Objective 110.2"] }, { "id": "110.2-011", "objective": "110.2", "type": "single", "difficulty": 2, "question": "Welche Aussage zur **Socket-Aktivierung** bei systemd trifft zu?", "options": [ { "id": "a", "text": "systemd lauscht selbst auf dem Socket und startet den zugehörigen Dienst erst bei der ersten Verbindung.", "correct": true, "explanation": "Die `.socket`-Unit hält den Port offen und übergibt ihn an den Dienst." }, { "id": "b", "text": "Der Dienst muss vorher manuell gestartet sein, sonst gehen Verbindungen verloren.", "correct": false, "explanation": "Gerade das Gegenteil: Verbindungen werden gepuffert, bis der Dienst läuft." }, { "id": "c", "text": "Socket-Units ersetzen die Firewall.", "correct": false, "explanation": "Sie regeln nicht, **wer** sich verbinden darf." }, { "id": "d", "text": "Socket-Aktivierung funktioniert nur mit UDP.", "correct": false, "explanation": "TCP, UDP und Unix-Sockets werden unterstützt." }, { "id": "e", "text": "Socket-Units werden in `/etc/xinetd.d/` konfiguriert.", "correct": false, "explanation": "Sie liegen wie andere Units z. B. unter `/etc/systemd/system/`." } ], "explanation": "Beispiel: `ssh.socket` statt `ssh.service`. Auch eine deaktivierte Service-Unit kann so über ihre aktive Socket-Unit gestartet werden – beim Härten beide prüfen.", "references": ["man 5 systemd.socket"] }, { "id": "110.3-007", "objective": "110.3", "type": "single", "difficulty": 1, "question": "Wie überträgt man den eigenen öffentlichen SSH-Schlüssel am einfachsten auf den Server `host01`?", "options": [ { "id": "a", "text": "`ssh-copy-id anna@host01`", "correct": true, "explanation": "Hängt den öffentlichen Schlüssel an `~/.ssh/authorized_keys` auf dem Server an und setzt passende Rechte." }, { "id": "b", "text": "`scp ~/.ssh/id_ed25519 anna@host01:`", "correct": false, "explanation": "Kopiert den **privaten** Schlüssel – ein Sicherheitsproblem und wirkungslos für die Anmeldung." }, { "id": "c", "text": "`ssh-add anna@host01`", "correct": false, "explanation": "`ssh-add` lädt Schlüssel in den lokalen ssh-agent." }, { "id": "d", "text": "`ssh-keyscan host01`", "correct": false, "explanation": "Holt die **Host**-Schlüssel des Servers ab." }, { "id": "e", "text": "`ssh-agent anna@host01`", "correct": false, "explanation": "`ssh-agent` hält Schlüssel im Speicher, überträgt nichts." } ], "explanation": "Mit `-i ~/.ssh/datei.pub` wählt man einen bestimmten Schlüssel.", "references": ["man 1 ssh-copy-id"] }, { "id": "110.3-008", "objective": "110.3", "type": "fill", "difficulty": 1, "question": "Wie heißt die Konfigurationsdatei des OpenSSH-**Servers**? (vollständiger Pfad)", "answers": ["/etc/ssh/sshd_config"], "explanation": "Die Client-Konfiguration ist `/etc/ssh/ssh_config` bzw. `~/.ssh/config`. Nach Änderungen `sshd -t` prüfen und den Dienst neu laden.", "references": ["man 5 sshd_config"] }, { "id": "110.3-009", "objective": "110.3", "type": "single", "difficulty": 1, "question": "Welcher GnuPG-Befehl listet die öffentlichen Schlüssel im eigenen Schlüsselbund auf?", "options": [ { "id": "a", "text": "`gpg --list-keys`", "correct": true, "explanation": "Kurzform `gpg -k`." }, { "id": "b", "text": "`gpg --list-secret-keys`", "correct": false, "explanation": "Listet die **privaten** Schlüssel (`-K`)." }, { "id": "c", "text": "`gpg --export`", "correct": false, "explanation": "Gibt öffentliche Schlüssel zur Weitergabe aus (binär oder mit `--armor`)." }, { "id": "d", "text": "`gpg --import`", "correct": false, "explanation": "Importiert Schlüssel aus einer Datei." }, { "id": "e", "text": "`gpg --verify`", "correct": false, "explanation": "Prüft Signaturen." } ], "explanation": "Schlüsselbund liegt in `~/.gnupg/`. Schlüssel verteilen: `gpg --export --armor anna@example.org > anna.asc`.", "references": ["man 1 gpg"] }, { "id": "110.3-010", "objective": "110.3", "type": "single", "difficulty": 2, "question": "Zu `release.tar.gz` gibt es die abgetrennte Signatur `release.tar.gz.sig`. Wie prüft man sie?", "options": [ { "id": "a", "text": "`gpg --verify release.tar.gz.sig release.tar.gz`", "correct": true, "explanation": "Erst die Signatur, dann die signierte Datei; der öffentliche Schlüssel des Signierers muss importiert sein." }, { "id": "b", "text": "`gpg --decrypt release.tar.gz`", "correct": false, "explanation": "Die Datei ist nicht verschlüsselt, nur signiert." }, { "id": "c", "text": "`gpg --sign release.tar.gz.sig`", "correct": false, "explanation": "Würde selbst eine neue Signatur erstellen." }, { "id": "d", "text": "`sha256sum release.tar.gz.sig`", "correct": false, "explanation": "Berechnet nur eine Prüfsumme der Signaturdatei." }, { "id": "e", "text": "`gpg --list-keys release.tar.gz`", "correct": false, "explanation": "Listet Schlüssel, prüft nichts." } ], "explanation": "„Good signature“ heißt nur: passt zum Schlüssel. Ob der Schlüssel vertrauenswürdig ist, zeigt der Fingerabdruck-Abgleich über einen sicheren Kanal.", "references": ["man 1 gpg"] }, { "id": "110.3-011", "objective": "110.3", "type": "single", "difficulty": 1, "question": "Wie lädt man den privaten Schlüssel `~/.ssh/id_ed25519` in einen laufenden **ssh-agent**?", "options": [ { "id": "a", "text": "`ssh-add ~/.ssh/id_ed25519`", "correct": true, "explanation": "Fragt einmal nach der Passphrase; danach nutzt ssh den Schlüssel aus dem Agent. `ssh-add -l` listet geladene Schlüssel." }, { "id": "b", "text": "`ssh -A ~/.ssh/id_ed25519`", "correct": false, "explanation": "`-A` aktiviert Agent-Weiterleitung für eine Verbindung." }, { "id": "c", "text": "`ssh-keygen -a ~/.ssh/id_ed25519`", "correct": false, "explanation": "`-a` legt die Anzahl der KDF-Runden beim Erzeugen fest." }, { "id": "d", "text": "`ssh-copy-id ~/.ssh/id_ed25519`", "correct": false, "explanation": "Überträgt einen öffentlichen Schlüssel auf einen Server." }, { "id": "e", "text": "`ssh-agent -k`", "correct": false, "explanation": "`-k` beendet den laufenden Agent." } ], "explanation": "Agent starten (falls nicht durch die Desktop-Sitzung geschehen): `eval \"$(ssh-agent)\"`.", "references": ["man 1 ssh-add", "man 1 ssh-agent"] }, { "id": "110.3-012", "objective": "110.3", "type": "multi", "difficulty": 2, "question": "Welche Aussagen zu GnuPG treffen zu?", "options": [ { "id": "a", "text": "Man verschlüsselt mit dem **öffentlichen** Schlüssel des Empfängers.", "correct": true, "explanation": "Nur der Inhaber des passenden privaten Schlüssels kann entschlüsseln." }, { "id": "b", "text": "Man signiert mit dem eigenen **privaten** Schlüssel.", "correct": true, "explanation": "Jeder mit dem öffentlichen Schlüssel kann die Signatur prüfen." }, { "id": "c", "text": "Der Empfänger entschlüsselt mit dem öffentlichen Schlüssel des Absenders.", "correct": false, "explanation": "Entschlüsselt wird mit dem eigenen privaten Schlüssel." }, { "id": "d", "text": "Ein Widerrufszertifikat dient zum Verschlüsseln von Dateien.", "correct": false, "explanation": "Es erklärt einen Schlüssel für ungültig, z. B. nach Verlust." }, { "id": "e", "text": "`~/.gnupg` sollte für alle lesbar sein, damit andere die Schlüssel finden.", "correct": false, "explanation": "Das Verzeichnis enthält private Schlüssel und muss privat bleiben (700); öffentliche Schlüssel verteilt man per Export." } ], "explanation": "Hintergrund-Daemon: `gpg-agent` verwaltet Passphrasen; Widerrufszertifikat erzeugen mit `gpg --gen-revoke`.", "references": ["man 1 gpg"] }, { "id": "110.3-013", "objective": "110.3", "type": "fill", "difficulty": 1, "question": "Mit welcher `ssh`-Option gibt man eine bestimmte Datei mit dem privaten Schlüssel für die Anmeldung an? (nur die Option)", "answers": ["-i"], "explanation": "Beispiel: `ssh -i ~/.ssh/labor_ed25519 anna@host01`. Dauerhaft in `~/.ssh/config` mit `IdentityFile`.", "references": ["man 1 ssh"] }, { "id": "110.3-014", "objective": "110.3", "type": "single", "difficulty": 2, "question": "Welche Einstellung in `/etc/ssh/sshd_config` verbietet die Anmeldung per **Passwort** für alle Benutzer?", "options": [ { "id": "a", "text": "`PasswordAuthentication no`", "correct": true, "explanation": "Danach sind nur noch Schlüssel bzw. andere Verfahren möglich – vorher Schlüssel-Anmeldung testen!" }, { "id": "b", "text": "`PermitRootLogin no`", "correct": false, "explanation": "Verbietet nur die Anmeldung als root." }, { "id": "c", "text": "`PubkeyAuthentication no`", "correct": false, "explanation": "Verbietet die Schlüssel-Anmeldung – das Gegenteil." }, { "id": "d", "text": "`AllowUsers none`", "correct": false, "explanation": "Erlaubt nur einem Benutzer namens `none` die Anmeldung." }, { "id": "e", "text": "`X11Forwarding no`", "correct": false, "explanation": "Betrifft nur die X11-Weiterleitung." } ], "explanation": "Abhängig von PAM sollte zusätzlich `KbdInteractiveAuthentication no` gesetzt sein, sonst ist eine Passwortabfrage über PAM noch möglich.", "references": ["man 5 sshd_config"] } ] }