Los métodos más robustos parecen ser auditados:
http://blog.ptsecurity.com/2010/11/requirement-10-track-and-monitor-all.html
Auditd básicamente intercepta todas las llamadas al sistema y las compara con su conjunto de reglas. Entonces en su /etc/audit/audit.rules
archivo tendría algo como lo siguiente:
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
# Feel free to add below this line. See auditctl man page
-a always,exit -F euid=0 -F perm=wxa -k ROOT_ACTION
La última regla es la única regla no predeterminada.
El principal inconveniente de este enfoque (y la razón por la que encontré esta pregunta mientras buscaba alternativas) es que los archivos de registro sin procesar son bastante crípticos y solo son útiles después de ejecutar el programa de consulta en el archivo de registro sin procesar: ausearch
Una consulta de ejemplo para esa regla sería:
ausearch -ts today -k ROOT_ACTION -f audit_me | aureport -i -f
Una solución de sentido común probablemente sería crear un cron que consultará sus registros auditados sin procesar y luego los enviará a su solución de registro.