¿Construyendo OpenSSH para OS X?

0

Tengo en OS X 10.5 PowerMac (PowerPC) que utilizo para las pruebas. Apple ha abandonado el apoyo para ello. Otros quieren acceso a la caja para la prueba, por lo que necesito crear e instalar un OpenSSH actualizado.

Visité openssh.com y busqué la última versión (7.1) a través de FTP. El enlace en la barra lateral izquierda. No hay enlace de descarga en la página de inicio; tienes que revolver un poco para ello.

Desafortunadamente, parece que OpenSSH carece de documentación sobre el proceso. El no es configure (entonces no configure --help ), no hay INSTALAR , y no hay ningún tema en él en el Preguntas frecuentes sobre OpenSSH .

Hay un Leer eso me apunta a http://www.openssh.com/portable.html . Desafortunadamente, eso no proporciona instrucciones de compilación. Curiosamente, se refiere tanto a un configure y autoreconf ese no son Presente en el tarball.

Necesito usar una versión actualizada de OpenSSL. OpenSSL 1.0.2d ha sido construido e instalado en /usr/local. También necesito asegurar que OpenSSH se enlaza estáticamente con el OpenSSL alternativo para que no use la versión de OpenSSL 0.9.8 proporcionada por Apple.

¿Cómo compilo OpenSSH usando el OpenSSL actualizado en OS X? ¿Dónde encuentro las instrucciones?

jww
fuente

Respuestas:

2

¿Cómo compilo OpenSSH usando el OpenSSL actualizado en OS X? ¿Dónde encuentro las instrucciones?

Grawity estaba en lo correcto, descargué el OpenSSH incorrecto. Necesitaba una portátil, y no la provista en el enlace FTP. Los portátiles están listados en la parte inferior de OpenSSH portátil .

Una vez que tenga el portátil, descomprima y luego realice lo siguiente. Lo siguiente asume que tienes un OpenSSL actualizado libcrypto instalado en /usr/local/ssl/darwin y un Zlib actualizado libz a /usr/local. Ajústalos a tu gusto.

Reemplace -lz con ruta absoluta para archivar

Esto es necesario para asegurar el enlace estático porque no hay una opción aparente para ello en configure. Cuando se construye el binario, otool -L mostrará que no hay dependencias Zlib externas.

$ grep "\-lz" *
configure:{ echo "$as_me:$LINENO: checking for deflate in -lz" >&5
configure:echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6; }
configure:LIBS="-lz  $LIBS"
configure:  LIBS="-lz $LIBS"
configure:      LIBS="$LIBS -lz"
configure.ac:       LIBS="$LIBS -lz"

Entonces:

$ sed -i "" 's|-lz|/usr/local/lib/libz.a|g' config.h.in configure configure.ac
$

Reemplace -lcrypto con una ruta absoluta para archivar

Esto es necesario para asegurar el enlace estático porque no hay una opción aparente para ello en configure. Cuando se construye el binario, otool -L mostrará que no hay dependencias externas de OpenSSL.

$ grep "\-lcrypto" *
configure:  LIBS="-lcrypto $LIBS"
configure.ac:   LIBS="-lcrypto $LIBS"

Entonces:

$ sed -i "" 's|-lcrypto|/usr/local/ssl/darwin/lib/libcrypto.a|g' configure configure.ac
$

En lo anterior, utilizo /usr/local/ssl/darwin como --openssldir Al construir la biblioteca OpenSSL. Es generalmente justo /usr/local/ssl. Ajústelo según sea necesario.

Configurar OpenSSH

Configure OpenSSH con las rutas necesarias. Es posible que deba incluir una biblioteca OS X, también.

Si find /usr/lib/ -name libsandbox* devoluciones libsandbox.dylib, entonces necesitas incluir --with-libs="-lsandbox. Falta en OS X 10.5, pero está presente en OS X 10.8. Si la biblioteca está presente pero --with-libs se omite, entonces se producirá un error similar a riemann.local sshd[15748]: fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth].

$ ./configure --without-ssh1 --with-ssl-dir=/usr/local/ssl/darwin --with-zlib=/usr/local \
  --with-libs="-lsandbox" --prefix=/usr/local
checking for gcc... gcc
checking for C compiler default output file name... a.out
...

OpenSSH has been configured with the following options:
                     User binaries: /usr/local/bin
                   System binaries: /usr/local/sbin
               Configuration files: /usr/local/etc
...

Host: x86_64-apple-darwin12.6.0
Compiler: gcc
Compiler flags: -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith 
    -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess
    -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2
    -ftrapv -fno-builtin-memset -fstack-protector-all -fPIE 
Preprocessor flags: -I/usr/local/ssl/darwin/include -I/usr/local/include 
Linker flags: -L/usr/local/ssl/darwin/lib -L/usr/local/lib  -fstack-protector-all -pie
Libraries: /usr/local/ssl/darwin/lib/libcrypto.a /usr/local/lib/libz.a -lsandbox -lresolv

Puede que necesites --with-pam para obtener la autenticación de contraseña de trabajo. No me preocupaba la función, por lo que no agregué la opción de configuración.

Construir e instalar OpenSSH

los -fwrapv es algo preocupante cuando se ve en software de alta integridad. Eso generalmente significa que hay una Programa C ilegal con comportamiento indefinido. en marcha. Los desarrolladores no lo han arreglado, por lo que usan -fwrapv como curita .

$ make
conffile=`echo sshd_config.out | sed 's/.out$//'`; \
...

gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
  -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
  -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
  -fstack-protector-all -fPIE  -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
-I/usr/local/include  -DHAVE_CONFIG_H -c arc4random.c
gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
  -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
  -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
  -fstack-protector-all -fPIE  -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
  -I/usr/local/include  -DHAVE_CONFIG_H -c bsd-asprintf.c
...

Las dependencias externas (o la falta de ellas) se pueden verificar con:

$ otool -L ./sshd 
./sshd:
    /usr/lib/libsandbox.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

Desafortunadamente no hay make check o make test objetivos, por lo que no hay forma aparente de probar el software antes de instalarlo.

$ sudo make install
...

Generating public/private ed25519 key pair.
Your identification has been saved in /usr/local/etc/ssh_host_ed25519_key.
Your public key has been saved in /usr/local/etc/ssh_host_ed25519_key.pub.
The key fingerprint is:
SHA256:u/xQ6haFqxjG0fBgSMt0W58N8zmhu+NmyQxNMkMcwPc [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| .ooooo.o .      |
| o.o=o+. B o     |
|  o..B .+.=      |
|    . * E...     |
|   . . *So.      |
|    + . +=       |
|   . o =*o       |
|    . .+B+       |
|       +=..      |
+----[SHA256]-----+
...

Crear una lista para el nuevo binario SSH

Lo siguiente utiliza el existente ssh.plist, elimina la secuencia de comandos de contenedor de Apple y cambia el número de puerto. Copiarlo a /System/Library/LaunchDaemons/ssh-7.1.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.openssh.sshd.7-1</string>
    <key>Program</key>
    <string>/usr/local/sbin/sshd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/sshd</string>
        <string>-i</string>
        <string>-e</string>
        <string>-f</string>
        <string>/usr/local/etc/sshd_config</string>
        <string>-o</string>
        <string>PidFile=/var/run/sshd-7.1.pid</string>
    </array>
    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>1522</string>
            </dict>
    </dict>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <false/>
    </dict>
    <key>StandardErrorPath</key>
    <string>/var/log/sshd-7.1.log</string>
    <key>SHAuthorizationRight</key>
    <string>system.preferences</string>
</dict>
</plist>

Hay algunas cosas que suceden en la lista:

  • la etiqueta de servicio se cambió a com.openssh.sshd.7-1 para evitar chocar con los de Apple com.openssh.sshd
  • el archivo PID fue cambiado a var/run/sshd-7.1.pid para evitar chocar con los de Apple var/run/sshd.pid
  • El camino absoluto del programa fue incluido en ProgramArguments debido a un sshd re-exec requires execution with an absolute path mientras se atienden conexiones de clientes
  • sshd_config Se llama específicamente para evitar preguntas abiertas y confusión. Pero se usa por defecto
  • el uso del - i opción a pesar de que es una inetd(8) opción. De acuerdo a Opción sshd y -i en OS X , debe ser utilizado

Inicia el nuevo servicio SSH.

Usa launchd para iniciar el servicio. Note el uso de -w para evitar el "nada encontrado para cargar" mensaje de error porque el servicio está deshabilitado.

$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh-7.1.plist

Finalmente, verifique que el nuevo servidor SSH esté funcionando:

$ netstat -an | grep 1522
tcp6       0      0  *.1522                 *.*                    LISTEN     
tcp4       0      0  *.1522                 *.*                    LISTEN  
jww
fuente
1

Visité openssh.com y busqué la última versión (7.1) a través de FTP.

El enlace debajo de "Para OpenBSD: FTP / HTTP" es, como su nombre lo indica, solo para OpenBSD . Debe construirse utilizando las herramientas de "puertos" de OpenBSD.

Ya que está ejecutando OS X, no OpenBSD, tendrá que descargarlo desde "Para otros sistemas operativos → Otros ...". (Desplácese hasta la sección "Descargar"). El portátil oficial de OpenSSH 7.1p1 Tarball definitivamente tiene tanto una configure guión y un INSTALL documento.

La vinculación estática no debería ser necesaria; Binarios de OS X puede Depende de las bibliotecas en una ruta absoluta. (Creo que incluso podría ser el predeterminado?)

No hay enlace de descarga en la página de inicio; tienes que revolver un poco para ello.

Estoy de acuerdo en que el sitio web está un poco atascado en la década de 1990, pero no diría que dos clics en lugar de un solo recuento como una búsqueda ... Si tuviera una página de descarga, solo contendría los mismos enlaces del SO que ya en la barra lateral, ¿no?

¿Dónde encuentro las instrucciones?

Echa un vistazo a Homebrew, especialmente su fórmula openssh . También:

grawity
fuente
Gracias Grawity. Ese sitio es un lío confuso ... lo descargué a través de FTP porque no había explícito Descargar Enlace, y carecía de una descarga bajo el Mac OS X enlazar. Además, no estoy usando Homebrew o Macports. Estoy tratando de minimizar el mantenimiento ya que este cuadro existe para probar los puertos de software PowerPC.
jww
Gracias de nuevo Grawity. Era mucho más que un simple ./configure ... && make, pero creo que lo tenemos No me gusta el sshd.c hack, pero creo que es lo mejor / lo más fácil hasta que el desarrollador de OpenSSH solucione el problema. Gracias por la ayuda.
jww