初识Linux(十五)------ 认识与分析登录文件

  当 Linux 系统出现不明原因的问题时,查阅一下登录文件才能够知道系统出了什么问题了,所以说, 了解登录文件是很重要的事情。登录文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么问题等信息, 这些信息也包括使用者识别数据、系统故障排除须知等信息。如果能够善用这些登录文件信息的话,系统出现错误时, 可以在第一时间发现,而且也能够从中找到解决的方案,不至于昏头转向。 此外,登录文件所记录的信息量是非常大的,要人眼分析实在很困难。此时利用 shell script 或者是其他软件提供的分析工具来处理复杂的登录文件,可以帮助很多。

1. 登录文件

  登录文件记录了系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。

1.1 CentOS 7 登录文件简易说明

  登录文件的权限通常是设置为仅有 root 能够读取。

登录文件的重要性:

  • 解决系统方面的错误
  • 解决网络服务的问题
  • 过往事件记录

Linux 常见的登录文件文件名:

  • /var/log/boot.log

  开机的时候系统核心会去监测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在 /var/log/boot.log ,不过这个文件只会保存这次开机启动的信息,之前开机的信息并不会被保留下来。

  • /var/log/cron

  crontab 调度有没有实际被进行? 进行过程有没有发生错误? /etc/crontab 编写是否正确?在这个登录文件内查询。

  • /var/log/dmesg

  记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个文件中。

  • /var/log/lastlog

  可以记录系统上面所有的帐号最近一次登陆系统时的相关信息,lastlog 指令就是利用这个文件的记录信息来显示的。

  • /var/log/maillog 或 /var/log/mail/*

  记录邮件的往来信息,其实主要是记录 postfix (SMTP 协定提供者) 与 dovecot (POP3 协定提供者) 所产生的信息。SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。 postfix 与 dovecot 则分别是两套达成通讯协定的软件。

  • /var/log/messages

  几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中

  • /var/log/secure

  基本上,只要牵涉到“需要输入帐号密码”的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中。 包括系统的 login 程序、图形接口登陆所使用的 gdm 程序、 su, sudo 等程序、还有网络连线的 ssh, telnet 等程序, 登陆信息都会被记载在这里。

  • /var/log/wtmp, /var/log/faillog

  这两个文件可以记录正确登陆系统者的帐号信息 (wtmp) 与错误登陆时所使用的帐号信息 (faillog),last 指令就是读取 wtmp 来显示的, 这对于追踪一般帐号者的使用行为很有帮助。

  • /var/log/httpd/*, /var/log/samba/*

  不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项信息。

登录文件所需相关服务 (daemon) 与程序:

  这些登录文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的登录文件与相关格式, 例如 WWW 软件 apache 就是这样处理的。另一种则是由 Linux distribution 提供的登录文件管理服务来统一管理。 你只要将信息丢给这个服务后,他就会自己分门别类的将各种信息放置到相关的登录文件去,CentOS 提供 rsyslog.service 这个服务来统一管理登录文件。

  可以通过 logrotate (登录文件轮替) 来自动化处理登录文件容量与更新的问题。logrotate 将旧的登录文件更改名称,然后创建一个空的登录文件,新的登录文件将重新开始记录,然后旧的登录文件在一段时间后自动删除,这样就可以达到将登录文件“轮转”。

  总结,针对登录文件所需的功能,需要的服务与程序有:

  • systemd-journald.service:最主要的信息接收者,由 systemd 提供的;
  • rsyslog.service:主要登录系统与网络等服务的信息;
  • logrotate:进行登录文件的轮替功能。

  CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志管理功能。他使用的是 systemd-journald.service 这个服务来支持的。基本上,系统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的信息, 就会将该信息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个信息发送给 rsyslog.service 作进一步的记载。

  systemd-journald.service 的记录主要都放置于内存中,因此在存取方面性能比较好~我们也能够通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的登录文件。这有个好处就是登录文件可以随着个别服务查阅,在单一服务的处理上面,要比到 /var/log/messages 去大海捞针来的简易很多。不过,因为 system-journald.service 里面的很多观念还是沿用 rsyslog.service 相关的信息,所以,还是先从 rsyslog.service 先谈起, 谈完之后再以 journalctl 进一步了解 systemd 是怎么去记录登录文件日志功能的。

1.2 登录文件内容的一般格式

  一般来说,每条信息均会记录下面的几个重要数据:

  • 事件发生的日期与时间;
  • 发生此事件的主机名称;
  • 启动此事件的服务名称 (如 systemd, CROND 等) 或指令与函数名称 (如 su, login..);
  • 该信息的实际数据内容。

  这些信息的“详细度”是可以修改的。以/var/log/secure 为例:

[root@study ~]# cat /var/log/secure
Aug 17 18:38:06 study login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Aug 17 18:38:06 study login: ROOT LOGIN ON tty1
Aug 17 18:38:19 study login: pam_unix(login:session): session closed for user root
Aug 18 23:45:17 study sshd[18913]: Accepted password for dmtsai from 192.168.1.200 port 41524 ssh2
Aug 18 23:45:17 study sshd[18913]: pam_unix(sshd:session): session opened for user dmtsai by (uid=0)
Aug 18 23:50:25 study sudo: dmtsai : TTY=pts/0 ; PWD=/home/dmtsai ; USER=root ; COMMAND=/bin/su -
Aug 18 23:50:25 study su: pam_unix(su-l:session): session opened for user root by dmtsai(uid=0)
|--日期/时间---|--H--|-服务与相关函数-|-----------信息说明------>

  拿第一笔数据 (共两行) 来说明好了,该数据是说:“在 08/17 的 18:38 左右,在名为 study 的这部主机系统上,由 login 这个程序产生的信息,内容显示 root 在 tty1 登陆,而相关的权限给予是通过 pam_unix 模块处理的。

  登录文件可以做成登录文件服务器,可以收集来自其他服务器的登录文件数据,因此第二个字段要说明该信息来自哪一部主机。

2. rsyslog.service :记录登录文件的服务

  上面提到说 Linux 的登录文件主要是由 rsyslog.service 在负责,可以检查一下你的 Linux 是否有启动 rsyslog ,并且是否有设置开机时自启动。

[root@study ~]# ps aux | grep rsyslog
USER  PID %CPU %MEM    VSZ   RSS TTY  STAT START  TIME COMMAND
root  750  0.0  0.1 208012  4732 ?    Ssl  Aug17  0:00 /usr/sbin/rsyslogd -n
# 确实有启动,daemon 可执行文件名为 rsyslogd

[root@study ~]# systemctl status rsyslog.service
rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled)
   Active: active (running) since Mon 2015-08-17 18:37:58 CST; 2 days ago
 Main PID: 750 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─750 /usr/sbin/rsyslogd -n

2.1 rsyslog.service 的配置文件:/etc/rsyslog.conf

  syslogd 可以负责主机产生的各个信息的登录,而这些信息本身是有等级之分的, 而且,这些数据最终要传送到哪个文件去是可以修改的,所以每个 Linux distributions 放置的登录文件文件名可能会有所差异。

  基本上, rsyslogd 针对各种服务与信息记录在某些文件的配置文件 /etc/rsyslog.conf 中, 这个文件规定了(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(设备或文件)” ,所以设置的语法会是这样:

服务名称[.=!]信息等级        记录信息的文件名或设备或主机


# 下面以 mail 这个服务产生的 info 等级为例:
mail.info            /var/log/maillog_info
# 这一行说明:mail 服务产生的大于等于 info 等级的信息,都记录到 
# /var/log/maillog_info 文件中的意思。

  对上面的数据进行简单说明:


服务名称

  rsyslogd 主要还是通过 Linux 核心提供的 syslog 相关规范来设置数据的分类,Linux 的 syslog 本身有规范一些服务信息, 可以通过这些服务来储存系统的信息。Linux 核心的 syslog 认识的服务类型主要有下面这些: (可使用 man 3 syslog 查询到相关的信息,或查询 syslog.h 这个文件来了解)

  上面谈到的都是 Linux 核心的 syslog 函数自行制订的服务名称,软件开发商可以通过调用上述的服务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时,都会主动调用 syslog 内的 mail 服务名称 (LOG_MAIL)。所以上述三个软件 (sendmail, postfix, dovecot) 产生的信息在 syslog 看起来,就会“是 mail ”类型的服务了。

  另外,每种服务所产生的数据量差异较大,为了对登录文件分类管理,将不同的信息放置到不同的文件当中,就需要 /etc/rsyslog.conf 的规范。


信息等级

  Linux 核心的 syslog 将信息分为七个等级,根据 syslog.h 的定义,信息名称与数值的对应如下:

  在信息等级之前还有 [.=!] 的链接符号,代表的意思如下:

  • . :代表“比后面还要严重的等级 (含该等级) 都被记录下来”的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息等级比 info 严重(含 info 本身)时,就会被记录下来。
  • .=:代表所需要的等级就是后面接的等级, 其他的不要。
  • .!:代表不等于, 亦即是除了该等级外的其他等级都记录。

信息记录的文件名或设备或主机

  记录的文件可以输出到设备,例如打印机之类的,也可以记录到不同的主机。下面就是一些常见的放置处:

  • 文件的绝对路径:通常就是放在 /var/log 里面的文件;
  • 打印机或其他:例如 /dev/lp0 这个打印机设备;
  • 使用者名称:显示给使用者;
  • 远端主机
  • *:代表“目前在线上的所有人”,类似 wall 这个指令的意义。

服务、daemon 与函数名称


CentOS 7.x 默认的 rsyslog.conf 内容

[root@study ~]# vim /etc/rsyslog.conf
 1 #kern.*                                              /dev/console
 2 *.info;mail.none;authpriv.none;cron.none             /var/log/messages
 3 authpriv.*                                           /var/log/secure
 4 mail.*                                              -/var/log/maillog
 5 cron.*                                               /var/log/cron
 6 *.emerg                                              :omusrmsg:*
 7 uucp,news.crit                                       /var/log/spooler
 8 local7.*                                             /var/log/boot.log

上面总共仅有 8 行设置值,每一行的意义是这样的:

  1. #kern.*:只要是核心产生的信息,全部都送到 console(终端机) 去。console 通常是由外部设备连接到系统而来, 举例来说,很多封闭型主机 (没有键盘、屏幕的系统) 可以通过连接 RS232 连接口将讯息传输到外部的系统中, 例如以笔记本电脑连接到封闭主机的 RS232 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的屏幕观察系统时, 可以通过这个项目来连接取得核心的讯息。
  2. *.info;mail.none;authpriv.none;cron.none:由于 mail, authpriv, cron 等类别产生的信息较多, 且已经写入下面的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其他信息都写入 /var/log/messages 中。
  3. authpriv.*:认证方面的信息均写入 /var/log/secure 文件;
  4. mail.*:邮件方面的讯息则均写入 /var/log/maillog 文件;
  5. cron.*:例行性工作调度均写入 /var/log/cron 文件;
  6. *.emerg:当产生最严重的错误等级时,将该等级的信息以 wall 的方式广播给所有在系统登陆的帐号得知, 要这么做的原因是希望在线的使用者能够赶紧通知系统管理员来处理这么可怕的错误问题。
  7. uucp,news.crit:uucp 是早期 Unix-like 系统进行数据传递的通讯协定,后来常用在新闻群组的用途中。 news 则是新闻群组。当新闻群组方面的信息有严重错误时就写入 /var/log/spooler 文件中;
  8. local7.*:将本机开机时应该显示到屏幕的信息写入到 /var/log/boot.log 文件中;

自行增加登录文件文件功能

  如果想要让“所有的信息”都额外写入到 /var/log/admin.log 这个文件时, 可以这么做:

# 1. 设置好所要创建的文件设置
[root@study ~]# vim /etc/rsyslog.conf
# Add by VBird 2015/08/19       <==最好加入一些说明
*.info      /var/log/admin.log  <==有用的是这行啦!

# 2. 重新启动 rsyslogd 
[root@study ~]# systemctl restart rsyslog.service
[root@study ~]# ll /var/log/admin.log
-rw-r--r--. 1 root root 325 Aug 20 00:54 /var/log/admin.log

2.2 登录文件的安全性设置

  如果有黑客侵入,为了不留痕迹,很可能会删除日志。可以通过一个隐藏的属性来设置登录文件,成为只可增加数据,但是不能被删除的状态,那么或许可以达到些许的保护。不过,如果你的 root 帐号被破解了,那么下面的设置还是无法保护。

  值得注意的是,rsyslogd的登录文件被编辑过就无法继续记录信息了,所以在使用vim查看时,不能使用 :wq 来离开vim环境,也可以重启 rsyslog.service 来解决。

  通过设置文件的隐藏属性,就可达到要求。

[root@study ~]# chattr +a /var/log/admin.log
[root@study ~]# lsattr /var/log/admin.log
-----a---------- /var/log/admin.log

2.3 登录文件的服务器设置

3. 登录文件的轮替(logrotate)

  logrotate 程序挂在 cron 下面进行,/etc/cron.daily/logrotate 就是记录了每天要进行的登录文件轮替的行为。

3.1 logrotate 的配置文件

  logrotate 的参数配置文件为:

  • /etc/logrotate.conf
  • /etc/logrotate.d/

  其中,logrotate.conf 为主要的参数文件,而 logrotate.d 是一个目录, 该目录里面的所有文件都会被主动的读入 /etc/logrotate.conf 当中来进行。另外,在 /etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部设置,则以 /etc/logrotate.conf 这个文件的规定来指定为默认值。

  logrotate 的主要功能就是将旧的登录文件移动成旧文件, 并且重新创建一个新的空的文件来记录,他的执行结果有点类似下面的图示: 

  不过目前随着磁盘空间容量变大,最近的登录文件轮替后的文件名会加上日期参数,保留在系统上。

  查看下 logrotate.conf 内容:

[root@study ~]# vim /etc/logrotate.conf
# 下面的设置是 "logrotate 的默认设置值" ,如果个别的文件设置了其他的参数,
# 则将以个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值!

weekly    <==默认每个星期对登录文件进行一次 rotate 的工作。
rotate 4  <==保留几个登录文件呢?默认是保留四个。
create    <==由于登录文件被更名,因此创建一个新的来继续储存之意。
dateext   <==这个设置值可以让被轮替的文件名称加上日期作为文件名。
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动

include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行 rotate 的工作。

/var/log/wtmp {       <==仅针对 /var/log/wtmp 所设置的参数
    monthly           <==每个月一次,取代每周
    create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
    minsize 1M        <==文件大小一定要超过 1M 后才进行 rotate (略过时间参数)
    rotate 1          <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}
# 这个 wtmp 可记录登陆者与系统重新开机时的时间与来源主机及登陆期间的时间。
# 由于具有 minsize 的参数,因此不见得每个月一定会进行一次,要看文件大小。
# 由于仅保留一个登录文件而已,不满意的话可以将他改成 rotate 5 。

  由这个文件的设置我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,所以,其实我们可以将所有的数据都给他写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了, 每个服务都要去修改 /etc/logrotate.conf 的设置不太合理。所以,如果独立出来一个目录,那么每个以 RPM 打包方式所创建的服务的登录文件轮替设置, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中即可。

  logrotate.conf 的设置语法是:

登录文件的绝对路径文件名 ... {
    个别的参数设置值,如 monthly, compress 等等
}

  以 /etc/logrotate.d/syslog 这个轮替 rsyslog.service 服务的文件,来看看该如何设置他的 rotate 。


[root@study ~]# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

  在上面的语法当中,我们知道正确的 logrotate 的写法为:

  • 文件名:被处理的登录文件绝对路径文件名写在前面,可以使用空白字符分隔多个登录文件;
  • 参数:上述文件名进行轮替的参数使用 { } 包括起来;
  • 执行脚本:可调用外部指令来进行额外的命令下达,这个设置需与 sharedscripts .... endscript 设置合用才行。至于可用的环境为:
    1. prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
    2. postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务;
    3. Prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序。

  那么 /etc/logrotate.d/syslog 内设置的 5 个文件的轮替功能就变成了:

  • 该设置只对 /var/log/ 内的 cron, maillog, messages, secure, spooler 有效;
  • 登录文件轮替每周一次、保留四个、且轮替下来的登录文件不进行压缩(未更改默认值);
  • 轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd。

  假设我们有针对 /var/log/messages 这个文件增加 chattr +a 的属性时, 依据 logrotate 的工作原理, /var/log/messages 将会被更名成为 /var/log/messages.1 。但是由于加上这个 +a 的参数,所以更名是不可能成功的。这时可以利用 prerotate 与 postrotate 来进行登录文件轮替前、后所需要作的动作,可以这样修改一下这个文件:

[root@study ~]# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    prerotate
       /usr/bin/chattr -a /var/log/messages
    endscript
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /usr/bin/chattr +a /var/log/messages
    endscript
}

  就是先去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作, 然后执行了轮替之后,再给他加入这个属性。需要留意的是,那个 /bin/kill -HUP ... 的意义,这一行的目的在于将系统的 rsyslogd 重新以其参数文件 (rsyslog.conf) 的数据读入一次,也可以想成是 reload 的意思。由于我们创建了一个新的空记录文件,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误。

  设置完成之后,我们来测试看看这样的设置是否可行呢?给他执行下面的指令:

[root@study ~]# logrotate [-vf] logfile
选项与参数:
-v  :启动显示模式,会显示 logrotate 运行的过程喔!
-f  :不论是否符合配置文件的数据,强制每个登录文件都进行 rotate 的动作!

4. systemd-journald.service

  过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之后,登录文件才会开始记录。所以,核心还得要自己产生一个 klogd 的服务, 才能将系统在开机过程、启动服务的过程中的信息记录下来,然后等 rsyslogd 启动后才传送给它来处理。

  现在有了 systemd 之后,由于是核心唤醒,且是第一支执行的软件,它可以主动调用 systemd-journald 来协助记载登录文件。因此在开机过程中的所有信息,包括启动服务与服务若启动失败的情况等等,都可以直接被记录到 systemd-journald 里头去。

  不过 systemd-journald 由于是使用于内存的登录文件记录方式,因此重新开机过后,开机前的登录文件信息当然就不会被记载了。 为此,还是建议启动 rsyslogd 来协助分类记录。也就是说, systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所以数据到磁盘文件中,方便未来进行查询。

4.1 使用 journalctl 观察登录信息

[root@study ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional
选项与参数:
默认会显示出全部的 log 内容,从旧的输出到最新的信息
-n  :显示最近的几行的意思~找最新的信息相当有用
-r  :反向输出,从最新的输出到最旧的数据
-p  :显示后面所接的讯息重要性排序,请参考前一小节的 rsyslogd 信息
-f  :类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!)
--since --until:设置开始与结束的时间,让在该期间的数据输出而已
_SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已
_COMM=bash :只输出与 bash 有关的信息
_PID=pid   :只输出 PID 号码的信息
_UID=uid   :只输出 UID 为 uid 的信息
SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来调用出正确的数据

4.2 logger 指令的应用

  如果想要让你的数据储存到登录文件当中,就得要使用 logger。这里只使用最简单的本机信息传递,更多的用法就请自行 man logger。

[root@study ~]# logger [-p 服务名称.等级] "信息"
选项与参数:
服务名称.等级 

范例一:指定一下,让 dmtsai 使用 logger 来传送数据到登录文件内
[root@study ~]# logger -p user.info "I will check logger command"
[root@study ~]# journalctl SYSLOG_FACILITY=1 -n 3
-- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 18:03:17 CST. --
Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29710]: starting 0yum-hourly.cron
Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29714]: finished 0yum-hourly.cron
Aug 19 18:03:17 study.centos.vbird dmtsai[29753]: I will check logger command

4.3 保存 journal 的方式

  如果想要保存 journalctl 所读取的登录文件, 那么就得要创建一个 /var/log/journal 的目录,并且处理一下该目录的权限,那么未来重新启动 systemd-journald.service 之后, 日志登录文件就会主动的复制一份到 /var/log/journal 目录下。

# 1. 先处理所需要的目录与相关权限设置
[root@study ~]# mkdir /var/log/journal
[root@study ~]# chown root:systemd-journal /var/log/journal
[root@study ~]# chmod 2775 /var/log/journal

# 2. 重新启动 systemd-journald 并且观察备份的日志数据!
[root@study ~]# systemctl restart systemd-journald.service
[root@study ~]# ll /var/log/journal/
drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a

5. 分析登录文件

5.1 CentOS 默认提供的 logwatch

posted @ 2023-01-13 12:08  莫莫君不恋爱  阅读(79)  评论(0编辑  收藏  举报