NoctisNode
← HandleidingenBeveiliging2026-10-238 min

SSH StrictModes, agent forwarding (ssh -A) en ssh -a uitgelegd

SSH StrictModes weigert sleutels als home, ~/.ssh of authorized_keys door anderen beschrijfbaar zijn; los het op met chmod. Vermijd ssh -A op onbetrouwbare hosts; ssh -a schakelt het uit.

Kort gezegd: `StrictModes yes` (de standaard in OpenSSH) laat sshd het eigenaarschap en de rechten van je homedirectory, `~/.ssh` en `~/.ssh/authorized_keys` controleren voordat een sleutel wordt geaccepteerd, en weigert de login met "Authentication refused: bad ownership or modes" als een ervan beschrijfbaar is voor de groep of anderen, of eigendom is van een andere gebruiker. Herstel de rechten in plaats van de controle uit te schakelen. Agent forwarding met `ssh -A` laat de externe host je lokale sleutels gebruiken zolang je verbonden bent, dus vermijd het op hosts die je niet volledig vertrouwt en gebruik in plaats daarvan `ssh -J` (ProxyJump); kleine letter `ssh -a` schakelt agent forwarding expliciet uit.

Deze gids vult de handleiding voor SSH-hardening aan en geldt voor Debian 12/13, Ubuntu 24.04 en systemen uit de RHEL-familie zoals AlmaLinux 9 en Rocky 9.

Wat SSH StrictModes controleert

StrictModes is een instelling aan de serverkant in `/etc/ssh/sshd_config`. Het doel is eenvoudig: als een andere gebruiker naar je `authorized_keys` kan schrijven, kan die zijn eigen sleutel toevoegen en als jou inloggen. Daarom weigert sshd het bestand te vertrouwen tenzij het hele pad beschermd is. Hij controleert het bestand en de mappen erboven, inclusief de homedirectory.

Controleer de effectieve waarde met `sshd -T | grep -i strictmodes`. Controleer op Ubuntu 24.04 en Debian 13 ook de drop-in-bestanden in `/etc/ssh/sshd_config.d/`.

PadVereist door StrictModesAanbevolen modus
/home/aliceEigendom van alice of root, niet beschrijfbaar voor groep/iedereen755, 750 of 700
/home/alice/.sshEigendom van alice of root, niet beschrijfbaar voor groep/iedereen700
/home/alice/.ssh/authorized_keysEigendom van alice of root, niet beschrijfbaar voor groep/iedereen600
/root en /root/.ssh (root-login)Eigendom van root, niet beschrijfbaar voor groep/iedereen700

"Authentication refused: bad ownership or modes" oplossen

De client toont alleen een algemene `Permission denied (publickey)`. De echte reden staat in de serverlog, die het exacte pad noemt, bijvoorbeeld `Authentication refused: bad ownership or modes for directory /home/alice` of `... for file /home/alice/.ssh/authorized_keys`. Gebruik de console van je VPS of een andere sessie om het op te lossen.

  1. 01.Lees de log: `journalctl -u ssh -n 50` op Debian en Ubuntu, of `journalctl -u sshd -n 50` op AlmaLinux en Rocky.
  2. 02.Herstel het eigenaarschap van de SSH-map van de gebruiker: `chown -R alice:alice /home/alice/.ssh`.
  3. 03.Herstel de modi: `chmod 700 /home/alice/.ssh` en `chmod 600 /home/alice/.ssh/authorized_keys`.
  4. 04.Haal schrijfrechten voor groep en iedereen weg van de homedirectory: `chmod go-w /home/alice`.
  5. 05.Zet op systemen met SELinux (AlmaLinux, Rocky, Fedora) de labels terug: `restorecon -Rv /home/alice/.ssh`.
  6. 06.Test vanuit een nieuwe terminal met `ssh -v alice@server` en houd de werkende sessie open.
# all-in-one, run as root on the server
chown -R alice:alice /home/alice/.ssh
chmod go-w /home/alice
chmod 700 /home/alice/.ssh
chmod 600 /home/alice/.ssh/authorized_keys
namei -l /home/alice/.ssh/authorized_keys   # shows owner and mode of every path component

Note · Zet `StrictModes no` niet om de fout te laten verdwijnen. Daarmee haal je een echte bescherming weg en verberg je de verkeerde configuratie in plaats van die op te lossen.

StrictModes vs. StrictHostKeyChecking

Zoekopdrachten naar "ssh strictmode" halen vaak twee losstaande opties door elkaar. `StrictModes` staat in `sshd_config` op de server en controleert bestandsrechten. `StrictHostKeyChecking` staat in `ssh_config` of `~/.ssh/config` op de client en bepaalt wat er gebeurt als de hostsleutel van een server onbekend of gewijzigd is. De client heeft ook een eigen rechtencontrole: hij weigert een privésleutel te gebruiken die andere gebruikers kunnen lezen, met een waarschuwing over een onbeschermd privésleutelbestand; `chmod 600 ~/.ssh/id_ed25519` lost dat op.

Agent forwarding met ssh -A: het risico

`ssh -A` (of `ForwardAgent yes`) maakt op de externe host een socket aan, waarnaar `$SSH_AUTH_SOCK` verwijst, die ondertekeningsverzoeken terugstuurt naar de ssh-agent op je machine. Je privésleutel verlaat je machine nooit, maar iedereen die bij die socket kan, kan je sleutel gebruiken zolang je verbonden bent. Op de externe host zijn dat root en elk proces dat als jouw gebruiker draait.

Is de server gecompromitteerd, of wordt hij door iemand anders beheerd, dan kan een aanvaller ongemerkt inloggen op elke andere host die je sleutel opent, inclusief Git-hosting en productieservers. Daarom staat de OpenSSH-client standaard op `ForwardAgent no`.

  • ▹Forward je agent nooit naar gedeelde hosts, hosts van derden of vers geherinstalleerde hosts die je niet hebt gehard.
  • ▹Moet je toch forwarden, gebruik dan `ssh-add -c`, zodat elk gebruik van de sleutel lokale bevestiging vereist.
  • ▹OpenSSH 8.9 en nieuwer ondersteunen bestemmingsbeperkingen met `ssh-add -h`, die beperken voor welke hosts een geforwarde sleutel mag worden gebruikt.
  • ▹Aan de serverkant schakelt `AllowAgentForwarding no` in `sshd_config` het uit, al kunnen gebruikers met shelltoegang nog steeds hun eigen forwarders opzetten.

Gebruik liever ProxyJump (ssh -J) voor bastions

Agent forwarding wordt meestal gebruikt om via een bastion naar een interne machine te springen. `ssh -J` doet dat zonder je agent bloot te stellen: de bastion stuurt alleen een versleutelde TCP-stream door, en de authenticatie bij de interne host gebeurt end-to-end vanaf je laptop. Voor servers die alleen via een privénetwerk bereikbaar zijn, is een WireGuard-tunnel een andere optie; zie de handleiding voor een WireGuard-VPN of de handleiding voor een WireGuard-mesh, en voor keepalive- en PSK-instellingen deze handleiding voor WireGuard-tuning.

Op een NoctisNode-VPS krijg je volledige root via SSH op een KVM-machine, dus een klein Wisp-pakket kan dienen als aparte jumphost waar verder niets op draait; zie de VPS-pakketten.

# one-off
ssh -J [email protected] [email protected]

# ~/.ssh/config
Host bastion
    HostName bastion.example.com
    User alice
    ForwardAgent no

Host db1
    HostName 10.88.0.3
    User alice
    ProxyJump bastion

Wat ssh -a (kleine letter) doet

Kleine letter `ssh -a` schakelt agent forwarding voor die verbinding uit, het tegenovergestelde van `-A`. Dat is handig als je `~/.ssh/config` `ForwardAgent` inschakelt voor een wildcard-host en je zeker wilt weten dat één specifieke verbinding niet forwardt, bijvoorbeeld `ssh -a admin@untrusted-host`. Verwar het niet met `ssh-agent -a`, dat het pad van de socket van de agent instelt, of met `ssh-add`, dat sleutels in de agent laadt.

Veelgestelde vragen

QWat doet StrictModes in sshd_config?

AHet laat sshd controleren dat de homedirectory van de gebruiker, ~/.ssh en authorized_keys eigendom zijn van de gebruiker of root en niet beschrijfbaar zijn voor de groep of anderen. Faalt de controle, dan wordt authenticatie met de sleutel geweigerd.

QHoe los ik Authentication refused: bad ownership or modes op?

AVoer `chmod go-w ~`, `chmod 700 ~/.ssh` en `chmod 600 ~/.ssh/authorized_keys` uit en zorg dat de bestanden eigendom zijn van de gebruiker. De serverlog noemt het exacte pad dat niet klopt.

QIs agent forwarding met ssh -A veilig?

AAlleen op hosts die je volledig vertrouwt. Zolang je verbonden bent, kan root of een gecompromitteerd account op de externe host je geforwarde agent gebruiken om zich elders als jou te authenticeren; gebruik in plaats daarvan `ssh -J`.

QWat is het verschil tussen ssh -A en ssh -a?

AHoofdletter `-A` schakelt het forwarden van je ssh-agent naar de externe host in. Kleine letter `-a` schakelt agent forwarding voor die verbinding uit en overschrijft elke `ForwardAgent yes` in je config.

QMoet ik StrictModes no instellen?

ANee. Als je het uitschakelt, zijn logins mogelijk ook als andere gebruikers je authorized_keys kunnen wijzigen, en dat is een echt beveiligingslek; herstel in plaats daarvan het eigenaarschap en de rechten.

SSH StrictModes, agent forwarding (ssh -A) en ssh -a uitgelegd · NoctisNode