Files
lpic-sim/simulator/data/lpic1_102/questions_110_set2.json
T
2026-10-30 15:40:37 +01:00

312 lines
22 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$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 <br@runden.de>",
"owner": "Björn Runden <br@runden.de>",
"assist": "KI-unterstützt (Claude Opus 5.5), geprüft von Björn Runden <br@runden.de>",
"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 `<domain> <soft|hard> <item> <wert>`, 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/<dienst>` 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"]
}
]
}