среда, 11 января 2017 г.

Сборка OpenSSH версии 7.3+ на Solaris 10

Коллеги-соляристы уже, думаю, обратили внимание, что, начиная с версии 7.3, OpenSSH невозможно собрать на Solaris 10 в 64 бита. И сидят на старье - что небезопасно, либо гоняют 32-битный код на 64-битном ядре, пользуясь дуальностью ABI.

На самом деле - невозможно собрать без плясок с бубном. Мне удалось получить решение от разработчиков (причем они сами его не считают нужным вкатить в исходники по религиозным соображениям), и я считаю нужным поделиться этим решением (оно вам пригодится).

Сперва вам нужны GNU patch, autoconf и automake. Их можно установить с OpenCSW, если вы этого до сих пор не сделали.

Затем нужны патчи.

Для версии 7.3 (7.3_solaris10_build_issue.patch):
 --- configure.ac     Thu Jul 28 04:54:27 2016  
 +++ configure.ac     Wed Aug 3 00:05:35 2016  
 @@ -751,6 +751,9 @@  
       use_pie=auto  
       check_for_libcrypt_later=1  
       check_for_openpty_ctty_bug=1  
 +     dnl Target SUSv3/POSIX.1-2001 plus BSD specifics.  
 +     dnl _DEFAULT_SOURCE is the new name for _BSD_SOURCE  
 +     CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE"  
       AC_DEFINE([PAM_TTY_KLUDGE], [1],  
            [Work around problematic Linux PAM modules handling of PAM_TTY])  
       AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"],  
 @@ -1790,11 +1793,8 @@  
       warn \  
  ])  
    
 -dnl Wide character support. Linux man page says it needs _XOPEN_SOURCE.  
 -saved_CFLAGS="$CFLAGS"  
 -CFLAGS="$CFLAGS -D_XOPEN_SOURCE"  
 +dnl Wide character support.  
  AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth])  
 -CFLAGS="$saved_CFLAGS"  
    
  AC_LINK_IFELSE(  
      [AC_LANG_PROGRAM(  
   

Для версии 7.4 (7.4_solaris10_build_issue.patch):
 --- configure.ac     Mon Dec 19 21:18:36 2016  
 +++ configure.ac     Mon Dec 19 21:18:40 2016  
 @@ -740,6 +740,9 @@  
       use_pie=auto  
       check_for_libcrypt_later=1  
       check_for_openpty_ctty_bug=1  
 +     dnl Target SUSv3/POSIX.1-2001 plus BSD specifics.  
 +     dnl _DEFAULT_SOURCE is the new name for _BSD_SOURCE  
 +     CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE"  
       AC_DEFINE([PAM_TTY_KLUDGE], [1],  
            [Work around problematic Linux PAM modules handling of PAM_TTY])  
       AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"],  
 @@ -1771,11 +1774,8 @@  
       warn \  
  ])  
    
 -dnl Wide character support. Linux man page says it needs _XOPEN_SOURCE.  
 -saved_CFLAGS="$CFLAGS"  
 -CFLAGS="$CFLAGS -D_XOPEN_SOURCE"  
 +dnl Wide character support.  
  AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth])  
 -CFLAGS="$saved_CFLAGS"  
    
  TEST_SSH_UTF8=${TEST_SSH_UTF8:=yes}  
  AC_MSG_CHECKING([for utf8 locale support])  
   

Патч нужно положить в корень дерева исходников OpenSSH и применить:

 root$server /tmp/openssh-7.4.p1 # patch -p0<7.4_solaris10_build_issue.patch   

Затем, в этой же директории, выполнить autoreconf. Если команда выполнится без ошибок - готово, можно приступать к конфигурированию и компиляции.

Безопасности вашему серверу!

PS. Чтобы autoreconf прошел без ошибок, нужно установить пакеты CSWautoconf, CSWautomake, CSWgpatch - если вы используете OpenCSW.

UPDATE

Начиная с версии OpenSSH 7.5 баг исправлен:


Изменение было включено в апстрим после подтверждения.