Apparmor sshd: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „=Wir brauchen wget oder curl= *apt install wget curl =Bezugsquelle= ;Auf github gibt es ein vorgefertigtes Profil *https://gist.github.com/andyg5000/a1b3701b6c…“)
 
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Wir brauchen wget oder curl=
+
=Wir brauchen die weiteren Profile=
*apt install wget curl
+
*sudo apt install apparmor-profiles apparmor-profiles-extra apparmor-utils rsyslog
=Bezugsquelle=
+
 
;Auf github gibt es ein vorgefertigtes Profil
+
=Installation=
*https://gist.github.com/andyg5000/a1b3701b6c8aa36cbd08
+
*cd /etc/apparmor.d/
 +
*cp /usr/share/apparmor/extra-profiles/usr.sbin.sshd /etc/apparmor.d/
 +
=Restart ssh=
 +
systemctl restart sshd
 +
aa-status | grep sshd
 +
 
 +
=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>
 +
Updating AppArmor profiles in /etc/apparmor.d.
 +
Reading log entries from /var/log/syslog.
 +
 
 +
Profile:  /usr/sbin/sshd
 +
Execute:  /usr/lib/openssh/sshd-session
 +
Severity: unknown
 +
 
 +
In(h)erit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (I)gnore / (F)inish
 +
 
 +
</pre>
 +
 
 +
=Was die Optionen bedeuten=
 +
*In(h)erit – Kind läuft unter demselben Profil wie sshd (keine Trennung)
 +
*(C)hild – erzeugt ein hierarchisches Unterprofil (sshd//sshd-session)
 +
*(P)rofile – erzeugt ein eigenständiges, separates Profil für sshd-session
 +
*(N)amed – benutzerdefinierter Transitionsname
 +
*(U)nconfined – Kind läuft komplett ohne Einschränkung
 +
*(X) ix – Exec-Vererbung ohne Domain-Wechsel
 +
*(D)eny – Ausführung komplett verbieten (würde SSH kaputt machen!)
 +
=Der Einlogversuch zeigt, dass eine Menge noch freizuschalten ist=
 +
 
 +
=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.

Aktuelle Version vom 28. Juli 2026, 11:08 Uhr

Wir brauchen die weiteren Profile

  • sudo apt install apparmor-profiles apparmor-profiles-extra apparmor-utils rsyslog

Installation

  • cd /etc/apparmor.d/
  • cp /usr/share/apparmor/extra-profiles/usr.sbin.sshd /etc/apparmor.d/

Restart ssh

systemctl restart sshd aa-status | grep sshd

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

Updating AppArmor profiles in /etc/apparmor.d.
Reading log entries from /var/log/syslog.

Profile:  /usr/sbin/sshd
Execute:  /usr/lib/openssh/sshd-session
Severity: unknown

In(h)erit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (I)gnore / (F)inish

Was die Optionen bedeuten

  • In(h)erit – Kind läuft unter demselben Profil wie sshd (keine Trennung)
  • (C)hild – erzeugt ein hierarchisches Unterprofil (sshd//sshd-session)
  • (P)rofile – erzeugt ein eigenständiges, separates Profil für sshd-session
  • (N)amed – benutzerdefinierter Transitionsname
  • (U)nconfined – Kind läuft komplett ohne Einschränkung
  • (X) ix – Exec-Vererbung ohne Domain-Wechsel
  • (D)eny – Ausführung komplett verbieten (würde SSH kaputt machen!)

Der Einlogversuch zeigt, dass eine Menge noch freizuschalten ist

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.