FAQ sobre Cfengine
Recopilatorio de preguntas frecuentes sobre el
sistema de administración centralizada Cfengine.
Si al tratar de configurar un nuevo cliente en Cfengine nos encontramos con este error:
cfrun: BAD: Unspecified server refusal (see verbose server output)
cfrun: Key-authentication for X failed
Y al revisar los logs del cliente vemos un
"Private decrypt failed = data too large for modulus":
cfservd: Accepting connection from X
cfservd: Private decrypt failed = data too large for modulus
cfservd: From (host=X,user=root,ip=X)
Tendremos que
borrar la clave pública en el servidor master de Cfengine, ya que posiblemente esta se ha regenerado, fue utilizada por otra máquina con la misma IP, etc.. Ejemplo para borrar la key publica de un cliente con IP 10.0.0.1:
rm -f /var/cfengine/ppkeys/root-10.0.0.1.pub
Por seguridad el modulo
editfiles∞ de Cfengine tiene
limitado el tamaño máximo de los ficheros a analizar, por defecto el valor del parámetro
EditFileSize∞ son 10.000 bytes, un límite que en muchos casos puede ser insuficiente:
cfengine:centos02: File /etc/named.conf is bigger than the limit <editfilesize>
Podemos ampliar este limite modificando
EditFileSize∞ dentro de la sección
control:, poniendo 0 esta medida de seguridad quedará deshabilitada.
control:
(..)
# Aumentar a 64KB el tamaño máximo de ficheros a analizar por el modulo EditFile
EditfileSize = ( 65536 )
Problema: Queremos añadir la cadena
allow-transfer { none; }; en el fichero de configuración del servidor DNS BIND (
/etc/named.conf) para deshabilitar las transferencias de zonas, este linea cadena de texto tiene que ir obligatoriamente dentro del bloque de configuración
options { (..) } y no puede ir en otro lugar, y además no puede estar duplicada. Utilizando uno de los módulos mas potentes de Cfengine,
EditFiles∞, comprobaremos de dos formas diferentes si existe dicha cadena y en caso de no existir se insertará en el lugar correcto.
# cat /etc/named.conf
(..)
options {
// Aquí puede venir una cadena de texto
allow-transfer { none; };
// Aquí nos encontraremos mas opciones de configuración
}
(..)
Solución 1:
{ /etc/named.conf
BeginGroupIfNoLineContaining "allow-transfer { none; };"
LocateLineMatching "options \{"
InsertLine "$(tab)allow-transfer { none; };"
EndGroup
DefineClasses "service_named_restart"
}
{ /etc/named.conf
LocateLineMatching "options \{"
IncrementPointer "1"
BeginGroupIfNoMatch "allow-transfer \{ none; \};"
IncrementPointer "-1"
InsertLine "allow-transfer { none; };"
EndGroup
DefineClasses "service_named_restart"
}
Si queremos
generar una alerta si un fichero contiene una determinada cadena de texto, podemos utilizar el módulo
EditFiles∞ para localizar dicho "string" y definir una variable/flag de control que posteriormente provocará que la alerta aparezca, ejemplo:
editfiles:
plesk::
{ /etc/fstab
BeginGroupIfLineContaining "ext3,usrquota"
DefineInGroup "plesk_fstab_bug"
EndGroup
}
(..)
alerts:
plesk_fstab_bug::
"ERROR!! La sintaxis del fichero /etc/fstab es incorrecta!"
En el ejemplo, utilizamos
BeginGroupIfLineContaining para definir la variable
plesk_fstab_bug con
DefineInGroup si el fichero a analizar contiene la cadena que buscamos.. y en tal caso el módulo
alerts genera un mensaje de error personalizado.