Woop!

FAQ sobre Cfengine


Recopilatorio de preguntas frecuentes sobre el sistema de administración centralizada Cfengine.



Cfengine error en cfservd: Private decrypt failed = data too large for modulus


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




File X is bigger than the limit <editfilesize>


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 )




Edición de ficheros en Cfengine con el modulo EditFiles, ejemplo 1


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"
}




Generar una alerta sin un fichero contiene una determinada cadena de texto, con editfiles + alerts de Cfengine


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.

Powered by Woop!