Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/etc/rc.d If key generation happens with not enough entropy i...



details:   https://anonhg.NetBSD.org/src/rev/f2598fdc36ec
branches:  trunk
changeset: 1023784:f2598fdc36ec
user:      martin <martin%NetBSD.org@localhost>
date:      Sun Sep 26 10:53:20 2021 +0000

description:
If key generation happens with not enough entropy in the system, add
a warning to motd pointing at entropy(7) and give instructions how to
re-generate the (weak) keys after fixing up entropy.

Add a "keyregen" command, which forces regeneration of all host keys
to simplify the replacement of weak keys.

diffstat:

 etc/rc.d/sshd |  34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diffs (73 lines):

diff -r 4ef95ac773d6 -r f2598fdc36ec etc/rc.d/sshd
--- a/etc/rc.d/sshd     Sun Sep 26 09:58:13 2021 +0000
+++ b/etc/rc.d/sshd     Sun Sep 26 10:53:20 2021 +0000
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: sshd,v 1.30 2019/10/23 14:45:38 christos Exp $
+# $NetBSD: sshd,v 1.31 2021/09/26 10:53:20 martin Exp $
 #
 
 # PROVIDE: sshd
@@ -13,7 +13,32 @@
 command="/usr/sbin/${name}"
 pidfile="/var/run/${name}.pid"
 required_files="/etc/ssh/sshd_config"
-extra_commands="keygen reload"
+extra_commands="keygen keyregen reload"
+
+sshd_motd_unsafe_keys_warning()
+{
+(
+       umask 022
+       T=/etc/_motd
+       sed -E '/^-- UNSAFE KEYS WARNING:/,$d' < /etc/motd > $T
+       if [ $( sysctl -n kern.entropy.needed ) -ne 0 ]; then
+               cat >> $T << _EOF
+-- UNSAFE KEYS WARNING:
+
+       The ssh host keys on this machine have been generated with
+       not enough entropy configured, so may be predictable.
+
+       To fix, follow the "Adding entropy" section in the entropy(7)
+       man page and after this machine has enough entropy, re-generate
+       the ssh host keys by running:
+
+               sh /etc/rc.d/sshd keyregen
+_EOF
+       fi
+       cmp -s $T /etc/motd || cp $T /etc/motd
+       rm -f $T
+)
+}
 
 sshd_keygen()
 {
@@ -22,9 +47,10 @@
        umask 022
        while read type bits filename;  do
                f="/etc/ssh/$filename"
-               if [ -f "$f" ]; then
+               if [ "$1" != "force" ] && [ -f "$f" ]; then
                        continue
                fi
+               rm -f "$f"
                case "${bits}" in
                -1)     bitarg=;;
                0)      bitarg="${ssh_keygen_flags}";;
@@ -39,6 +65,7 @@
 rsa    0       ssh_host_rsa_key
 _EOF
 )
+       sshd_motd_unsafe_keys_warning
 }
 
 sshd_precmd()
@@ -47,6 +74,7 @@
 }
 
 keygen_cmd=sshd_keygen
+keyregen_cmd="sshd_keygen force"
 start_precmd=sshd_precmd
 
 load_rc_config $name



Home | Main Index | Thread Index | Old Index