This leaves the sshd support on the s390 intact and functional (testing
needed), and at the same time add the ability to ssh in and get a terminal
on non-s390 platforms.
---
anaconda | 26 ++++++++++++++++++
flags.py | 12 +++++---
loader/linuxrc.s390 | 2 +-
scripts/mk-images | 72 ++++++++++++++++++++++++++++---------------------
scripts/upd-instroot | 24 +++++++++-------
5 files changed, 89 insertions(+), 47 deletions(-)
diff --git a/anaconda b/anaconda
index d1d2ba2..b774736 100755
--- a/anaconda
+++ b/anaconda
@@ -396,6 +396,30 @@ def setupGraphicalLinks():
except:
pass
+def createSshKey(algorithm, keyfile):
+ path = '/etc/ssh/%s' % (keyfile,)
+ argv = ['-q','-t',algorithm,'-f',path,'-C','','-N','']
+ iutil.execWithRedirect('ssh-keygen', argv, searchPath=1)
+
+def startSsh():
+ if not flags.sshd:
+ return
+ if iutil.isS390():
+ return
+
+ childpid = os.fork()
+ if not childpid:
+ ssh_keys = {
+ 'rsa1':'ssh_host_key',
+ 'rsa':'ssh_host_rsa_key',
+ 'dsa':'ssh_host_dsa_key',
+ }
+ for (algorithm, keyfile) in ssh_keys.items():
+ createSshKey(algorithm, keyfile)
+ args = ["/sbin/sshd", "-f", "/etc/ssh/sshd_config.anaconda"]
+ os.execv("/sbin/sshd", args)
+ sys.exit(1)
+
class Anaconda:
def __init__(self):
self.intf = None
@@ -573,6 +597,8 @@ if __name__ == "__main__":
warnings.showwarning = AnacondaShowWarning
+ startSsh()
+
setupTranslations()
# reset python's default SIGINT handler
diff --git a/flags.py b/flags.py
index ce77621..93472e3 100644
--- a/flags.py
+++ b/flags.py
@@ -86,17 +86,19 @@ class Flags:
self.__dict__['flags']['cmdline'] = self.createCmdlineDict()
self.__dict__['flags']['useIPv4'] = True
self.__dict__['flags']['useIPv6'] = True
+ self.__dict__['flags']['sshd'] = 1
# for non-physical consoles like some ppc and sgi altix,
# we need to preserve the console device and not try to
# do things like bogl on them. this preserves what that
# device is
self.__dict__['flags']['virtpconsole'] = None
- if self.__dict__['flags']['cmdline'].has_key("selinux"):
- if self.__dict__['flags']['cmdline']["selinux"]:
- self.__dict__['flags']['selinux'] = 1
- else:
- self.__dict__['flags']['selinux'] = 0
+ for x in ['selinux','sshd']:
+ if self.__dict__['flags']['cmdline'].has_key(x):
+ if self.__dict__['flags']['cmdline'][x]:
+ self.__dict__['flags'][x] = 1
+ else:
+ self.__dict__['flags'][x] = 0
if self.__dict__['flags']['cmdline'].has_key("debug"):
self.__dict__['flags']['debug'] = self.__dict__['flags']['cmdline']['debug']
diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390
index 854fdfb..3939371 100644
--- a/loader/linuxrc.s390
+++ b/loader/linuxrc.s390
@@ -126,7 +126,7 @@ function startinetd()
echo >> /etc/motd
fi # testing
- /sbin/sshd
+ /sbin/sshd -f /etc/sshd_config.anaconda
if [ -z "$RUNKS" ]; then
echo
echo $"Connect now to $IPADDR and log in as user install to start the installation."
diff --git a/scripts/mk-images b/scripts/mk-images
index 44e4664..214da16 100755
--- a/scripts/mk-images
+++ b/scripts/mk-images
@@ -406,7 +406,9 @@ instbin() {
}
setupShellEnvironment() {
- echo "tcp 6 TCP" > $MBD_DIR/etc/protocols
+ cp -f $IMGPATH/etc/protocols $MBD_DIR/etc/protocols
+ echo "sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin" \
+ >> $MBD_DIR/etc/passwd
# enable root shell logins
echo "root::14438:0:99999:7:::" >> $MBD_DIR/etc/shadow
@@ -439,26 +441,29 @@ EOF
cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
- # key generation takes ages on s390, you really don't want this for every
- # installation attempt. These are NOT the keys of the installed system!
mkdir -m 0700 -p $MBD_DIR/etc/ssh
- echo -n "Generating SSH1 RSA host key: "
- /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
- -C '' -N '' >&/dev/null
- echo
- echo -n "Generating SSH2 RSA host key: "
- /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
- -C '' -N '' >&/dev/null
- echo
- echo -n "Generating SSH2 DSA host key: "
- /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
- -C '' -N '' >&/dev/null
- echo
- (cd $MBD_DIR/etc/ssh; \
- chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
- chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
-
- cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
+ if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
+ # key generation takes ages on s390, you really don't want this
+ # for every installation attempt. These are NOT the keys of the
+ # installed system!
+ echo -n "Generating SSH1 RSA host key: "
+ /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
+ -C '' -N '' >&/dev/null
+ echo
+ echo -n "Generating SSH2 RSA host key: "
+ /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
+ -C '' -N '' >&/dev/null
+ echo
+ echo -n "Generating SSH2 DSA host key: "
+ /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
+ -C '' -N '' >&/dev/null
+ echo
+ (cd $MBD_DIR/etc/ssh; \
+ chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
+ chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
+ fi
+
+ cat > $MBD_DIR/etc/ssh/sshd_config.anaconda <<EOF
Port 22
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
@@ -477,11 +482,13 @@ PasswordAuthentication yes
PermitEmptyPasswords yes
PermitUserEnvironment yes
EOF
- chmod 600 $MBD_DIR/etc/ssh/sshd_config
+ chmod 600 $MBD_DIR/etc/ssh/sshd_config.anaconda
# copy in the binaries
- instbin $IMGPATH /usr/bin/login $MBD_DIR /sbin/login
+ instbin $IMGPATH /sbin/nologin $MBD_DIR /sbin/nologin
+ instbin $IMGPATH /bin/login $MBD_DIR /sbin/login
instbin $IMGPATH /usr/sbin/sshd $MBD_DIR /sbin/sshd
+ instbin $IMGPATH /usr/bin/ssh-keygen $MBD_DIR /sbin/ssh-keygen
}
@@ -573,13 +580,19 @@ makeinitrd() {
mkdir -p $MBD_DIR/etc/rc.d/init.d
mkdir -p $MBD_DIR/usr/sbin
mkdir -p $MBD_DIR/var/run/wpa_supplicant
+ mkdir -m 111 -p $MBD_DIR/var/empty/sshd
+ mkdir -p $MBD_DIR/etc/{pam.d,security}
+ mkdir -p $MBD_DIR/$LIBDIR/security
+
+ for x in $IMGPATH/$LIBDIR/security/* ; do
+ y=$(basename $x)
+ instbin $IMGPATH $LIBDIR/security/$y $MBD_DIR $LIBDIR/security/$y
+ done
+
+ cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
+ cp $IMGPATH/$LIBDIR/libwrap*.so* $MBD_DIR/$LIBDIR/
if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
- mkdir -m 111 -p $MBD_DIR/var/empty/sshd
- mkdir -p $MBD_DIR/etc/{pam.d,security}
- mkdir -p $MBD_DIR/$LIBDIR/security
- cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
- cp $IMGPATH/$LIBDIR/libwrap*.so* $MBD_DIR/$LIBDIR/
ln -s /tmp $MBD_DIR/var/state/xkb
instbin $IMGPATH /usr/bin/xauth $MBD_DIR /sbin/xauth
local cmsfsbin cmd
@@ -821,10 +834,7 @@ makeinitrd() {
mkdir -p $MBD_DIR/var/lib
ln -s ../../tmp $MBD_DIR/var/lib/xkb
- # s390/s390x need sshd setup
- if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
- setupShellEnvironment
- fi
+ setupShellEnvironment
cat > $MBD_DIR/.profile <<EOF
PS1="[anaconda \u@\h \W]\\\\$ "
diff --git a/scripts/upd-instroot b/scripts/upd-instroot
index 64017d1..a9b4058 100755
--- a/scripts/upd-instroot
+++ b/scripts/upd-instroot
@@ -181,7 +181,9 @@ PACKAGES="GConf2 NetworkManager ORBit2 acl anaconda
lohit-oriya-fonts lohit-punjabi-fonts lohit-sindhi-fonts lohit-tamil-fonts
lohit-telugu-fonts lvm2 madan-fonts mdadm
mesa-dri-drivers mkinitrd module-init-tools nash ncurses neon net-tools
- newt newt-python nfs-utils nspr nss nss-softokn ntfs-3g openldap pam pango parted pciutils pcre
+ newt newt-python nfs-utils nspr nss nss-softokn ntfs-3g
+ openldap openssh openssh-server
+ pam pango parted pciutils pcre
pygtk2-libglade pykickstart pyparted python python-bugzilla python-decorator
python-libs python-nss python-pyblock python-sqlite
python-urlgrabber python-volume_key pyxf86config readline redhat-artwork
@@ -222,7 +224,7 @@ fi
if [ $ARCH = s390 -o $ARCH = s390x ]; then
PACKAGES="$PACKAGES bind-utils binutils coreutils findutils gzip
initscripts iputils less libgcc login lsscsi modutils mount
- net-tools openssh openssh-clients openssh-server pam portmap
+ net-tools openssh-clients pam portmap
s390utils sed strace tar tcp_wrappers xorg-x11-libs
xorg-x11-xauth"
fi
@@ -283,6 +285,8 @@ $LIBDIR/bdevid
$LIBDIR/dbus-1
$LIBDIR/libnss_dns*
$LIBDIR/libnss_files*
+$LIBDIR/libwrap*.so*
+$LIBDIR/security/pam_*
bin/arch
bin/basename
bin/bash
@@ -310,6 +314,7 @@ bin/hostname
bin/ipcalc
bin/kill
bin/ln
+bin/login
bin/ls
bin/mkdir
bin/mknod
@@ -353,6 +358,8 @@ etc/iscsid.conf
etc/man.config
etc/mke2fs.conf
etc/nsswitch.conf
+etc/pam.d/other
+etc/pam.d/sshd
etc/pango
etc/passwd
etc/pcmcia
@@ -363,6 +370,8 @@ etc/prelink.conf
etc/protocols
etc/rc.d/init.d/functions
etc/rpm/macros.prelink
+etc/security/limits.conf
+etc/security/pam_env.conf
etc/selinux/targeted
etc/services
etc/shells
@@ -430,6 +439,7 @@ sbin/mkreiserfs
sbin/mkswap
sbin/mount.nfs*
sbin/mount.ntfs*
+sbin/nologin
sbin/ofpath
sbin/parted
sbin/pcmcia-socket-startup
@@ -511,6 +521,7 @@ usr/bin/reduce-font
usr/bin/setxkbmap
usr/bin/sha1sum
usr/bin/split
+usr/bin/ssh-keygen
usr/bin/syslinux
usr/bin/tac
usr/bin/tail
@@ -567,6 +578,7 @@ usr/sbin/prelink
usr/sbin/semodule
usr/sbin/showpart
usr/sbin/smartctl
+usr/sbin/sshd
usr/sbin/wpa_passphrase
usr/sbin/wpa_supplicant
usr/sbin/wrapper
@@ -660,7 +672,6 @@ bin/dmesg
bin/echo
bin/find
bin/gzip
-bin/login
bin/ls
bin/mknod
bin/ping
@@ -670,12 +681,6 @@ bin/sort
bin/tar
bin/uname
bin/vi
-etc/pam.d/other
-etc/pam.d/sshd
-etc/security/limits.conf
-etc/security/pam_env.conf
-$LIBDIR/libwrap*.so*
-$LIBDIR/security/pam_*
lib/modules/ibm
lib/security
sbin/arp
@@ -711,7 +716,6 @@ usr/bin/tr
usr/bin/wc
usr/bin/xauth
usr/sbin/glibc_post_upgrade
-usr/sbin/sshd
usr/share/terminfo/a/ansi
usr/share/terminfo/d/dumb
usr/share/terminfo/k/kterm
--
1.6.5.rc2