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.


