Logrotate necesita pocas presentaciones ya que es una herramienta clásica para el rotado de logs en nuestro sistema. Podemos configurarla conjuntamente con GPG de una manera sencilla para cifrar y proteger los logs rotados y que sólo puedan ser accesibles por personal autorizado en posesión de la clave de descifrado correspondiente.
Creación del par de claves con GPG
Crearemos nuestro par de claves público/privada con el comando gpg --full-generate-key
y seleccionaremos en cada pregunta la opción que necesitemos. Para el ejemplo he utilizado el nombre de usuario elarraydejota y como correo mail@example.com:
[root@jota-pc ~]$ gpg --full-generate-key gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: elarraydejota Email address: mail@example.com Comment: You selected this USER-ID: "elarraydejota <mail@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Una vez demos por válidas las respuestas se nos pedirá una frase de paso (passphrase) para proteger las claves. Acto seguido es necesario que se genere cierta entropía:
We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy.
Finalizado este paso la clave habrá sido generada:
gpg: key F101D036957320AF marked as ultimately trusted gpg: directory '/root/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/8227ABE84C0FBHC69A297729F101D036957320AF.rev' public and secret key created and signed. pub rsa2048 2018-05-19 [SC] 8227ABE84C0FBHC69A297729F101D036957320AF 8227ABE84C0FBHC69A297729F101D036957320AF uid elarraydejota <mail@example.com> sub rsa2048 2018-05-19 [E]
Configurar logrotate para cifrar el log con GPG
Tendremos que añadir el siguente fragmento en el fichero de configuración de logrotate donde queramos cifrar los logs rotados:
compresscmd /usr/bin/gpg compressoptions --encrypt --default-key key-id --recipient user-id compressext .gpg
Como user-id utilizaremos el correo o el nombre real. El key-id lo obtenemos con el comando:
gpg --list-keys --keyid-format short
Que nos mostrará:
pub rsa2048/957320AF 2018-05-19 [SC] 8227ABE84C0FBHC69A297729F101D036957320AF uid [ultimate] elarraydejota <mail@example.com> sub rsa2048/3FE71259 2018-05-19 [E]
El key-id es 957320AF, es decir, los 8 caracteres alfanuméricos que están a continuación del algoritmo de cifrado rsa2048 de la primera línea o bien en la segunda línea los últimos 8 caracteres.
Así por ejemplo en el fichero /etc/logrotate.d/rsyslog para el log syslog tendríamos inicialmente la configuración:
var/log/syslog { rotate 14 daily missingok notifempty dateext delaycompress compress postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
Quedaría:
var/log/syslog { rotate 14 daily missingok notifempty dateext delaycompress compress compresscmd /usr/bin/gpg compressoptions --encrypt --default-key 957320AF --recipient mail@example.com compressext .gpg postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
Podemos esperar al siguiente rotado para comprobar que los logs se cifran correctamente (aparecerán con la extensión .gpg) o podemos lanzar manualmente logrotate con:
logrotate --force /etc/logrotate.conf
Si están cifrados veremos la extensión .gpg en el directorio donde se estén rotando los logs:
Al hacer un cat del fichero el contenido será ilegible ya que está cifrado:
Para descifrar el fichero utilizaremos la opción -d:
gpg -d syslog-20180530.gpg
Se nos pedirá el passphrase y ya podremos ver su contenido.