Apparmor sshd: Unterschied zwischen den Versionen
(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 | + | =Wir brauchen die weiteren Profile= |
| − | *apt install | + | *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= | ||
| + | <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.