使用 anacron 运行 logrotate 时权限被拒绝

使用 anacron 运行 logrotate 时权限被拒绝

我试图找出导致anacron向我发送以下错误消息的原因:

/etc/cron.daily/logrotate:

/var/log/mariadb/mariadb.log-20140710.gz: Permission denied
error: error running last action script for /var/log/mariadb/*.log

这些是相关配置:

# /etc/cron.d
01 * * * * root run-parts /etc/cron.hourly
------------------------------------------
# /etc/cron.hourly/0anacron
...
/usr/sbin/anacron -s
------------------------------------------
# /etc/anacrontab
...
1   5   cron.daily      nice run-parts /etc/cron.daily
------------------------------------------
# /etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf
...
------------------------------------------
# /etc/logrotate.conf
...
include /etc/logrotate.d
...

这是有问题的主要配置:

# /etc/logrotate.d/mariadb

/var/log/mariadb/*.log {
  create 640 mysql mysql
  missingok
  sharedscripts
  nodelaycompress

  postrotate
   .....

  lastaction

    dir="/var/log/mariadb/"
    today=$(date -u +%Y%m%d)
    attach1=$(ls -t1 ${dir}mariadb*gz 2>&1 head -1 | grep $today)
    ....

    attachment=""
    totalsize=0
    if [[ $attach1 ]]; then
     attachment+=" -a $attach1"
     totalsize=$((totalsize + $(stat -c %s $attach1)))
    fi
    ....
  endscript
}

当我在命令行上测试上述内容时# logrotate -f /etc/logrotate.conf,没有错误。但是当 anacron 运行它时,它会出现权限被拒绝的错误,如上所示。我猜测该错误是在运行stat命令时生成的。

我对相关文件有以下权限设置

-rw-r-----. mysql mysql system_u:object_r:mysqld_log_t:s0 mariadb.log-20140711.gz

SELinux 上下文对我来说看起来很好,并且我在日志日志中没有看到任何 avc 错误,因此这不应该是由于 SELinux 造成的。另外, from cron.d,run-parts是以 root 用户身份执行的,所以不应该存在权限问题。

我读过这个问题其中建议是要做的strace。但我没有strace,也不被允许安装。有谁可以告诉我是什么导致了权限错误?

答案1

刚刚用蛤蜊经历了这个。确保运行 logrotate 的用户有权写入 /var/log/mariadb。

尝试在配置指令的顶部使用 su root root。

相关内容