Raspberry Piのlogrotateがエラーを吐き出すようになってしばらく経った。最初は1日数行だったものが、とうとう10行以上ものエラーに…
エラーの状況
/etc/cron.daily/logrotate: error: skipping "/var/log/aptitude" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/dpkg.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/alternatives.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/syslog" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/mail.info" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/mail.warn" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/mail.err" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/mail.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/daemon.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/kern.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/auth.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/user.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/lpr.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/cron.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/debug" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/messages" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/wtmp" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. error: skipping "/var/log/btmp" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
ログファイルの権限がおかしいとか何とか。/var/log
内のファイルの権限を確認してみると、ログファイルの保有者が rootではなくadmやutmpというユーザになっているところが怪しそう(着色部)。
# ls -la /var/log 合計 120 drwxrwxrwt 11 root root 560 11月 9 06:25 . drwxr-xr-x 16 root root 4096 5月 15 2013 .. drwxr-xr-x 2 root root 60 11月 9 07:34 ConsoleKit drwxr-x--- 2 root adm 120 11月 9 00:31 apache2 drwxr-xr-x 2 root root 40 11月 9 00:31 apt -rw-r----- 1 root adm 6088 11月 9 07:40 auth.log -rw-r--r-- 1 root utmp 0 11月 9 00:31 btmp -rw-r----- 1 root adm 4062 11月 9 07:34 daemon.log -rw-r----- 1 root adm 1009 11月 9 00:31 debug -rw-r--r-- 1 root adm 12079 11月 9 00:31 dmesg drwxr-xr-x 2 root root 40 11月 9 00:31 fsck -rw-r----- 1 root adm 19003 11月 9 00:31 kern.log -rw-r--r-- 1 root utmp 292292 11月 9 07:34 lastlog -rw-r----- 1 root adm 0 11月 9 00:31 lpr.log -rw-r----- 1 root adm 0 11月 9 00:31 mail.err -rw-r----- 1 root adm 108 11月 9 00:31 mail.info -rw-r----- 1 root adm 108 11月 9 00:31 mail.log -rw-r----- 1 root adm 0 11月 9 00:31 mail.warn -rw-r----- 1 root adm 18987 11月 9 06:25 messages drwxr-xr-x 2 root adm 40 11月 9 00:31 mrtg drwxr-xr-x 2 root root 100 11月 9 00:31 news drwxr-xr-x 2 ntp ntp 40 11月 9 00:31 ntpstats drwxr-xr-x 3 root adm 100 11月 9 00:31 samba drwxr-xr-x 2 proxy proxy 40 11月 9 00:31 squid3 -rw-r----- 1 root adm 731 11月 9 07:34 syslog -rw-r----- 1 root adm 23984 11月 9 00:31 syslog.1 -rw-r----- 1 root adm 0 11月 9 00:31 user.log -rw-r--r-- 1 root utmp 6912 11月 9 07:34 wtmp
エラーの修正
logrotateの設定ファイルに、実行時の権限変更設定を追加すれば良いと、Google検索で調べた限りではわかったため、次のように設定ファイルを修正
/etc/logrotate.conf
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp su root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp su root utmp rotate 1 } # system-specific logs may be configured here
/etc/logrotate.d/apache2
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
su root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
/etc/logrotate.d/aptitude
/var/log/aptitude {
rotate 6
monthly
compress
missingok
notifempty
su root adm
}
/etc/logrotate.d/dpkg
/var/log/dpkg.log { monthly rotate 12 compress delaycompress missingok notifempty create 644 root root su root utmp } /var/log/alternatives.log { monthly rotate 12 compress delaycompress missingok notifempty create 644 root root su root utmp }
/etc/logrotate.d/rsyslog
/var/log/syslog { rotate 7 daily missingok notifempty delaycompress compress su root adm postrotate invoke-rc.d rsyslog rotate > /dev/null endscript } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress su root adm sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
この設定でエラーは出なくなったが、本当にこれで良いのかどうか分からない。
logrotateのmanファイルでの説明は
LOGROTATE(8) System Administrator's Manual LOGROTATE(8) NAME logrotate ‐ rotates, compresses, and mails system logs SYNOPSIS logrotate [-dv] [-f|--force] [-s|--state file] config_file .. 〜 中略 〜 su user group Rotate log files set under this user and group instead of using default user/group (usually root). user specifies the user name used for rotation and group specifies the group used for rota‐ tion. If the user/group you specify here does not have suffi‐ cient privilege to make files with the ownership you've speci‐ fied in a create instruction, it will cause an error.