# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Postfix no lee el fichero /etc/hosts

Si alguna vez habéis intentado forzar un determinado Host SMTP a través del fichero /etc/hosts probablemente os hayáis encontrado con el problema de que Postfix hace caso omiso y no lo lee.

El “culpable” de este comportamiento es el valor especificado en el parámetro smtp_host_lookup. Este parámetro tiene tres valores posibles:

  • DNS: buscar hosts únicamente por DNS
  • NATIVE: buscar hosts utilizando el sistema nativo (nsswitch.conf)
  • DNS, NATIVE: usar el servicio nativo únicamente si no se encuentra el host por DNS.

El valor establecido por defecto es “dns” así que si queréis que lea el fichero /etc/hosts lo tendréis que cambiar a “native”.

Con el comando “postconf” podemos consultar el valor actual:

# postconf | grep smtp_host_lookup
smtp_host_lookup = dns

Lo podéis cambiar también con “postconf -e” o directamente añadirlo/modificarlo en el fichero de configuración main.cf (/etc/postfix/main.cf)

smtp_host_lookup = native

Automatizar el particionado de fdisk con sfdisk

Si bien es cierto que podemos utilizar fdisk en scripts, al ser un comando interactivo complica y “ensucia” un poco la ejecución dentro del script. Para ello disponemos de sfdisk, la variante “no interactiva” de fdisk que permite automatizar el particionado de discos.

Por ejemplo, si lo que vamos a hacer es automatizar el particionado de discos a partir de un disco base, simplemente tenemos que hacer un “dump” del disco /dev/sda que ya está particionado con el siguiente comando:

# sfdisk --dump /dev/sda

# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=     2046, size= 51918850, Id= 5, bootable
/dev/sda2 : start= 51922080, size=260658016, Id=83
/dev/sda3 : start=        0, size=        0, Id= 0
/dev/sda4 : start=        0, size=        0, Id= 0
/dev/sda5 : start=     2048, size= 47747072, Id=83
/dev/sda6 : start= 47751168, size=  4169728, Id=82

El resultado lo podemos almacenar en un fichero a modo de plantilla:

# sfdisk --dump /dev/sda > sfdisk.template

Ahora, con ese fichero podríamos restaurar la tabla de particiones del disco si hubieramos tenido algún problema o directamente “clonar” esa tabla de particiones en un disco nuevo. Para ello especificamos el fichero con la plantilla (-I) y el disco de destino:

# sfdisk /dev/sda -I sfdisk.template

Encontraréis más información de utilidad en la página man de sfdisk.

Encontrar qué paquete contiene un fichero en Debian

El comando “apt-file” permite buscar el paquete que contiene un fichero concreto. Por defecto no viene instalado en Debian y derivados así que lo podemos instalar directamente con apt:

# apt-get install apt-file

Una vez instalado actualizamos la base de datos de paquetes y ficheros:

# apt-file update

A partir de este momento ya podemos buscar. En el siguiente ejemplo buscamos el paquete que contiene el fichero “vmlinuz-2.6.38-8-generic”:

~$ apt-file search vmlinuz-2.6.38-8-generic
linux-image-2.6.38-8-generic: /boot/vmlinuz-2.6.38-8-generic

Se puede depurar la búsqueda por repositorio, patrón, arquitectura, etc:

Configuration options:
    --sources-list     -s         sources.list location
    --cache            -c          Cache directory
    --architecture     -a         Use specific architecture
    --cdrom-mount      -d        Use specific cdrom mountpoint
    --from-file        -f               Read patterns from file(s), one per line
                                        (use '-' for stdin)
    --from-deb         -D               Use file list of .deb package(s) as
                                        patterns; implies -F
    --non-interactive  -N               Skip schemes requiring user input
                                        (useful in cron jobs)
    --package-only     -l               Only display packages name
    --fixed-string     -F               Do not expand pattern
    --ignore-case      -i               Ignore case distinctions
    --regexp           -x               pattern is a regular expression
    --verbose          -v               run in verbose mode
    --dummy            -y               run in dummy mode (no action)
    --help             -h               Show this help.
    --version          -V               Show version number

Action:
    update                              Fetch Contents files from apt-sources.
    search|find                Search files in packages
    list|show                  List files in packages
    purge                               Remove cache files

Clonezilla: extfsclone.c: bitmap free count err, free:

A la hora de crear una imagen de un disco a través del Live CD de Clonezilla nos podemos encontrar este error al comienzo de la tarea:

extfsclone.c: bitmap free count err, free:XXXXXX

No es un error de falta de espacio en el disco de destino sino un problema de la integridad del sistema de ficheros del disco que estamos haciendo una imagen. Esto es muy común por ejemplo cuando hemos realizado un redimensionamiento del filesystem origen para evitar que el disco de destino en el que restauramos tenga que tener el mismo espacio disponible.

La solución pasa por hacer un FSCK manualmente al filesystem antes de realizar la imagen o directamente indicar a Clonezilla que sea él quien haga el escaneo (interactivo o automático). Para ello ejecutad el asistente en modo experto y seleccionar la opción:

-fsck-src-part

Cisco UCS Manager: java.io.IOException: Invalid Http response Login Error for URL…

Tras una actualización de Java, en mi caso Version 7 Update 51 (build 1.7.0_51_b13), a nivel de cliente resulta imposible acceder a la gestión de Cisco UCS Manager a través de protocolo SSL.

Login Error: java.io.IOException: Invalid Http response
Login Error: java.io.IOException: Server returned HTTP response code: 400 for URL: http://[MANAGER_IP]:443/nuova

El Workaround es deshabilitar el redirect SSL y acceder en plano, algo no demasiado recomendable si no se accede desde una red de confianza, la otra opción es revertir el update de Java a la espera de que en futuras actualizaciones el problema quede solucionado.

Si decidís aplicar temporalmente el workaround de sustituir HTTPS por HTTP, acceded por SSH al UCS y realizad el cambio:

ucs # scope system
ucs /system # scope services
ucs /system/services # enable http
ucs /system/services # disable http-redirect
ucs /system/services* # commit

Cuando se realice el commit las sesiones activas serán desactivadas y será necesario volver a acceder al Manager.

Habilitar el conector LDAPS en OpenDJ (post-instalación)

Cuando realizamos la instalación de OpenDJ con el asistente (setup) nos permite activar el protocolo LDAPS de forma sencilla con apenas un par de preguntas. En el caso de que queramos activarlo a posteriori hay que tener un poco más de conocimiento de OpenDJ, a continuación os explico los pasos para hacerlo.

Lo primero es disponer de un certificado SSL. Será el que utilicemos para las conexiones entrantes al puerto LDAPS (636 por defecto). Para testing podemos generar uno self-signed. Ejemplo:

# keytool -genkey -keyalg RSA -alias "OpenDJ LDAPS SSL" \
-keypass PASSWORD -keystore keystore.ks -storepass PASSWORD \
-dname "cn=OpenDJ, c=ES"

Esto nos genera un keystore que almacena el certificado (keystore.ks), lo ubicaremos en la ruta $OPENDJ_HOME/config/.

Una vez que tenemos el keystore hay que habilitar el conector LDAPS y configurar el certificado en OpenDJ. Lo primero verificamos que LDAPS efectivamente está deshabilitado:

# $OPENDJ_HOME/bin/status
[..]
          --- Connection Handlers ---
Address:Port : Protocol : State
-------------:----------:---------
--           : LDIF     : Disabled
0.0.0.0:161  : SNMP     : Disabled
0.0.0.0:389  : LDAP     : Enabled
0.0.0.0:636  : LDAPS    : Disabled
0.0.0.0:1689 : JMX      : Disabled
0.0.0.0:8080 : HTTP     : Disabled

Para habilitarlo debemos primero configurar el File Based Key Manager Provider “JKS (Java KeyStore)” para que utilice nuestro keystore. Lo hacemos a través de dsconfig:

# $OPENDJ_HOME/bin/status

>>>> OpenDJ configuration console main menu

What do you want to configure?

    1)   Access Control Handler               21)  Log Publisher
    2)   Access Log Filtering Criteria        22)  Log Retention Policy
    3)   Account Status Notification Handler  23)  Log Rotation Policy
    4)   Administration Connector             24)  Matching Rule
    5)   Alert Handler                        25)  Monitor Provider
    6)   Attribute Syntax                     26)  Password Generator
    7)   Backend                              27)  Password Policy
    8)   Certificate Mapper                   28)  Password Storage Scheme
    9)   Connection Handler                   29)  Password Validator
    10)  Crypto Manager                       30)  Plugin
    11)  Debug Target                         31)  Plugin Root
    12)  Entry Cache                          32)  Replication Domain
    13)  Extended Operation Handler           33)  Replication Server
    14)  External Changelog Domain            34)  Root DN
    15)  Global Configuration                 35)  Root DSE Backend
    16)  Group Implementation                 36)  SASL Mechanism Handler
    17)  Identity Mapper                      37)  Synchronization Provider
    18)  Key Manager Provider                 38)  Trust Manager Provider
    19)  Local DB Index                       39)  Virtual Attribute
    20)  Local DB VLV Index                   40)  Work Queue

    q)   quit

Accedemos al apartado 18 “Key Manager Provider” y listamos los “Manager Providers”, seleccionando y editando “JKS”:

>>>> Key Manager Provider management menu

What would you like to do?

    1)  List existing Key Manager Providers
    2)  Create a new Key Manager Provider
    3)  View and edit an existing Key Manager Provider
    4)  Delete an existing Key Manager Provider

    b)  back
    q)  quit

Enter choice [b]: 1

Key Manager Provider : Type       : enabled
---------------------:------------:--------
Administration       : file-based : true
JKS                  : file-based : true
PKCS11               : pkcs11     : false
PKCS12               : file-based : false

>>>> Key Manager Provider management menu

What would you like to do?

    1)  List existing Key Manager Providers
    2)  Create a new Key Manager Provider
    3)  View and edit an existing Key Manager Provider
    4)  Delete an existing Key Manager Provider

    b)  back
    q)  quit

Enter choice [b]: 3

>>>> Select the Key Manager Provider from the following list:

    1)  Administration
    2)  JKS
    3)  PKCS11
    4)  PKCS12

    c)  cancel
    q)  quit

Enter choice [c]: 2

>>>> Configure the properties of the File Based Key Manager Provider

        Property                            Value(s)
        ---------------------------------------------------
    1)  enabled                             true
    2)  key-store-file                      config/keystore.ks
    3)  key-store-pin                       PASSWORD
    4)  key-store-pin-environment-variable  -
    5)  key-store-pin-file                  -
    6)  key-store-pin-property              -
    7)  key-store-type                      JKS

    ?)  help
    f)  finish - apply any changes to the File Based Key Manager Provider
    c)  cancel
    q)  quit

En este punto como veis debemos indicar:

  • Ruta al fichero keystore que hemos creado con el certificado SSL.
  • Password del keystore
  • Enabled = True

Confirmamos y con esto el certificado ya está disponible a través del provider “JKS” y nuestro keystore.

Procedemos a activar el conector LDAPS accediendo al apartado 9) del menú de dsconfig:

    9)   Connection Handler

Editamos el conector de LDAPS:

>>>> Connection Handler management menu

What would you like to do?

    1)  List existing Connection Handlers
    2)  Create a new Connection Handler
    3)  View and edit an existing Connection Handler
    4)  Delete an existing Connection Handler

    b)  back
    q)  quit

Enter choice [b]: 3

>>>> Select the Connection Handler from the following list:

    1)  HTTP Connection Handler
    2)  JMX Connection Handler
    3)  LDAP Connection Handler
    4)  LDAPS Connection Handler
    5)  LDIF Connection Handler
    6)  SNMP Connection Handler

    c)  cancel
    q)  quit

Enter choice [c]: 4

>>>> Configure the properties of the LDAP Connection Handler

         Property                Value(s)
         ----------------------------------------------------------------------
    1)   allow-ldap-v2           true
    2)   allow-start-tls         false
    3)   allowed-client          All clients with addresses that do not match
                                 an address on the deny list are allowed. If
                                 there is no deny list, then all clients are
                                 allowed.
    4)   denied-client           If an allow list is specified, then only
                                 clients with addresses on the allow list are
                                 allowed. Otherwise, all clients are allowed.
    5)   enabled                 true
    6)   keep-stats              true
    7)   key-manager-provider    JKS
    8)   listen-address          0.0.0.0
    9)   listen-port             636
    10)  ssl-cert-nickname       Let the server decide.
    11)  ssl-cipher-suite        Uses the default set of SSL cipher suites
                                 provided by the server's JVM.
    12)  ssl-client-auth-policy  optional
    13)  ssl-protocol            Uses the default set of SSL protocols provided
                                 by the server's JVM.
    14)  trust-manager-provider  JKS
    15)  use-ssl                 true

    ?)   help
    f)   finish - apply any changes to the LDAP Connection Handler
    c)   cancel
    q)   quit

Sólo hay que modificar la propiedad enabled a true y confirmar. Automáticamente si todo ha ido bien OpenDJ escuchará por el puerto 636 en LDAPS y por todas las IPs del servidor. Si queremos forzar una única IP podemos modificar el listener:

    8)   listen-address          0.0.0.0

Confirmamos con un netstat:

# netstat -natp | grep 636
tcp        0      0 :::636                      :::*                        LISTEN      4397/java

Y si hacemos un ldapsearch con ssl podemos verificar la utilización del certificado:

# ./bin/ldapsearch --port 636 --useSSL  --baseDN "o=pruebas" "(objectclass=*)"
The server is using the following certificate: 
    Subject DN:  cn=OpenDJ, c=ES
    Issuer DN:  cn=OpenDJ, c=ES
    Validity:  Thu Feb 06 13:22:17 CET 2014 through Wed May 07 14:22:17 CEST 2014
Do you wish to trust this certificate and continue connecting to the server?
...

El status de OpenDJ también nos indicará que LDAPS está activo:

          --- Connection Handlers ---
Address:Port : Protocol : State
-------------:----------:---------
--           : LDIF     : Disabled
0.0.0.0:161  : SNMP     : Disabled
0.0.0.0:389  : LDAP     : Enabled
0.0.0.0:636  : LDAPS    : Enabled
0.0.0.0:1689 : JMX      : Disabled
0.0.0.0:8080 : HTTP     : Disabled

Convertir vídeos con audio AC3 a MP3 con ffmpeg

FFmpeg es es la mejor opción para realizar tareas con vídeo y audio, ya sea grabar, convertir o hacer streaming de audio y vídeo. Ya vimos como instalarlo en GNU/Linux aunque también puede ser utilizado en otros sistemas operativos, también Windows.

En este caso vamos a ver como convertir el audio de un vídeo de AC3 a MP3:

~$ ffmpeg -i video_ac3.avi -vcodec copy -acodec libmp3lame -ab 128k -ac 2 -threads 0 video_mp3.avi

Simplemente aseguraos de poner el vídeo original con el parámetro (-i) y al final de la línea de comandos el vídeo de destino. Podéis investigar las distintas opciones en la ayuda del comando. Si queréis aprovechar también la capacidad de todos los núcleos del sistema podéis dejar a ffmpeg que los utilice a su elección con el parámetro -threads a 0 como hemos puestos. Lanzará un hilo de ffpmeg por cada núcleo, si pusieramos -threads pues lanzaría los threads que inidicaramos.

Si lo queremos hacer directamente con un fichero de audio:

~$ ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3

Reparar arranque de Windows 7 (Boot Loader)

Vamos a ver los pasos para arreglar los problemas de arranque de Windows 7. En caso de corrupción del Boot Loader, cambios incorrectos o borrado de lo que no debíamos puede suceder que Windows no arranque.

Para solucionarlo debemos arrancar el sistema con el DVD de instalación de Windows 7, el correspondiente a la arquitectura que tengamos instalada. Una vez arrancado a través del DVD seleccionamos el idioma y tipo de teclado y pasamos a la venta en la que seleccionar “Repair your Computer“.

restaurar bootloader Windows 7

Después elegimos el sistema operativo a arreglar. Una vez seleccionado, es posible que el sistema intente automáticamente solucionar los problemas de arranque y pedirá reiniciar. Es posible que esto no solucione el problema y tengamos que seguir con los pasos indicados. El siguiente paso será seleccionar el sistema operativo que queremos arreglar, de nuevo Windows 7 y después aparecerá la opción “Startup Repair” que entrará en el modo de arreglar los problemas de arranque.

restaurar_bootloader2
restaurar_bootloader3

Una vez seleccionado, de nuevo se intentará solucionar el problema automáticamente y pedirá un nuevo reinicio. En este caso es ya muy probable que automáticamente el fallo se solucione y Windows 7 arranque de forma correcta.

Si pese a esto seguimos con problemas, podemos acceder a la línea de comandos (disponible en la ventana que he enseñado antes) y restaurar el MBR (master boot record):

bootrec /fixmbr

Y también escribir un nuevo sector de arranque:

bootrec /fixboot

En algún punto de los citados seguro que ya volvéis a poder arrancar Windows 7 sin problemas.