Today, I revised my logwatch configuration and I decided to use an external parser for the SELinux audits. Logwatch includes such a parser (/usr/share/logwatch/scripts/services/audit script), but i tend to prefer seaudit-report, part of the setools-gui package in Fedora. Don’t let the package name confuse you, seaudit-report is a CLI tool.
There are two ways that this integration can be achieved:
- completely override the default audit script by placing one with the same name in
/etc/logwatch/scripts/services/ - create a new custom service for
seaudit-report
I decided to follow the second way. The setools source package contains the necessary files for logwatch, but they needed some customization to reflect my setup. I use the auditd service to collect SELinux related messages, which are saved in /var/log/audit/audit.log.
The file that contains information about which log files should logwatch analyze is named seaudit-report-group.conf and needs to be put in the /etc/logwatch/conf/logfiles/ directory. As I mentioned previously, the logged audits are written in /var/log/audit/audit.log, but /var/log/messages still keeps some info about SELinux, eg policy reloads etc. So, the logwatch log-group configuration file should contain the following lines:
LogFile = audit/audit.log Archive = audit/audit.log.*.gz LogFile = messages Archive = messages.*.gz
The logwatch service configuration file, seaudit-report-service.conf, should be put in /etc/logwatch/conf/services/ and should contain the following:
Title = "SELinux Audit" LogFile = seaudit-report-group
The seaudit-report utility, by default, does not accept input from stdin, so a wrapper script must be used in order to launch this utility with the proper options. The setools source package contains such a script, seaudit-report-service, which should be put in the /etc/logwatch/scripts/services/ directory. The following code is the same as the original script, apart from the line that sets seaudit-report‘s location. In some systems this utility is located in /usr/bin/ and in others, like mine, in /usr/sbin/ etc:
#!/bin/sh
SEAUDITREPORT=$(which seaudit-report)
OPTS="--stdin --malformed"
echo "Date Range: $LOGWATCH_DATE_RANGE"
echo "Detail Level: $LOGWATCH_DETAIL_LEVEL"
echo "Temp Dir: $LOGWATCH_TEMP_DIR"
echo "Debug Level: $LOGWATCH_DEBUG"
${SEAUDITREPORT} ${OPTS}
if [ $? -ne 0 ]; then
RC=$?
echo >&2 "Failed while executing seaudit-report.\n"
exit $RC
fi
exit 0
It is also needed to set the executable bit on this script:
# chmod u+x /etc/logwatch/scripts/services/seaudit-report-service
By issuing the following command, the SELinux report should be printed to stdout:
# logwatch --service seaudit-report-service --range all --print
Finally, it is possible to disable logwatch’s default SELinux analysis service (audit) by adding the following line in /etc/logwatch/conf/logwatch.conf:
Service = "-audit"
From now on, the logwatch report should contain, among others, only the report produced by seaudit-report.
How to integrate seaudit-report in logwatch by George Notaras is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Copyright © 2006 - Some Rights Reserved