CentOS 6.4 logrotate显示错误权限被拒绝

时间:2013-11-30 10:36:50

标签: linux centos logrotate

我从tomcat官方网站上的CentOS 6.4操作系统下载了一个tomcat7 tar.gz文件(Binary Distributions tar.gz,而不是yum)。我想使用logrotate来滚动我的tomcat日志。因此,我在以下内容中创建了文件/etc/logrotate.d/tomcat7

/usr/tomcat7/logs/catalina.out {
    copytruncate
    dateext
    compress
    missingok
    notifempty
    rotate 10
    size 50M
    postrotate
            find /usr/tomcat7/logs/ \( -name "*.log" -o -name "*.txt" \) -mtime +10 -delete
    endscript
}

我使用此命令logrotate /etc/logrotate.conf测试了该角色。一切都很好。

但是第二天我发现它不会自动滚动tomcat日志。

所以我必须修改文件/etc/cron.daily/logrotate进行调试。我将行/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1更改为/usr/sbin/logrotate /etc/logrotate.conf >> /var/log/logrotate.log 2>&1

最后,我发现/var/log/logrotate.log中的结果为error: error opening /usr/tomcat7/logs/catalina.out: Permission denied

奇怪的是,只有tomcat日志才会被拒绝。所有其他日志,但tomcat登录。

许可被拒绝了?!为什么?为什么root权限被拒绝了?

ll -d /usr/tomcat7/logs
drwxr-xr-x. 2 root root 12288 11 30 03:14 /usr/tomcat7/logs/

ll /usr/tomcat7/logs
total 135100
-rw-r--r--. 1 root root      2241 11 29 09:07 catalina.2013-11-29.log
-rw-r--r--. 1 root root     26063 11 30 03:14 catalina.2013-11-30.log
-rw-r--r--. 1 root root 137950120 11 30 18:43 catalina.out
-rw-r--r--. 1 root root         0 11 29 09:07 host-manager.2013-11-29.log
-rw-r--r--. 1 root root         0 11 30 03:14 host-manager.2013-11-30.log
-rw-r--r--. 1 root root       477 11 29 09:07 localhost.2013-11-29.log
-rw-r--r--. 1 root root       725 11 30 03:14 localhost.2013-11-30.log
-rw-r--r--. 1 root root    284261 11 29 21:56 localhost_access_log.2013-11-29.txt
-rw-r--r--. 1 root root     45611 11 30 18:42 localhost_access_log.2013-11-30.txt
-rw-r--r--. 1 root root         0 11 29 09:07 manager.2013-11-29.log
-rw-r--r--. 1 root root         0 11 30 03:14 manager.2013-11-30.log

@ user3069508

非常感谢!我发现文件/var/log/audit/audit.log存在。然后我用关键字logrotate搜索文件,我发现错误如下:

  

type = AVC msg = audit(1386185162.298:210505):avc:拒绝{write} for pid = 740 comm =“logrotate”name =“catalina.out”dev = sda5 ino = 48235357 scontext = system_u:system_r:logrotate_t :s0-s0:c0.c1023 tcontext = unconfined_u:object_r:usr_t:s0 tclass = file   type = SYSCALL msg = audit(1386185162.298:210505):arch = c000003e syscall = 2 success = no exit = -13 a0 = 1d33440 a1 = 2 a2 = 7fffff6730cf a3 = 746165726373662f items = 0 ppid = 737 pid = 740 auid = 0 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty =(none)ses = 94 comm =“logrotate”exe =“/ usr / sbin / logrotate”subj = system_u: system_r:logrotate_t:s0-s0:c0.c1023 key =(null)

但我不会在selinux发号施令。你能帮我解决一下这个问题吗?

2 个答案:

答案 0 :(得分:0)

selinux可能会阻止Tomcat日志文件或logrotate。

SElinux日志文件位置:

/var/log/avc.log
/var/log/audit/audit.log
/var/log/audit.log

答案 1 :(得分:0)

不要盲目地禁用SELinux, 您可以使用restorecon命令恢复原始安全上下文:

# restorecon -v /var/lib/logrotate.status
restorecon reset /var/lib/logrotate.status context system_u:object_r:init_var_lib_t:s0->system_u:object_r:logrotate_var_lib_t:s0