Apparmor sshd: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
=Wir brauchen die weiteren Profile=
+
=Typische aa-logprof-Abfragen bei sshd=
*sudo apt install apparmor-profiles apparmor-profiles-extra
+
Beim ersten Einlogversuch (SSH-Login mit Passwort oder Key, ggf. mit sudo danach) tauchen meist mehrere solcher Abfragen nacheinander auf. Hier die häufigsten, mit Empfehlung:
=Installation=
 
*cd /etc/apparmor.d/
 
*cp /usr/share/apparmor/extra-profiles/usr.sbin.sshd /etc/apparmor.d/
 
=Je nach dem in den enforce oder complain Modus=
 
*aa-enforce /etc/apparmor.d/usr.sbin.sshd
 
oder
 
*aa-complain /etc/apparmor.d/usr.sbin.sshd
 
*aa-logprof
 
=Gucken ob man noch Dinge ergänzen muss=
 
<pre>
 
Reading log entries from /var/log/syslog.
 
Updating AppArmor profiles in /etc/apparmor.d.
 
Complain-mode changes:
 
  
Profile:    /usr/sbin/sshd
+
==capability net_admin==
Capability: net_admin
+
Wird von sshd für bestimmte Netzwerk-Operationen (z.B. TCP-Keepalive-Tuning) benötigt.
Severity:  8
+
(A)llow
  
  [1 - capability net_admin,]
+
==capability sys_resource==
(A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish
+
Für das Setzen von Ressourcen-Limits (ulimits) bei neuen Sessions.
</pre>
+
  (A)llow
=Der Einlogversuch zeigt, dass eine Menge noch freizuschalten ist=
+
 
*Bitte ergänzen
+
==capability dac_override / dac_read_search==
 +
Nötig, damit sshd trotz fehlender klassischer Unix-Rechte auf bestimmte Dateien zugreifen kann (z.B. beim Public-Key-Check in User-Homes).
 +
(A)llow
 +
 
 +
==capability chown / setuid / setgid==
 +
Für den Wechsel vom Login-User-Kontext (Privilege Drop nach erfolgreicher Authentifizierung).
 +
(A)llow -- zwingend nötig, sonst schlägt jeder Login fehl
 +
 
 +
==Datei-Zugriffe /run/sshd/*==
 +
PID-Files und Runtime-Sockets von sshd.
 +
(A)llow, meist als "rw" nötig
 +
 
 +
==Datei-Zugriffe /home/*/.ssh/authorized_keys==
 +
Für Public-Key-Auth zwingend erforderlich.
 +
(A)llow (r)
 +
 
 +
==Datei-Zugriffe /var/log/lastlog, /var/log/wtmp, /var/log/btmp==
 +
Für Login-Historie / "last login"-Anzeige.
 +
(A)llow (rw)
 +
 
 +
==Datei-Zugriffe /etc/environment, /etc/default/locale==
 +
Für Umgebungsvariablen der neuen Session.
 +
(A)llow (r)
 +
 
 +
==PTY-Zugriffe /dev/pts/*==
 +
Für die eigentliche Terminal-Session nach dem Login.
 +
(A)llow (rw)
 +
 
 +
==Zugriffe auf PAM-Module /lib/x86_64-linux-gnu/security/*.so bzw. /usr/lib/.../security/*.so==
 +
Werden für die PAM-Authentifizierungskette (pam_unix, pam_faillock etc.) nachgeladen.
 +
(A)llow (mr)
 +
 
 +
'''Wichtig:''' Bei jedem Punkt mit (A)llow bestätigen antwortet man die aa-logprof-Abfrage. Am Ende speichert man mit
 +
(S)ave
 +
 
 +
=Nach dem Durchlauf=
 +
*Profil erneut in den enforce-Mode setzen (falls vorher complain zum Testen):
 +
aa-enforce /etc/apparmor.d/usr.sbin.sshd
 +
*sshd neu starten, damit das aktualisierte Profil sicher greift:
 +
systemctl restart apparmor
 +
systemctl restart sshd
 +
*Erneuten Login-Test durchführen und /var/log/syslog bzw. journalctl -xe auf weitere "DENIED"-Einträge prüfen:
 +
journalctl -xe | grep -i apparmor
 +
 
 +
=Kontrolle des fertigen Profils=
 +
aa-status | grep sshd
 +
sollte sshd jetzt im Abschnitt "profiles are in enforce mode" zeigen.
 +
 
 +
=Didaktischer Hinweis für den Kurs=
 +
Gut geeignet, um zu zeigen, dass ein "fertiges" Profil selten beim ersten Durchlauf vollständig ist -- gerade bei Diensten wie sshd, die PAM, PTYs und Privilege-Dropping kombinieren, braucht es meist 2-3 Login-Zyklen (normaler Login, sudo danach, evtl. SFTP-Zugriff), bis aa-logprof keine neuen Einträge mehr findet.

Version vom 28. Juli 2026, 07:38 Uhr

Typische aa-logprof-Abfragen bei sshd

Beim ersten Einlogversuch (SSH-Login mit Passwort oder Key, ggf. mit sudo danach) tauchen meist mehrere solcher Abfragen nacheinander auf. Hier die häufigsten, mit Empfehlung:

capability net_admin

Wird von sshd für bestimmte Netzwerk-Operationen (z.B. TCP-Keepalive-Tuning) benötigt.

(A)llow

capability sys_resource

Für das Setzen von Ressourcen-Limits (ulimits) bei neuen Sessions.

(A)llow

capability dac_override / dac_read_search

Nötig, damit sshd trotz fehlender klassischer Unix-Rechte auf bestimmte Dateien zugreifen kann (z.B. beim Public-Key-Check in User-Homes).

(A)llow

capability chown / setuid / setgid

Für den Wechsel vom Login-User-Kontext (Privilege Drop nach erfolgreicher Authentifizierung).

(A)llow -- zwingend nötig, sonst schlägt jeder Login fehl

Datei-Zugriffe /run/sshd/*

PID-Files und Runtime-Sockets von sshd.

(A)llow, meist als "rw" nötig

Datei-Zugriffe /home/*/.ssh/authorized_keys

Für Public-Key-Auth zwingend erforderlich.

(A)llow (r)

Datei-Zugriffe /var/log/lastlog, /var/log/wtmp, /var/log/btmp

Für Login-Historie / "last login"-Anzeige.

(A)llow (rw)

Datei-Zugriffe /etc/environment, /etc/default/locale

Für Umgebungsvariablen der neuen Session.

(A)llow (r)

PTY-Zugriffe /dev/pts/*

Für die eigentliche Terminal-Session nach dem Login.

(A)llow (rw)

Zugriffe auf PAM-Module /lib/x86_64-linux-gnu/security/*.so bzw. /usr/lib/.../security/*.so

Werden für die PAM-Authentifizierungskette (pam_unix, pam_faillock etc.) nachgeladen.

(A)llow (mr)

Wichtig: Bei jedem Punkt mit (A)llow bestätigen antwortet man die aa-logprof-Abfrage. Am Ende speichert man mit

(S)ave

Nach dem Durchlauf

  • Profil erneut in den enforce-Mode setzen (falls vorher complain zum Testen):
aa-enforce /etc/apparmor.d/usr.sbin.sshd
  • sshd neu starten, damit das aktualisierte Profil sicher greift:
systemctl restart apparmor
systemctl restart sshd
  • Erneuten Login-Test durchführen und /var/log/syslog bzw. journalctl -xe auf weitere "DENIED"-Einträge prüfen:
journalctl -xe | grep -i apparmor

Kontrolle des fertigen Profils

aa-status | grep sshd

sollte sshd jetzt im Abschnitt "profiles are in enforce mode" zeigen.

Didaktischer Hinweis für den Kurs

Gut geeignet, um zu zeigen, dass ein "fertiges" Profil selten beim ersten Durchlauf vollständig ist -- gerade bei Diensten wie sshd, die PAM, PTYs und Privilege-Dropping kombinieren, braucht es meist 2-3 Login-Zyklen (normaler Login, sudo danach, evtl. SFTP-Zugriff), bis aa-logprof keine neuen Einträge mehr findet.