web-dev-qa-db-ja.com

Apacheとlogrotateの構成

先週、ディスク使用率が100%で、Apacheが60GBの巨大なerror.logファイルを作成したことがわかったため、サーバーで問題を見つけました。 LogLevelをemergに変更しましたが、1週間後には再び1.3GBになり、間違いなく大きすぎます。さらに、6MBのaccess.logと167MBのother_vhosts_access.logがあります。だから私は問題がlogrotateが機能しない可能性があることがわかった。実際、ログのgzip圧縮されたファイルは非常に古い日付(2月23日)を持っています。そこで、まずApache2のlogrotateファイルの構成を変更して、ファイルの最大サイズを追加してみました。次のようになりました。

/var/log/Apache2/*.log {
    weekly
    size 500M
    missingok
    rotate 20
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
                if /etc/init.d/Apache2 status > /dev/null ; then \
                    /etc/init.d/Apache2 reload > /dev/null; \
                fi;
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

この後、手動でlogrotateを使用してApacheの特定の構成を実行しようとしました。

logrotate -f /etc/logrotate.d/Apache2

私はこのエラーを受け取りました:

error: skipping "/var/log/Apache2/access.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/Apache2/error.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/Apache2/other_vhosts_access.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.logファイルを作成しますが、古いものとは異なる権限を持ち、既存のerror.logを圧縮しないことです。 Apacheログディレクトリを見ると、次のようになります。

-rwxrwxrwx  1 root           adm            6.3M Oct 21 10:54 access.log
-rwxrwxrwx  1 root           adm             22K Feb 18  2014 access.log.1
-rwxrwxrwx  1 root           adm            7.0K Feb 16  2014 access.log.2.gz
-rwxrwxrwx  1 root           adm            4.0K Feb  9  2014 access.log.3.gz
-rw-------  1 amministratore amministratore    0 Oct 21 10:32 error.log
-rw-r--r--  1 root           root           1.3G Oct 21 10:57 error.log.1
-rwxrwxrwx  1 root           adm            167M Oct 21 10:57 other_vhosts_access.log
-rwxrwxrwx  1 root           adm            225K Feb 23  2014 other_vhosts_access.log.1
-rwxrwxrwx  1 root           adm             16K Feb 15  2014 other_vhosts_access.log.2.gz
-rwxrwxrwx  1 root           adm            3.2K Feb  8  2014 other_vhosts_access.log.3.gz

それでは、正しい進め方は何ですか?/var/log/Apache2ディレクトリの権限を変更する必要がありますか? (現在は777です)これらのアクセス許可を設定しなかったため、正しい場合は確認しません。または、ローテーションに使用するユーザーをlogrotateに指示する必要がありますか?そしてどうやって?

29
sissy

Webサイトの指示に従って、logrotate構成ファイルを変更し、要求されたsuディレクティブを次のように追加したところ、正しい方法でローテーションしました。

su <user> <group>
30
sissy

su root admを設定ファイルに追加するだけです:

/var/log/Apache2/*.log {
    # …
    su root adm
}
42
mcnesium

Syslogを強制的にローテートしようとすると、「親ディレクトリに安全でないアクセス許可があります」というメッセージが表示されます。
ここに私がそれを解決した方法があります:

cat /etc/logrotate.conf
    ...
    # use the syslog group by default, since this is the owning group
    # of /var/log/syslog.
    su root syslog

vim /etc/logrotate.d/rsyslog
    # Add to top:
    su root syslog

logrotate -f /etc/logrotate.d/rsyslog
    # No errors now, log is rotated.
3
Denis Ryzhkov