一开始是用chown / chmod进行修改的,但是一天后就恢复原来 的样子


发现是logrotate这个程序每天对日志进行转储的时候会修改掉,查看配置文件

/var/log/messages {
    compress
    dateext
    maxage 365
    rotate 99
    missingok
    notifempty
    size +4096k
    create 640 root root
    sharedscripts
    postrotate
        /etc/init.d/syslog reload > /dev/null
    endscript
}

发现有个 create 640 root root 语句很像。就修改为create 770 root logging。


然后用命令logrotate -vf /etc/logrotate.d/syslog 进行测试的时候发现还是原来的样子。

后来把

    sharedscripts
    postrotate
        /etc/init.d/syslog reload > /dev/null
    endscript

这几名注释掉就可以了,断定是syslog 程序重新加载配置文件做的修改,查看相关进程

image.png


可以看到/sbin/syslog-ng这个程序,说明SUSE下是使用这个程序来进行日志管理的。

找到它的配置文件/etc/syslog-ng/syslog-ng.conf 进行分析。里面有这么一句:

#
# Global options.
#
options { long_hostnames(off); sync(0); perm(0640); group(1001); stats(3600); };

查看到可以设置相关的选项。详细说明如下:

OPTIONS
       You can specify several global options to syslog-ng in the options statement:
       options { opt1; opt2; ... };
       Where an option can be any of the following:
       chain_hostnames(yes|no)
              Enable or disable the chained hostname format.
       long_hostnames(yes|no)
              This is a deprecated alias for chain_hostnames().
       keep_hostname(yes|no)
              Specifies  whether to trust hostname as it is included in the log message. If keep_hostname is yes and there is a hostname
              in the message it is not touched, otherwise it is always rewritten based on the information where the message was received
              from.
       use_dns(yes|no)
              Enable or disable DNS usage.  syslog-ng blocks on DNS queries, so enabling DNS may lead to a Denial of Service attack.  To
              prevent DoS, protect your syslog-ng network endpoint with firewall rules, and make sure that all hosts, which may  get  to
              syslog-ng is resolvable.
       use_fqdn(yes|no)
              Add Fully Qualified Domain Name instead of short hostname.
       check_hostname(yes|no)
              Enable or disable whether the hostname contains valid characters.
       bad_hostname(regex)
              A regexp which matches hostnames which should not be taken as such.
       dns_cache(yes|no)
              Enable or disable DNS cache usage.
       dns_cache_expire(n)
              Number of seconds while a successful lookup is cached.
       dns_cache_expire_failed(n)
              Number of seconds while a failed lookup is cached.
       dns_cache_size(n)
              Number of hostnames in the DNS cache.
       create_dirs(yes|no)
              Enable or disable directory creation for destination files.
       dir_owner(uid)
              User id.
       dir_group(gid)
              Group id.
       dir_perm(perm)
              Permission value (octal mask).
       owner(uid)
              User id for created files.
       group(gid)
              Group id for created files.
       perm(perm)
              Permission value for created files.
       gc_busy_threshold(n)
              Sets  the threshold value for the garbage collector, when syslog-ng is busy.  GC phase starts when the number of allocated
              objects reach this number.  Default: 3000.
       gc_idle_threshold(n)
              Sets the threshold value for the garbage collector, when syslog-ng is idle.  GC phase starts when the number of  allocated
              objects reach this number.  Default: 100.
       log_fifo_size(n)
              The number of lines fitting to the output queue. An output queue is present for all destinations.
       log_msg_size(n)
              Maximum length of message in bytes (NOTE: some syslogd implementations have a fixed limit of 1024 characters).
       mark(n)
              The number of seconds between two MARK lines.  NOTE: not implemented yet.
       stats(n)
              The number of seconds between two STATS messages.
       sync(n)
              The number of lines buffered before written to file (can be overridden locally).
       time_reap(n)
              The time to wait before an idle destination file is closed.
       time_reopen(n)
              The time to wait before a died connection is reestablished.
       use_time_recvd(yes|no)
              This  variable is used only for macro expansion where the meaning of the time specific macros depend on this setting, how-
              ever as there are separate macros for referring to the received timestamp (R_ macros) and the log message timestamp  (S_),
              so using this value is not recommended.

可以看到里面的uid/gid/perm这三个选项正是我们要的。




总结:

1、修改配置文件/etc/syslog-ng/syslog-ng.conf

options { long_hostnames(off); sync(0); perm(0640); stats(3600); };

修改为

options { long_hostnames(off); sync(0); perm(0640); group(1001); stats(3600); };

说明:在groupid为组logging:!:1001: 对应的ID号


2、修改配置文件 /etc/logrotate.d/syslog

/var/log/messages 中的行

create 640 root root

修改为

create 640 root sa_logging


3、重启后结果如下图所示:

image.png