Autenticación sin contraseñas en SSH

Todo un clásico, pero extremadamente útil cuando tienes varias máquinas para administrar.

$ ssh-keygen -t rsa -b 4096 -C "your_email@youremail.com" #Genera la clave
$ ssh-copy-id username@remote-host #Copia la clave al servidor remoto

Para los paranoicos es una buena idea tener anotados de antemano los fingerprints de los servidores. De esta forma si intentamos conectar alguna vez desde algún entorno no seguro donde no tengamos cacheada la clave en ~/.ssh/known_hosts podremos estar seguros de que no nos están haciendo un man in the middle.

$ ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 e7:1c:1b:2f:7b:e5:a2:b8:aa:01:d5:79:07:0f:e2:1a /etc/ssh/ssh_host_rsa_key.pub (RSA)

Advertisements

Crear repositorio de paquetes RPM

Últimamente he estado aprendiendo a crear paquetes RPM y cuando ya tienes hechos unos cuantos es muy útil crearse un repositorio para instalarlos desde ahí. Para una empresa que tiene que gestionar muchas máquinas es una herramienta fundamental para distribuir versiones personalizadas o aplicaciones propias. Hay bastante documentación al respecto, yo he estado leyendo entradas como ésta.

Os cuento como he creado mi repositorio.

Cuento con dos máquinas, el servidor (un VPS en buyvm.net, os lo recomiendo) y mi máquina de trabajo. Los RPM ya los tengo generados, en otra entrada ya explicaré en más detalle como hacerlos.

Primero voy a crear toda la estructura en mi máquina.


$ mkdir -p /home/user/devel/repo #Este será el directorio raiz del repositorio
$ cd /home/user/devel/repo
$ mkdir -p Fedora/15/{i386,x86_64}/{os,debug}
$ mkdir -p Fedora/15/source/SRPMS
$ cp <rpms> <directorio donde les corresponda> #Los binarios en arch/os los src.rpm en source/SRPMS etc.

Ahora vamos a generar una clave GPG para firmar los RPM y la información del repositorio.

$ gpg --gen-key #Creamos una clave RSA de 4096 bits (recomendado), le damos el nombre del repositorio.
$ gpg --export <nombre de la clave> > /home/user/devel/repo/RPM-GPG-KEY-myrepo #Exportamos la clave pública al repositorio


Añado las siguientes líneas a ~/.rpmmacros

%_signature gpg
%_gpg_name <nombre de la clave del repositorio>

Y firmo los paquetes con la clave:

$ find /home/user/devel/repo -type f -name "*.rpm" | xargs rpm --resign

Ahora solo nos queda crear la información del repositorio, para esto usaremos la herramienta createrepo. He creado el siguiente script en bash para automatizar el proceso:

#!/bin/bash
repodir="/home/user/devel/repo/Fedora/15"
archs="i386/os i386/debug x86_64/os x86_64/debug source/SRPMS"

# Actualizo la informacion del repositorio
for arch in $archs
do
   pushd ${repodir}/${arch} >/dev/null 2>&1
   createrepo -v .
   popd >/dev/null 2>&1
done

# Firmo el repositorio
files=$(find $repodir -name repomd.xml)
for file in $files
do
   echo "Firmo el archivo: $file"
   if [ -f ${file}.asc ]; then
      rm -f ${file}.asc
      gpg --armor --detach-sign --default-key "<nombre de la clave del repositorio>" $file
   fi
done

Ya tenemos el repositorio creado en nuestra máquina. Ahora vamos a replicarlo al servidor web, para ello crearemos la carpeta que alojará la web y lo sincronizaremos con rsync. Podemos crear un tarea cron que se ejecute cada hora para tenerlo siempre sincronizado o lanzarlo manualmente.


rsync -avz --rsh=ssh --delete /home/user/devel/repo/ user@server.example.com:/var/www/vhosts/rpm.server.example.com/repo/

Por último creamos el fichero myrepo.repo que describe nuestro repositorio y lo copiamos en /etc/yum.repos.d

[myrepo]
name=My repository
baseurl=http://server.example.com/repo/Fedora/15/$basearch/os
enabled=1
gpgcheck=1
gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc

[myrepo-debuginfo]
name=My repository - Debug
baseurl=http://server.example.com/repo/Fedora/15/$basearch/debug
enabled=0
gpgcheck=1
gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc

[myrepo-source]
name=My repository - Source
baseurl=http://server.example.com/repo/Fedora/15/source/SRPMS
enabled=0
gpgcheck=1
gpgkey=http://server.example.com/repo/RPM-GPG-KEY-myrepo.asc

Habilitar la autenticación contra Active Directory en CentOS 5

Las siguientes instrucciones son para habilitar el login de usuarios de Active Directory en CentOS 5 x86_64.

Lo primero que necesitamos es instalar en el controlador de dominio (en mi caso Windows 2008 R2) el servicio de “Microsoft Identity Management for UNIX” y crear un dominio NIS.

He creado en AD un grupo global ad_unix_users para que sea el grupo principal de los usuarios en Linux, para esto en las propiedades del grupo, vamos a la pestaña UNIX attributes y lo asignamos al dominio NIS. Le tendría que dar automáticamente un GID.

En los usuarios que queramos que puedan loguearse vamos de nuevo a la pestaña UNIX attributes y los añadimos al dominio NIS. Ponemos nuestra shell preferida, directorio home, y el grupo principal que hemos creado antes. Voy a suponer que todos los usuarios están dentro de la OU: “ou=Users,dc=example,dc=com”.

Hace falta crear también un usuario para la conexión LDAP. En este ejemplo se llama unixauth, ponerle una contraseña compleja.

Hay ciertos puntos que hay que revisar:

  • El DNS tiene que estar bien configurado: tiene que funcionar bien la resolucion del nombre de host y la resolución inversa y la máquina Linux tiene que resolver usando los DNS de Windows.
  • Me he encontrado un conflicto en CentOS 5 de 64 bits por culpa del paquete pam_krb5.i386 que no debería estar instalado. Incluyo un comando para quitar todos los paquetes de 32 bits
  • Hace falta el certificado de la CA del dominio, podemos obtenerlo accediendo a la máquina donde esten instalados los servicios de certificados en la URL adcs.example.com/certsrv/


# yum list installed | egrep ".i686|.i386" | awk {'print $1'} | xargs yum remove -y
# cp <Windows CA>.crt /etc/openldap/cacerts/
# yum install -y openldap-clients.x86_64 pam_krb5.x86_64 authconfig.x86_64 nss_ldap.x86_64
# authconfig --enableldap --enableldaptls --ldapserver adds01.example.com,adds02.example.com --ldapbasedn "ou=Users,dc=example,dc=com" --enablekrb5 --krb5realm EXAMPLE.COM --enablekrb5kdcdns --disablekrb5realmdns --enablemkhomedir --enablelocauthorize --update

– Editar /etc/ldap.conf y añadir:

binddn unixauth
bindpw <unixauth password>
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password ad

Espero que os sirva.

Errores al instalar SQL Server 2008

Acabo de instalar un cluster de SQL Server 2008 y me ha sorprendido encontrarme varios fallos en el instalador que te impiden completar la instalación de forma gráfica. Os los detallo:

  • En el primer nodo, cuando se definen los grupos a los que pertenecen las cuentas de servicio, seleccionaba el grupo previamente creado en Active Directory y me daba un error de “must provide AGTDOMAIN group”. Después de volverme loco descubrí que si en vez de darle al botón de Examinar escribía el nombre del grupo a mano, lo aceptaba.
  • En el segundo nodo, al aceptar el código de licencia, me daba continuamente un error de “the current SKU is invalid”. En este caso lo solucioné lanzando la instalación desde línea de comandos:
    setup.exe /q /ACTION=AddNode /INSTANCENAME="MSSQLSERVER"
    /SQLSVCACCOUNT="" /SQLSVCPASSWORD=""
    /AGTSVCACCOUNT="", /AGTSVCPASSWORD=""
    /ASSVCACCOUNT="" /ASSVCPASSWORD=”” /INDICATEPROGRESS

    Más información en esta web

Copiar archivos en windows

Cuando queremos copiar un árbol de directorios en windows y queremos conservar los permisos, propietario, hora de acceso, etc. la función copy normal se nos queda totalmente coja. Necesitamos recurrir a herramientas más avanzadas como RoboCopy.

RoboCopy se encuentra dentro del paquete Resource Kit Tool de windows, donde hay un montón de herramientas útiles.
La documentación se encuentra en un archivo .doc en el directorio de instalación, echadle un ojo porque tiene multitud de opciones.

La línea que os pongo a continuación es la que uso yo y copia todo el árbol de directorios, con todos los atributos de los ficheros y los permisos:

robocopy.exe C:dir_origen D:dir_destino /COPYALL /SEC /ZB /E /R:0 /W:0 /LOG:ficherolog.txt /NFL /NDL

Instalar Google Earth 5.0 en Linux

Recienteme he instalado la versión 5 de Google Earth en Ubuntu intrepid 8.10 AMD64. Como me ha dado algunos problemas os detallo lo que hice:

Una vez descargado, le damos permisos de ejecución:

$ chmod +x GoogleEarthLinux.bin
$ ./GoogleEarthLinux.bin

Hacemos la instalación en modo gráfico, todo bien hasta que lo ejecutamos:

$ ./googleearth-bin: relocation error: /usr/lib/i686/cmov/libssl.so.0.9.8: symbol BIO_test_flags, version OPENSSL_0.9.8 not defined in file libcrypto.so.0.9.8 with link time reference

He visto varias soluciones, por ejemplo haciendo un enlace simbólico a la librería del sistema. Lo que yo he hecho ha sido renombrar la librería que trae Google Earth para que vaya a buscarla al sistema:

$ mv libcrypto.so.0.9.8 libcrypto.so.0.9.8-backup

Presentación

Hola a todos, trabajo como administrador de sistemas y soy un entusiasta del software libre y con el paso de los años he echado en falta un sitio donde ir apuntando configuraciones, experiencias y pequeñas cosas que con el paso del tiempo se olvidan y que en el momento requieren su esfuerzo.

Muchas veces, para solucionar un problema, buscamos por internet y vamos recopilando pequeños trozos de la solución de distintas fuentes. Al final conseguimos solucionarlo, pero no lo publicamos en ningún lado, por lo que no se ayuda en nada a otras personas en la misma situación. Para intentar devolver al mundo parte de ese conocimiento, creo este blog.

Aunque mi principal interés es el software libre, no me cierro a ningún ámbito.

Sed todos bienvenidos.