[OE-core] [PATCH] openssh: Restore TCP wrappers support

wenzong fan wenzong.fan at windriver.com
Fri Oct 23 10:27:08 UTC 2015


On 10/23/2015 04:49 PM, Jussi Kukkonen wrote:
> On 23 October 2015 at 10:34, <wenzong.fan at windriver.com
> <mailto:wenzong.fan at windriver.com>> wrote:
>
>     From: Wenzong Fan <wenzong.fan at windriver.com
>     <mailto:wenzong.fan at windriver.com>>
>
>     The /etc/hosts.deny doesn't work for sshd without tcp-wrappers support,
>     apply below patch from Debian to fix it:
>
>
> I get that hosts.deny not doing anything after updating is a nasty
> surprise (mentioning this in the release notes certainly makes sense)
> but ... is bringing tcp-wrappers-support back (especially as default)
> the correct solution here?

Would it be acceptable that bringing tcp-wrappers-support back but 
disable by default?

>
> The dependencies for this feature have been described as 'poor quality
> abandonware' years ago already, and there are certainly other ways to
> limit access.... Is there a use case where ssh+tcpwrappers is so crucial
> that it warrants going against upstream opinion on security?

 From users' view, it most like a change to distribution, I think this 
why Debian & Fedora get it back again.

I got below comments from Debian's contributor:

https://lwn.net/Articles/615305/

Looks it's an acceptable risk. Of course, I don't object the solution of 
update release notes.

Thanks
Wenzong

>
>   - Jussi
>
>        From 1850a2c93f3dcfa3d682eaa85d1593c01d170429 Mon Sep 17 00:00:00
>     2001
>        From: Colin Watson <cjwatson at debian.org <mailto:cjwatson at debian.org>>
>        Date: Tue, 7 Oct 2014 13:22:41 +0100
>        Subject: Restore TCP wrappers support
>
>        Support for TCP wrappers was dropped in OpenSSH 6.7.  See this
>     message
>        and thread:
>
>     https://lists.mindrot.org/pipermail/openssh-unix-dev/2014-April/032497.html
>
>        It is true that this reduces preauth attack surface in sshd.  On the
>        other hand, this support seems to be quite widely used, and abruptly
>        dropping it (from the perspective of users who don't read
>        openssh-unix-dev) could easily cause more serious problems in
>     practice.
>     Link to patch file:
>     http://anonscm.debian.org/cgit/pkg-ssh/openssh.git/tree/debian/ \
>          patches/restore-tcp-wrappers.patch
>
>     Signed-off-by: Wenzong Fan <wenzong.fan at windriver.com
>     <mailto:wenzong.fan at windriver.com>>
>     ---
>       .../openssh/openssh/restore-tcp-wrappers.patch     | 174
>     +++++++++++++++++++++
>       meta/recipes-connectivity/openssh/openssh_7.1p1.bb
>     <http://openssh_7.1p1.bb> |   4 +
>       2 files changed, 178 insertions(+)
>       create mode 100644
>     meta/recipes-connectivity/openssh/openssh/restore-tcp-wrappers.patch
>
>     diff --git
>     a/meta/recipes-connectivity/openssh/openssh/restore-tcp-wrappers.patch
>     b/meta/recipes-connectivity/openssh/openssh/restore-tcp-wrappers.patch
>     new file mode 100644
>     index 0000000..1d819fa
>     --- /dev/null
>     +++
>     b/meta/recipes-connectivity/openssh/openssh/restore-tcp-wrappers.patch
>     @@ -0,0 +1,174 @@
>     +From 1850a2c93f3dcfa3d682eaa85d1593c01d170429 Mon Sep 17 00:00:00 2001
>     +From: Colin Watson <cjwatson at debian.org <mailto:cjwatson at debian.org>>
>     +Date: Tue, 7 Oct 2014 13:22:41 +0100
>     +Subject: Restore TCP wrappers support
>     +
>     +Support for TCP wrappers was dropped in OpenSSH 6.7.  See this message
>     +and thread:
>     +
>     +
>     https://lists.mindrot.org/pipermail/openssh-unix-dev/2014-April/032497.html
>     +
>     +It is true that this reduces preauth attack surface in sshd.  On the
>     +other hand, this support seems to be quite widely used, and abruptly
>     +dropping it (from the perspective of users who don't read
>     +openssh-unix-dev) could easily cause more serious problems in practice.
>     +
>     +It's not entirely clear what the right long-term answer for Debian is,
>     +but it at least probably doesn't involve dropping this feature shortly
>     +before a freeze.
>     +
>     +Forwarded: not-needed
>     +Last-Update: 2014-10-07
>     +
>     +Upstream-Status: Inappropriate
>     +
>     +Patch-Name: restore-tcp-wrappers.patch
>     +---
>     + configure.ac <http://configure.ac> | 57
>     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>     + sshd.8       |  7 +++++++
>     + sshd.c       | 25 +++++++++++++++++++++++++
>     + 3 files changed, 89 insertions(+)
>     +
>     +diff --git a/configure.ac <http://configure.ac> b/configure.ac
>     <http://configure.ac>
>     +index df21693..4d55c46 100644
>     +--- a/configure.ac <http://configure.ac>
>     ++++ b/configure.ac <http://configure.ac>
>     +@@ -1448,6 +1448,62 @@ AC_ARG_WITH([skey],
>     +       ]
>     + )
>     +
>     ++# Check whether user wants TCP wrappers support
>     ++TCPW_MSG="no"
>     ++AC_ARG_WITH([tcp-wrappers],
>     ++      [  --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support
>     (optionally in PATH)],
>     ++      [
>     ++              if test "x$withval" != "xno" ; then
>     ++                      saved_LIBS="$LIBS"
>     ++                      saved_LDFLAGS="$LDFLAGS"
>     ++                      saved_CPPFLAGS="$CPPFLAGS"
>     ++                      if test -n "${withval}" && \
>     ++                          test "x${withval}" != "xyes"; then
>     ++                              if test -d "${withval}/lib"; then
>     ++                                      if test -n "${need_dash_r}";
>     then
>     ++
>     LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
>     ++                                      else
>     ++
>     LDFLAGS="-L${withval}/lib ${LDFLAGS}"
>     ++                                      fi
>     ++                              else
>     ++                                      if test -n "${need_dash_r}";
>     then
>     ++
>     LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
>     ++                                      else
>     ++
>     LDFLAGS="-L${withval} ${LDFLAGS}"
>     ++                                      fi
>     ++                              fi
>     ++                              if test -d "${withval}/include"; then
>     ++
>     CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
>     ++                              else
>     ++                                      CPPFLAGS="-I${withval}
>     ${CPPFLAGS}"
>     ++                              fi
>     ++                      fi
>     ++                      LIBS="-lwrap $LIBS"
>     ++                      AC_MSG_CHECKING([for libwrap])
>     ++                      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
>     ++#include <sys/types.h>
>     ++#include <sys/socket.h>
>     ++#include <netinet/in.h>
>     ++#include <tcpd.h>
>     ++int deny_severity = 0, allow_severity = 0;
>     ++                              ]], [[
>     ++      hosts_access(0);
>     ++                              ]])], [
>     ++                                      AC_MSG_RESULT([yes])
>     ++                                      AC_DEFINE([LIBWRAP], [1],
>     ++                                              [Define if you want
>     ++                                              TCP Wrappers support])
>     ++                                      SSHDLIBS="$SSHDLIBS -lwrap"
>     ++                                      TCPW_MSG="yes"
>     ++                              ], [
>     ++                                      AC_MSG_ERROR([*** libwrap
>     missing])
>     ++
>     ++                      ])
>     ++                      LIBS="$saved_LIBS"
>     ++              fi
>     ++      ]
>     ++)
>     ++
>     + # Check whether user wants to use ldns
>     + LDNS_MSG="no"
>     + AC_ARG_WITH(ldns,
>     +@@ -4928,6 +4984,7 @@ echo "                 KerberosV support:
>     $KRB5_MSG"
>     + echo "                   SELinux support: $SELINUX_MSG"
>     + echo "                 Smartcard support: $SCARD_MSG"
>     + echo "                     S/KEY support: $SKEY_MSG"
>     ++echo "              TCP Wrappers support: $TCPW_MSG"
>     + echo "              MD5 password support: $MD5_MSG"
>     + echo "                   libedit support: $LIBEDIT_MSG"
>     + echo "  Solaris process contract support: $SPC_MSG"
>     +diff --git a/sshd.8 b/sshd.8
>     +index dcf20f0..5afd10f 100644
>     +--- a/sshd.8
>     ++++ b/sshd.8
>     +@@ -853,6 +853,12 @@ the user's home directory becomes accessible.
>     + This file should be writable only by the user, and need not be
>     + readable by anyone else.
>     + .Pp
>     ++.It Pa /etc/hosts.allow
>     ++.It Pa /etc/hosts.deny
>     ++Access controls that should be enforced by tcp-wrappers are
>     defined here.
>     ++Further details are described in
>     ++.Xr hosts_access 5 .
>     ++.Pp
>     + .It Pa /etc/hosts.equiv
>     + This file is for host-based authentication (see
>     + .Xr ssh 1 ) .
>     +@@ -956,6 +962,7 @@ The content of this file is not sensitive; it
>     can be world-readable.
>     + .Xr ssh-keygen 1 ,
>     + .Xr ssh-keyscan 1 ,
>     + .Xr chroot 2 ,
>     ++.Xr hosts_access 5 ,
>     + .Xr login.conf 5 ,
>     + .Xr moduli 5 ,
>     + .Xr sshd_config 5 ,
>     +diff --git a/sshd.c b/sshd.c
>     +index 6b85e6c..186ad55 100644
>     +--- a/sshd.c
>     ++++ b/sshd.c
>     +@@ -129,6 +129,13 @@
>     + #include <Security/AuthSession.h>
>     + #endif
>     +
>     ++#ifdef LIBWRAP
>     ++#include <tcpd.h>
>     ++#include <syslog.h>
>     ++int allow_severity;
>     ++int deny_severity;
>     ++#endif /* LIBWRAP */
>     ++
>     + #ifndef O_NOCTTY
>     + #define O_NOCTTY      0
>     + #endif
>     +@@ -2141,6 +2148,24 @@ main(int ac, char **av)
>     + #ifdef SSH_AUDIT_EVENTS
>     +       audit_connection_from(remote_ip, remote_port);
>     + #endif
>     ++#ifdef LIBWRAP
>     ++      allow_severity = options.log_facility|LOG_INFO;
>     ++      deny_severity = options.log_facility|LOG_WARNING;
>     ++      /* Check whether logins are denied from this host. */
>     ++      if (packet_connection_is_on_socket()) {
>     ++              struct request_info req;
>     ++
>     ++              request_init(&req, RQ_DAEMON, __progname, RQ_FILE,
>     sock_in, 0);
>     ++              fromhost(&req);
>     ++
>     ++              if (!hosts_access(&req)) {
>     ++                      debug("Connection refused by tcp wrapper");
>     ++                      refuse(&req);
>     ++                      /* NOTREACHED */
>     ++                      fatal("libwrap refuse returns");
>     ++              }
>     ++      }
>     ++#endif /* LIBWRAP */
>     +
>     +       /* Log the connection. */
>     +       laddr = get_local_ipaddr(sock_in);
>     diff --git a/meta/recipes-connectivity/openssh/openssh_7.1p1.bb
>     <http://openssh_7.1p1.bb>
>     b/meta/recipes-connectivity/openssh/openssh_7.1p1.bb
>     <http://openssh_7.1p1.bb>
>     index 40938cc..b621f62 100644
>     --- a/meta/recipes-connectivity/openssh/openssh_7.1p1.bb
>     <http://openssh_7.1p1.bb>
>     +++ b/meta/recipes-connectivity/openssh/openssh_7.1p1.bb
>     <http://openssh_7.1p1.bb>
>     @@ -20,6 +20,7 @@ SRC_URI =
>     "ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar.
>                  file://sshdgenkeys.service \
>                  file://volatiles.99_sshd \
>                  file://add-test-support-for-busybox.patch \
>     +           file://restore-tcp-wrappers.patch \
>                  file://run-ptest"
>
>       PAM_SRC_URI = "file://sshd"
>     @@ -53,6 +54,9 @@ EXTRA_OECONF = "'LOGIN_PROGRAM=${base_bindir}/login' \
>                       --disable-strip \
>                       "
>
>     +PACKAGECONFIG ??= "tcp-wrappers"
>     +PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,,tcp-wrappers"
>     +
>       # Since we do not depend on libbsd, we do not want configure to use it
>       # just because it finds libutil.h.  But, specifying --disable-libutil
>       # causes compile errors, so...
>     --
>     1.9.1
>
>     --
>     _______________________________________________
>     Openembedded-core mailing list
>     Openembedded-core at lists.openembedded.org
>     <mailto:Openembedded-core at lists.openembedded.org>
>     http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
>



More information about the Openembedded-core mailing list