Integración Unix AIX, Samba, Winbind, SSH y dominio Windows (7/8) - Winbind y SSH, PAM y compilación del openssh


Home del documento

- Desgunzipo, destareo (no se muestra, ejemplos mostrados anteriormente) y lanzo el ./configure indicándole los modificadores --prefix y --with-pam. Redirecciono log por si he de consultar algo:

# pwd
/usr/src/openssh-4.7p1
# ./configure --prefix=/opt/openssh-4.7p1 --with-pam 2>&1 | tee /tmp/configure.log
...
checking for getspnam in -lgen... no
checking for library containing basename... none required
checking for deflate in -lz... yes
checking zlib.h usability... no
checking zlib.h presence... no
checking for zlib.h... no
configure: error: *** zlib.h missing - please install first or check config.log ***


- Se queja de que no encuentra zlib. Se puede descargar en http://www.zlib.net (http://www.zlib.net/zlib-1.2.3.tar.gz en el momento de redactar). Pues nada, descargo, desgunzipo, destareo y continuamos (ahora es ./configure , make test y make install)...

# pwd
/usr/src/zlib-1.2.3
# ./configure
Checking for gcc...
Building static library libz.a version 1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.
# make test
gcc -O3 -DUSE_MMAP -c example.c
gcc -O3 -DUSE_MMAP -c adler32.c
gcc -O3 -DUSE_MMAP -c compress.c
gcc -O3 -DUSE_MMAP -c crc32.c
gcc -O3 -DUSE_MMAP -c gzio.c
gcc -O3 -DUSE_MMAP -c uncompr.c
gcc -O3 -DUSE_MMAP -c deflate.c
gcc -O3 -DUSE_MMAP -c trees.c
gcc -O3 -DUSE_MMAP -c zutil.c
gcc -O3 -DUSE_MMAP -c inflate.c
gcc -O3 -DUSE_MMAP -c infback.c
gcc -O3 -DUSE_MMAP -c inftrees.c
gcc -O3 -DUSE_MMAP -c inffast.c
ar rc libz.a adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
gcc -O3 -DUSE_MMAP -o example example.o -L. libz.a
gcc -O3 -DUSE_MMAP -c minigzip.c
gcc -O3 -DUSE_MMAP -o minigzip minigzip.o -L. libz.a
hello world
zlib version 1.2.3 = 0x1230, compile flags = 0x55
uncompress(): hello, hello!
gzread(): hello, hello!
gzgets() after gzseek: hello!
inflate(): hello, hello!
large_inflate(): OK
after inflateSync(): hello, hello!
inflate with dictionary: hello, hello!
*** zlib test OK ***
# make install
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
cp libz.a /usr/local/lib
cd /usr/local/lib; chmod 755 libz.a
cd /usr/local/lib; if test -f libz.so.1.2.3; then rm -f libz.so libz.so.1; ln -s libz.so.1.2.3 libz.so; ln -s libz.so.1.2.3 libz.so.1; (ldconfig || true) >/dev/null 2>&1; fi
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3


- Volvemos a /usr/src/openssh-4.7p1 y lanzamos de nuevo el ./configure del openssh:

# cd /usr/src/openssh-4.7p1
#./configure --prefix=/opt/openssh-4.7p1 --with-pam 2>&1 | tee /tmp/configure.log
IP address in $DISPLAY hack: no
Translate v4 in v6 hack: no
BSD Auth support: no
Random number source: OpenSSL internal ONLY

Host: powerpc-ibm-aix5.3.0.0
Compiler: gcc
Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare
Preprocessor flags:
Linker flags: -Wl,-blibpath:/usr/lib:/lib
Libraries: -lcrypto -lz
+for sshd: -lpam -ldl

PAM is enabled. You may need to install a PAM control file
for sshd, otherwise password authentication may fail.
Example PAM control files can be found in the contrib/
subdirectory


- Ahora está OK, lanzamos make y make install. Como al lanzar el ./configure indiqué --prefix, la cuestión de que me sobreescriba algo no me preocupa tanto como en el caso del make install de Samba. Aunque hay que tenerlo en cuenta.

# make 2>&1 | tee /tmp/make.log
...
# make install 2>&1 | tee /tmp/make_install.log
...
if [ ! -z "" ]; then ./install-sh -c -m 644 ssh-rand-helper.8.out /opt/openssh-4.7p1/share/man/man8/ssh-rand-helper.8 ; fi
./install-sh -c -m 644 sftp.1.out /opt/openssh-4.7p1/share/man/man1/sftp.1
./install-sh -c -m 644 sftp-server.8.out /opt/openssh-4.7p1/share/man/man8/sftp-server.8
./install-sh -c -m 644 ssh-keysign.8.out /opt/openssh-4.7p1/share/man/man8/ssh-keysign.8
rm -f /opt/openssh-4.7p1/bin/slogin
ln -s ./ssh /opt/openssh-4.7p1/bin/slogin
rm -f /opt/openssh-4.7p1/share/man/man1/slogin.1
ln -s ./ssh.1 /opt/openssh-4.7p1/share/man/man1/slogin.1
if [ ! -d /opt/openssh-4.7p1/etc ]; then ./mkinstalldirs /opt/openssh-4.7p1/etc; fi
mkdir /opt/openssh-4.7p1/etc
exec(): 0509-036 Cannot load program ./ssh-keygen because of the following errors:
0509-150 Dependent module libcrypto.a(libcrypto.so.0.9.7) could not be loaded.
0509-022 Cannot load module libcrypto.a(libcrypto.so.0.9.7).
0509-026 System error: A file or directory in the path name does not exist.
make: 1254-004 The error code from the last command is 255.


Stop.


- De nuevo un error debido a que no encuentra algo, que ahora tiene que ver con ssh-keygen. Me voy al directorio y pregunto con el comando dump (En este link proponen también el uso de los comandos truss y/o strace, y/o comentar las líneas de código que sigue el flujo del programa al pasar por ahí.).

# cd /opt/openssh-4.7p1/bin
# dump -H ssh-keygen

ssh-keygen:

***Loader Section***
Loader Header Information
VERSION# #SYMtableENT #RELOCent LENidSTR
0x00000001 0x000000d8 0x00000465 0x0000003e

#IMPfilID OFFidSTR LENstrTBL OFFstrTBL
0x00000003 0x0000491c 0x0000067a 0x0000495a


***Import File Strings***
INDEX PATH BASE MEMBER
0 /usr/lib:/lib
1 libc.a shr.o
2 libcrypto.a libcrypto.so.0.9.7


- El problema lo tengo en libcrypto.a que aunque lo tengo en el sistema, no lo tengo en la ruta que el espera. En mi SO la librería estaba (desde antes de mi intervención) en /opt/freeware/lib/libcrypto.a. Así pues linko la ruta que él espera de acuerdo con la salida que me ha proporcionado el dump:

# ln -s /opt/freeware/lib/libcrypto.a /usr/lib/libcrypto.a
#


- Vuelvo a lanzar el make install que esta vez funciona.

Al haber construido el sshd indicando un --prefix=/opt/openssh-4.7p1 debo tunear el fichero /opt/openssh-4.7p1/etc/sshd_config indicando la misma opcion (UsePAM yes) que indiqué anteriormente.


- Ahora hay que parar el sshd antiguo y arrancar el nuevo. Por lo que pudiera ser, en este punto es aconsejable activar la entrada por telnet.

# startsrc -t'telnet'
0513-124 The telnet subserver has been started.


- Nos aseguramos...

# lssrc -t'telnet'
Service Command Description Status
telnet /usr/sbin/telnetd telnetd -a active

... aunque mejor probar de acceder directamente con un telnet.


- El sshd antiguo está arriba...

# ps -ef|grep "/sshd"|grep -v grep
root 26364 8068 0 11:02:31 - 0:00 /usr/sbin/sshd


- Lo paramos...

# stopsrc -s sshd
0513-044 The sshd Subsystem was requested to stop.

... y aseguramos que ya no corre.

# ps -ef|grep "/sshd"|grep -v grep


- Arrancamos el sshd nuevo con...

# /opt/openssh-4.7p1/sbin/sshd -d
debug1: sshd version OpenSSH_4.7p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: rexec_argv[0]='/opt/openssh-4.7p1/sbin/sshd'
debug1: rexec_argv[1]='-d'
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
...

... vuelvo a probar con el cliente ssh...

smolarek@host1 ~
$ ssh "DOMINIO\smolarek@modsed"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6c:0b:ea:c3:2a:87:b3:28:0e:cd:0d:06:7b:fd:e8:5a.
Please contact your system administrator.
Add correct host key in /cygdrive/c/Documents and Settings/smolarek/.ssh/known_hosts to get rid of this message.
Offending key in /cygdrive/c/Documents and Settings/smolarek/.ssh/known_hosts:21
RSA host key for modsed has changed and you have requested strict checking.
Host key verification failed.


- Al haber cambiar el sshd, cambio la identificación de host remoto. En determinados casos esto hará que el cliente ssh aborte la conexión sin ni tan siquiera llege a solicitar password.

Una posible solución es utilizar la configuración ssh anterior en lugar de la creada en /opt/openssh-4.7p1 al compilar el ssh. La otra es borrar la entrada que identifica el host del servidor en mi directorio (cliente) de ssh. Aquí he utilizado la segunda:

smolarek@host1 ~
$ tail -3 .ssh/known_hosts
192.168.84.124 ssh-rsa AAAAB3N...
192.168.21.1 ssh-dss AAAAB3Nz...
modsed,192.168.92.13 ssh-rsa ...

smolarek@host1 ~
$


- En el caso de mi equipo (cliente) habría que borrar la última linea de $HOME/.ssh/known_hosts cuya entrada corresponde a servidor al que quiero conectarme. Tras esto intento conectar de nuevo

$ ssh "DOMINIO\smolarek@modsed"
The authenticity of host 'modsed (192.168.92.13)' can't be established.
RSA key fingerprint is 6c:0b:ea:c3:2a:87:b3:28:0e:cd:0d:06:7b:fd:e8:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'modsed,192.168.92.13' (RSA) to the list of known hosts.
Password:
*******************************************************************************
* *
* *
* Welcome to AIX Version 5.3! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
DOMINIO\smolarek@modsed:/home]


FUNCIONA !!!


Home del documento