如何将/var/log/audit/audit.log移动到另一个分区

新鲜的centos 6.5与更新安装。 由于我们用splunk或logstash捕获了所有的东西,所以我们希望将auditdlogging到一个非永久性的卷中。

目标目录是/ mnt / ephemeral / audit /

# ls -l /var/log lrwxrwxrwx. 1 root root 21 Dec 9 12:11 audit -> /mnt/ephemeral/audit 

有了这个,auditd无法启动,据推测selinux拒绝了。 我假设/ var / log / messages中的日志包含创build新策略所需的avc拒绝。

所以我

 semanage permissive -a auditd_t 

然后再试一次

 Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:93): avc: denied { write } for pid=13174 comm="auditd" name="audit" dev=xvdb ino=147457 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:94): avc: denied { add_name } for pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:95): avc: denied { create } for pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:96): avc: denied { read open } for pid=13174 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:97): avc: denied { getattr } for pid=13174 comm="auditd" path="/mnt/ephemeral0/audit/audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:98): avc: denied { append } for pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file Dec 9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:99): avc: denied { setattr } for pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file 

那么我呢

 grep avc /var/log/messages > /tmp/avc audit2allow -M mypol < /tmp/avc semodule -i mypol.pp restorecon -R -v / 

te文件的内容:

 # cat mypol.te module mypol 1.0; require { type var_t; type auditd_t; class dir { write add_name }; class file { getattr setattr read create open append }; } #============= auditd_t ============== #!!!! The source type 'auditd_t' can write to a 'dir' of the following types: # var_run_t, auditd_var_run_t, file_t, auditd_log_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t allow auditd_t var_t:dir { write add_name }; allow auditd_t var_t:file { getattr setattr read create open append }; 

但审计拒绝启动。 诚然,我对selinux软弱,请不要火!

试过Michaels的build议,我看到/ var / log / messages

 Dec 10 11:42:52 myhost kernel: type=1400 audit(1418211771.996:29): avc: denied { read } for pid=1494 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir Dec 10 11:42:52 myhost auditd: Could not open dir /mnt/ephemeral/audit (Permission denied) 

回到audit2allow,我试了一下

 # grep avc /var/log/messages |tail -n1 | audit2allow -w Dec 10 12:03:09 euw1-infradev01-sonar-01 kernel: type=1400 audit(1418212989.424:48): avc: denied { read } for pid=1928 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. # grep avc /var/log/messages |tail -n1 | audit2allow -M mypol ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i mypol.pp # cat mypol.te module mypol 1.0; require { type var_log_t; type auditd_t; class dir read; } #============= auditd_t ============== allow auditd_t var_log_t:dir read; 

宾果希望:

 # setenforce 1 # service auditd start Starting auditd: [ OK ] 

最后一点,这是持续在重新启动? 我会发现的。

SELinux拒绝auditd对/mnt/ephemeral/audit执行任何操作,因为它没有一个允许的types; 相反,它似乎有一个通用的types。

你需要告诉SELinux给这个目录和其中的文件的上下文。 理想情况下,我们将复制适用于/var/log/audit的现有上下文并重用该上下文。

所以当我们查看/etc/selinux/targeted/contexts/files/file_contexts我们发现适用的上下文是:

 /var/log/audit(/.*)? system_u:object_r:auditd_log_t:s0 

这很容易适应。 运行命令:

 semanage fcontext --add --type auditd_log_t "/mnt/ephemeral/audit(/.*)?" 

然后修复现有的文件上下文:

 restorecon -r -v /mnt/ephemeral/audit 

最后,重新启动auditd。

我不保证下一次启动会发生什么。 你将需要testing这个,看看什么时候rest。 🙂

我认为它无法启动,因为日志指向一个符号链接。 您可以在/etc/audit/auditd.conf中定义日志文件位置。 从auditd.conf 手册页 :

log_file该关键字指定将存储审计logging的日志文件的完整path名。 它必须是一个常规文件。