linux日志文件


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

什么是日志文件

回到顶部
『详细而确实的分析以及备份系统的登录文件』是一个系统管理员应该要进行的任务之一。 那么什 么是日志文件呢?简单的说,就是记录系统活动信息的几个文件, 例如:何时、何地 (来源 IP)、何人 (什么服务名称)、做了什么动作 (讯息登录啰)。 换句话说就是:记录系统在什么时候由哪个程序做 了什么样的行为时,发生了何种的事件等等。

CentOS 7 日志文件简易说明

回到顶部
要知道的是,我们的 Linux 主机在背景之下有相当多的 daemons 同时在工作着,这些工作中的程序 总是会显示一些讯息, 这些显示的讯息最终会被记载到登录文件当中啦。也就是说,记录这些系统 的重要讯息就是登录文件的工作啦!

日志文件的重要性

回到顶部
为什么说登录文件很重要,重要到系统管理员需要随时注意他呢?我们可以这么说:
o 解决系统方面的错误:
用 Linux 这么久了,你应该偶而会发现系统可能会出现一些错误,包括硬件捉不到或者是某些系 统服务无法顺利运作的情况。 此时你该如何是好?由于系统会将硬件侦测过程记录在登录文件内, 你只要透过查询登录文件就能够了解系统作了啥事! 并且由第十六章我们也知道 SELinux 与登录 档的关系更加的强烈!所以啰,查询登录文件可以克服一些系统问题啦!
o 解决网络服务的问题:
你可能在做完了某些网络服务的设定后,却一直无法顺利启动该服务,此时该怎办?去庙里面拜 拜抽签吗? 三太子大大可能无法告诉你要怎么处理呢!由于网络服务的各种问题通常都会被写入 特别的日志文件, 其实你只要查询日志文件就会知道出了什么差错,还不需要请示三太子大大啦!举 例来说,如果你无法启动邮件服务器 (postfix), 那么查询一下 /var/log/maillog 通常可以得到不 错的解答!
o 过往事件记录簿:
这个东西相当的重要!例如:你发现 WWW 服务 (httpd 软件) 在某个时刻流量特别大,你想要 了解为什么时, 可以透过日志文件去找出该时段是哪些 IP 在联机与查询的网页数据为何,就能够 知道原因。 此外,万一哪天你的系统被入侵,并且被利用来攻击他人的主机,由于被攻击主机会 记录攻击者,因此你的 IP 就会被对方记录。这个时候你要如何告知对方你的主机是由于被入侵 所导致的问题, 并且协助对方继续往恶意来源追查呢?呵呵!此时日志文件可是相当重要的呢!
Tips
所以我们常说『天助自助者』是真的啦!你可以透过 (1)察看屏幕上面的错误讯息与 (2) 登录文件的错误信息,几乎可以解决大部分的 Linux 问题!

Linux 常见的日志文件档名

回到顶部
登录文件可以帮助我们了解很多系统重要的事件,包括登入者的部分信息,因此登录文件的权限通常 是设定为仅有 root 能够读取而已。 而由于登录文件可以记载系统这么多的详细信息, 所以啦,一个有经验的主机管理员会随时随地查阅一下自己的登录檔, 以随时掌握系统的最新脉动!那么常见 的几个日志文件有哪些呢?一般而言,有下面几个:
/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/*:
不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项讯息!上述的目录内则是个别服务 所制订的日志文件。
常见的日志文件就是这几个,但是不同的 Linux distributions ,通常日志文件的档名不会相同 (除了 /var/log/messages 之外 )。所以说,你还是得要查阅你 Linux 主机上面的登录文件设定数据, 才能 知道你的日志文件主要档名喔!
日志文件所需相关服务 (daemon) 与程序那么这些日志文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的日志文件与 相关格式, 例如 WWW 软件 apache 就是这样处理的。另一种则是由 Linux distribution 提供的登 录档管理服务来统一管理。 你只要将讯息丢给这个服务后,他就会自己分门别类的将各种讯息放置 到相关的日志文件去!CentOS 提供 rsyslog.service 这个服务来统一管理日志文件喔!
不过要注意的是,如果你任凭登录文件持续记录的话,由于系统产生的信息天天都有,那么你的登录 文件的容量将会长大到无法无天~ 如果你的登录文件容量太大时,可能会导致大文件读写效率不佳 的问题 (因为要从磁盘读入内存,越大的文件消耗内存量越多)。 所以啰,你需要对日志文件备份与更 新。那...需要手动处理喔?当然不需要,我们可以透过 logrotate (日志文件轮替) 这玩意儿来自动化处 理登录文件容量与更新的问题喔!
所谓的 logrotate 基本上,就是将旧的日志文件更改名称,然后建立一个空的日志文件,如此一来, 新的 登录文件将重新开始记录,然后只要将旧的日志文件留下一阵子,嗯!那就可以达到将日志文件『轮转』 的目的啦! 此外,如果旧的记录 (大概要保存几个月吧!) 保存了一段时间没有问题,那么就可以 让系统自动的将他砍掉, 免得占掉很多宝贵的硬盘空间说!
总结一下,针对登录文件所需的功能,我们需要的服务与程序有:
systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
rsyslog.service:主要登录系统与网络等服务的讯息;
logrotate:主要在进行登录文件的轮替功能。
由于我们着眼点在于想要了解系统上面软件所产生的各项信息,因此本章主要针对 rsyslog.service 与 logrotate 来介绍。 接着下来我们来谈一谈怎么样规划这两个玩意儿。就由 rsyslog.service 这支程序 先谈起吧!毕竟得先有日志文件,才可以进行 logrotate 呀!您说是吧!

CentOS 7.x 使用 systemd 提供的 journalctl 日志管理

回到顶部
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 是怎么 去记录登录文件日志功能的呦!

日志文件内容的一般格式

回到顶部
一般来说,系统产生的讯息经过记录下来的数据中,每条讯息均会记录底下的几个重要数据:
事件发生的日期与时间;发生此事件的主机名;
启动此事件的服务名称 (如 systemd, CROND 等) 或指令与函式名称 (如 su, login..);
该讯息的实际数据内容。
当然,这些信息的『详细度』是可以修改的,而且,这些信息可以作为系统除错之用呢! 我们拿登 录时一定会记载帐户信息的 /var/log/secure 为例好了:
[root@initroot ~]# 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 peter from 192.168.1.200 port 41524 ssh2
Aug 18 23:45:17 study sshd[18913]: pam_unix(sshd:session): session opened for user peter by (uid=0)
Aug 18 23:50:25 study sudo: peter : TTY=pts/0 ; PWD=/home/peter ; USER=root ; COMMAND=/bin/su -
Aug 18 23:50:25 study su: pam_unix(su-l:session): session opened for user root by peter(uid=0)

|--日期/时间---|--H--|-服务与相关函数-|-----------讯息说明------>
我们拿第一笔数据 (共两行) 来说明好了,该资料是说:『在 08/17 的 18:38 左右,在名为 study 的 这部主机系统上,由 login 这个程序产生的讯息,内容显示 root 在 tty1 登入了,而相关的权限给 予是透过 pam_unix 模块处理的 (共两行数据)。』有够清楚吧!那请您自行翻译一下后面的几条讯 息内容是什么喔!
其实还有很多的信息值得查阅的呢!尤其是 /var/log/messages 的内容。记得一个好的系统管理员, 要 常常去『巡视』日志文件的内容喔!尤其是发生底下几种情况时:
当你觉得系统似乎不太正常时;
某个 daemon 老是无法正常启动时;
某个使用者老是无法登入时;
某个 daemon 执行过程老是不顺畅时;
还有很多啦!反正觉得系统不太正常,就得要查询查询日志文件就是了。
Tips
提供一个常做的检查方式。当我老是无法成功的启动某个服务时,我会在最后一 次启动该服务后,立即检查日志文件, 先 (1)找到现在时间所登录的信息『第一字段』; (2)找到我想要查询的那个服 务『第三字段』
, (3)最后再仔细的查阅第四字段的信息,来藉以找到错误点。
另外,不知道你会不会觉得很奇怪?为什么登录文件就是登录本机的数据啊~那怎么日志文件格式中, 第二个字段项目是『主机名』啊? 这是因为日志文件可以做成日志文件服务器,可以收集来自其他服务 器的登录文件数据喔!所以啰,为了了解到该讯息主要是来自于哪一部主机, 当然得要有第二个字 段项目说明该信息来自哪一部主机名啰!18.2 rsyslog.service :记录登录文件的服务 上一小节提到说 Linux 的日志文件主要是由 rsyslog.service 在负责,那么你的 Linux 是否有启动 rsyslog 呢?而且是否有设定开机时启动呢?呵呵!检查一下先:
[root@initroot ~]# ps aux | grep rsyslog
USER PID %CPU %MEM
root 750
0.0
VSZ
0.1 208012
RSS TTY
4732 ?
STAT START TIME COMMAND
Ssl 0:00 /usr/sbin/rsyslogd -n
Aug17
# 瞧!确实有启动的!daemon 执行档名为 rsyslogd 喔!
[root@initroot ~]# 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
# 也有启动这个服务,也有预设开机时也要启动这个服务!OK!正常没问题!!
看到 rsyslog.service 这个服务名称了吧?所以知道他已经在系统中工作啰!好了,既然本章主要是讲 日志文件的服务, 那么 rsyslog.service 的配置文件在哪里?如何设定?如果你的 Linux 主机想要当作 整个区网的日志文件服务器时,又该如何设定? 底下就让我们来玩玩这玩意!

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

回到顶部
什么?日志文件还有配置文件?喔!不是啦~是 rsyslogd 这个 daemon 的配置文件啦! 我们现在知道 rsyslogd 可以负责主机产生的各个信息的登录,而这些信息本身是有『严重等级』之分的, 而且, 这些资料最终要传送到哪个文件去是可以修改的呢,所以我们才会在一开头的地方讲说, 每个 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 这个文件来了 解的!)
相对序 号 服务类别 0 kern(kernel) 1 user 在用户层级所产生的信息,例如后续会介绍到的用户使用 logger 指令来记录登录文件 的功能
2 mail 只要与邮件收发有关的讯息记录都属于这个;
3 daemon 4 auth 主要与认证/授权有关的机制,例如 login, ssh, su 等需要账号/密码的咚咚;
5 syslog 就是由 syslog 相关协议产生的信息,其实就是 rsyslogd 这支程序本身产生的信息啊!
6 lpr 7 news 与新闻组服务器有关的东西;
8 uucp 全名为 Unix to Unix Copy Protocol,早期用于 unix 系统间的程序数据交换;
9 cron 就是例行性工作排程 cron/at 等产生讯息记录的地方;
10 authpriv 11 ftp 16~23 local0 ~ local7
说明
就是核心 (kernel) 产生的讯息,大部分都是硬件侦测以及核心功能的启用 主要是系统的服务所产生的信息,例如 systemd 就是这个有关的讯息!
亦即是打印相关的讯息啊!
与 auth 类似,但记录较多账号私人的信息,包括 pam 模块的运作等!
与 FTP 通讯协议有关的讯息输出!
保留给本机用户使用的一些登录文件讯息,较常与终端机互动。
上面谈到的都是 Linux 核心的 syslog 函数自行制订的服务名称,软件开发商可以透过呼叫上述的服 务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这 些软件在设计登录文件记录时,都会主动呼叫 syslog 内的 mail 服务名称 (LOG_MAIL)。所以上述 三个软件 (sendmail, postfix, dovecot) 产生的讯息在 syslog 看起来,就会『是 mail 』类型的服务了。
我们可以将这个概念绘制如底下的图示来理解:图 18.2.1、syslog 所制订的服务名称与软件呼叫的方式 另外,每种服务所产生的数据量其实差异是很大的,举例来说, mail 的登录文件讯息多的要命, 每 一封信件进入后, mail 至少需要记录『寄信人的信息;与收信者的讯息』等等; 而如果是用来做 为工作站主机的,那么登入者 (利用 login 登录主机处理事情) 的数量一定不少,那个 authpriv 所管 辖的内容可就多的要命了。
为了让不同的信息放置到不同的文件当中,好让我们分门别类的进行日志文件的管理, 所以啰,将各 种类别的服务之登录文件,记录在不同的文件里面,就是我们 /etc/rsyslog.conf 所要作的规范了!
讯息等级
同一个服务所产生的讯息也是有差别的,有启动时仅通知系统而已的一般讯息 (information), 有出 现还不至于影响到正常运作的警告讯息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题 讯息 (error 等等); 讯息到底有多少种严重的等级呢?基本上,Linux 核心的 syslog 将讯息分为七 个主要的等级,根据 syslog.h 的定义,讯息名称与数值的对应如下:
等级数值 等级名称
说明
7 debug 6 info 5 notice 4 warning
(warn) 警示的讯息,可能有问题,但是还不至于影响到某个 daemon 运作的信息;基本上, info, notice, warn 这三个讯息都是在告知一些基本信息而已,应该还不至于造成一些系统运作 困扰;
3 err
(error) 一些重大的错误讯息,例如配置文件的某些设定值造成该服务服法启动的信息说明, 通 常藉由 err 的错误告知,应该可以了解到该服务无法启动的问题呢!
2 crit 比 error 还要严重的错误信息,这个 crit 是临界点 (critical) 的缩写,这个错误已经很 严重了喔!
1 alert 警告警告,已经很有问题的等级,比 crit 还要严重!
用来 debug (除错) 时产生的讯息数据;
仅是一些基本的讯息说明而已;
虽然是正常信息,但比 info 还需要被注意到的一些信息内容;emerg
(panic)
0 疼痛等级,意指系统已经几乎要当机的状态! 很严重的错误信息了。通常大概只有硬件 出问题,导致整个核心无法顺利运作,就会出现这样的等级的讯息吧!
基本上,在 0(emerg) 到 6(info) 的等级之间,等级数值越高代表越没事,等级靠近 0 则代表事情大 条了!除了 0 到 6 之外还有两个比较特殊的等级, 那就是 debug(错误侦测等级) 与 none (不需登 录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的信息时, 就用这两个咚咚吧!
特别留意一下在讯息等级之前还有 [.=!] 的链接符号喔!他代表的意思是这样的:
. :代表『比后面还要严重的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息等级严重于 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.!:代表不等于, 亦即是除了该等级外的其他等级都记录。
一般来说,我们比较常使用的是『.』这个链接符号啦!^_^
讯息记录的文件名或装置或主机
再来则是这个讯息要放置在哪里的设定了。通常我们使用的都是记录的文件啦!但是也可以输出到装 置呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!底下就是一些常见的放置处:
文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
打印机或其他:例如 /dev/lp0 这个打印机装置
使用者名称:显示给用户啰!
远程主机:例如 @study.vbird.tsai 当然啦,要对方主机也能支持才行!
*:代表『目前在在线的所有人』
,类似 wall 这个指令的意义!
服务、daemon 与函数名称
看完上面的说明,相信你一定会越来越迷糊!啊!怎么会有 syslog, rsyslogd, rsyslog.service!见鬼~ 名称都不相同!那是啥东西? 基本上,这几个东西你应该要这样看:
syslog 这个是 Linux 核心所提供的日志文件设计指引,所有的要求大概都写入道一个名为 syslog.h 的头文 件案中。如果你想要开发与登录文件有关的软件, 那你就得要依循这个 syslog 函数的要求去设 计才行!可以使用 man 3 syslog 去查询一下相关的数据!
rsyslogd 为了要达成实际上进行讯息的分类所开发的一套软件,所以,这就是最基本的 daemon 程序!
rsyslog.service 为了加入 systemd 的控制,因此 rsyslogd 的开发者设计的启动服务脚本设定!
这样简单的分类,应该比较容易了解名称上面的意义了吧?早期 CentOS 5.x 以前,要达成 syslog 的 功能是由一只名为 syslogd 的 daemon 来完成的, 从 CentOS 6 以来 (包含 CentOS 7) 则是透过 rsyslogd 这个 daemon 啰!
rsyslog.conf 语法练习基本上,整个 rsyslog.conf 配置文件的内容参数大概就只是这样而已,底下我们来思考一些例题,好 让你可以更清楚的知道如何设定 rsyslogd 啊!
例题:
如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/rsyslog.conf 的语法如何设 计?
答:
基本的写法是这样的:
mail.info
/var/log/maillog
注意到上面喔,当我们的等级使用 info 时,那么『任何严重于 info 等级(含 info 这个等级)之上的讯息, 都 会被写入到后面接的文件之中!』这样可以了解吗?也就是说,我们可以将所有 mail 的登录信息都记录在 /var/log/maillog 里面的意思啦!
例题:
我要将新闻组资料 (news) 及例行性工作排程 (cron) 的讯息都写入到一个称为 /var/log/cronnews 的文件 中,但是这两个程序的警告讯息则额外的记录在 /var/log/cronnews.warn 中, 那该如何设定我的 rsyslog.conf 呢?
答:
很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由于第二个指定文件中,我只要记录警告讯 息, 因此设定上需要指定『.=』这个符号,所以语法成为了:
news.*;cron.*
/var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
上面那个『.=』就是在指定等级的意思啦!由于指定了等级,因此,只有这个等级的讯息才会被记录在这个 文件里面呢! 此外你也必须要注意,news 与 cron 的警告讯息也会写入 /var/log/cronnews 内喔!
例题:
我的 messages 这个文件需要记录所有的信息,但是就是不想要记录 cron, mail 及 news 的信息,那么应该 怎么写才好?
答:
可以有两种写法,分别是:
*.*;news,cron,mail.none
/var/log/messages *.*;news.none;cron.none;mail.none /var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都 写上去啰!这样会设定了吧!

CentOS 7.x 预设的 rsyslog.conf 内容

回到顶部
了解语法之后,我们来看一看 rsyslogd 有哪些系统服务已经在记录了呢?就是瞧一瞧 /etc/rsyslog.conf 这个文件的预设内容啰! (注意!如果需要将该行做为批注时,那么就加上 # 符号 就可以啦)
# 来自 CentOS 7.x 的相关资料
[root@initroot ~]# vim /etc/rsyslog.conf1 #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 插口。这个项目通常应该是用在系统出现严重 问题而无法使用默认的屏幕观察系统时, 可以透过这个项目来连接取得核心的讯息。(注 1)
2. *.info;mail.none;authpriv.none;cron.none:由于 mail, authpriv, cron 等类别产生的讯息较多, 且已经写入底 下的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其他讯息都写入 /var/log/messages 中。这也是为啥我们说这个 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 文件中;
在上面的第四行关于 mail 的记录中,在记录的文件 /var/log/maillog 前面还有个减号『 - 』是干嘛 用的?由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内,这样将有助于登录文件的存取性 能。 只不过由于讯息是暂存在内存内,因此若不正常关机导致登录信息未回填到日志文件中,可能会 造成部分数据的遗失。
此外,每个 Linux distributions 的 rsyslog.conf 设定差异是颇大的,如果你想要找到相对应的登录信 息时, 可得要查阅一下 /etc/rsyslog.conf 这个文件才行!否则可能会发生分析到错误的信息喔!举 例来说, 有自己写一支分析日志文件的 script,这个 script 是依据 Red Hat 系统默认的登录文件 所写的,因此不同的 distributions 想要使用这支程序时,就得要自行设计与修改一下 /etc/rsyslog.conf 才行喔!否则就可能会分析到错误的信息啰。 那么如果你有自己的需要而得要修订日志文件时,该如 何进行?
自行增加登录文件文件功能
如果你有其他的需求,所以需要特殊的文件来帮你记录时,呵呵!别客气,千万给他记录在 /etc/rsyslog.conf 当中,如此一来,你就可以重复的将许多的信息记录在不同的文件当中,以方便你 的管理呢! 让我们来作个练习题吧!如果你想要让『所有的信息』都额外写入到 /var/log/admin.log 这 个文件时, 你可以怎么作呢?先自己想一想,并且作一下,再来看看底下的作法啦!
# 1. 先设定好所要建立的文件设置!
[root@initroot ~]# vim /etc/rsyslog.conf
# Add by VBird 2015/08/19 #再次强调,自己修改的时候加入一些说明
*.info #有用的是这行啦!
/var/log/admin.log
# 2. 重新启动 rsyslogd 呢!
[root@initroot ~]# systemctl restart rsyslog.service
[root@initroot ~]# ll /var/log/admin.log
-rw-r--r--. 1 root root 325 Aug 20 00:54 /var/log/admin.log
# 瞧吧!建立了这个日志文件出现啰!
很简单吧!如此一来,所有的信息都会写入 /var/log/admin.log 里面了!

日志文件的安全性设置

回到顶部
好了,由上一个小节里面我们知道了 rsyslog.conf 的设定,也知道了日志文件内容的重要性了, 所以, 如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?
对啦!就是离开的时候将屁股擦干净,将所有可能的讯息都给他抹煞掉, 所以第一个动脑筋的地方 就是日志文件的清除工作啦~ 如果你的日志文件不见了,那该怎办?
Tips
哇!教人家干坏事......喂!不要乱讲话~俺的意思是,如果改天你发现你的登录 档不翼而飞了, 或者是发现你的日志文件似乎不太对劲的时候,最常发现的就是网友常常会回报说,他的 /var/log 这 个目录『不见了!
』不要笑!这是真的事情!请记得,
『赶快清查你的系统!』 伤脑筋呢!有没有办法防止日志文件被删除?或者是被 root 自己不小心变更呢?有呀!拔掉网络线或 电源线就好了......呵呵! 别担心,基本上,我们可以透过一个隐藏的属性来设定你的日志文件,成为 『 只可以增加数据,但是不能被删除 』的状态,那么或许可以达到些许的保护!不过,如果你的 root 账号被破解了,那么底下的设定还是无法保护的,因为你要记得『 root 是可以在系统上面进行任何 事情的 』,因此,请将你的 root 这个账号的密码设定的安全一些!千万不要轻忽这个问题呢!Tips 为什么日志文件还要防止被自己 (root) 不小心所修改过呢? 在教 Linux 的课程时, 我的学生常常会举手说:
『老师,我的登录文件不能记录信息了!糟糕!是不是被入侵了啊?』 怪怪!明明是计算 机教室的主机,使用的是 Private IP 而且学校计中还有抵挡机制,不可能被攻击吧? 查询了才知道原来同学很喜 欢使用『 :wq 』来离开 vim 的环境,但是 rsyslogd 的日志文件只要『被编辑过』就无法继续记录! 所以才会导致 不能记录的问题。此时你得要 (1)改变使用 vim 的习惯; (2)重新启动 rsyslog.service 让他再继续提供服务才行喔! 既然如此,那么我们就来处理一下隐藏属性的东东吧!我们在第六章谈到过 lsattr 与 chattr 这两个东 西啦!如果将一个文件以 chattr 设定 i 这个属性时,那么该文件连 root 都不能杀掉!而且也不能 新增数据,嗯!真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀! 所以啰,我们要使用的是 a 这个属性!你的登录文件如果设定了这个属性的话,那么 他将只能被增 加,而不能被删除!嗯! 这个项目就非常的符合我们日志文件的需求啦!因此,你可以这样的增加你 的登录文件的隐藏属性。
Tips 请注意,底下的这个 chattr 的设定状态:
『仅适合已经对 Linux 系统很有概念的朋友』
来设定, 对于新手来说,建议你直接使用系统的默认值就好了,免得到最后日志文件无法写入~ 那就比较糗一点! @_@
[root@initroot ~]# chattr +a /var/log/admin.log
[root@initroot ~]# lsattr /var/log/admin.log
-----a---------- /var/log/admin.log
加入了这个属性之后,你的 /var/log/admin.log 日志文件从此就仅能被增加,而不能被删除,直到 root 以 『 chattr -a /var/log/admin.log 』取消这个 a 的参数之后,才能被删除或移动喔!
虽然,为了你登录文件的信息安全,这个 chattr 的 +a 旗标可以帮助你维护好这个文件, 不过,如 果你的系统已经被取得 root 的权限,而既然 root 可以下达 chattr -a 来取消这个旗标, 所以啰,还 是有风险的啦!此外,前面也稍微提到,新手最好还是先不要增加这个旗标, 很容易由于自己的忘 记,导致系统的重要讯息无法记录呢。
基本上,认为,这个旗标最大的用处除了在保护你登录文件的数据外, 他还可以帮助你避免掉 不小心写入日志文件的状况喔。要注意的是,当『 你不小心 "手动" 更动过日志文件后,例如那个 /var/log/messages , 你不小心用 vi 开启他,离开却下达 :wq 的参数,呵呵!那么该文件未来将不 会再继续进行登录动作! 』这个问题真的很常发生!由于你以 vi 储存了日志文件,则 rsyslogd 会误 判为该文件已被更动过, 将导致 rsyslogd 不再写入该文件新的内容~很伤脑筋的!要让该日志文件可以继续写入,你只要重新启动 rsyslogd.service 即可。 不过,总是比较麻烦。所以啊, 如果你针对日志文件下达 chattr +a 的参数,嘿嘿! 未来你就不需要害怕不小心更动到该文件了!因为 无法写入嘛!除了可以新增之外~ ^_^
不过,也因为这个 +a 的属性让该文件无法被删除与修改,所以啰,当我们进行登录文件轮替时
(logrotate) ,将会无法移动该日志文件的档名呢!所以会造成很大的困扰。这个困扰虽然可以使用
logrotate 的配置文件来解决,但是,还是先将日志文件的 +a 旗标拿掉吧!
[root@initroot ~]# chattr -a /var/log/admin.log

日志文件服务器的设定

回到顶部
我们在之前稍微提到的,在 rsyslog.conf 文件当中,可以将登录数据传送到打印机或者是远程主机上 面去。这样做有什么意义呢? 如果你将登录信息直接传送到打印机上面的话,那么万一不小心你的 系统被 cracker 所入侵, 他也将你的 /var/log/ 砍掉了,怎么办?没关系啊!反正你已经将重要数据 直接以打印机记录起来了, 嘿嘿!他是无法逃开的啦!^_^
再想象一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部 主机的状态,因此,你常常需要登入这十部主机去查阅你的日志文件~ 哇!光用想的,每天要进入十 部主机去查数据,想到就烦~没关系~这个时候我们可以让某一部主机当成 『登录文件服务器』, 用他来记录所有的十部 linux 主机的信息,嘿嘿!这样我就直接进入一部主机就可以了! 省时又省 事,真方便~
那要怎么达到这样的功能呢?很简单啦,我们 CentOS 7.x 预设的 rsyslogd 本身就已经具有这个登录 文件服务器的功能了, 只是默认并没有启动该功能而已。你可以透过 man rsyslogd 去查询一下相关 的选项就能够知道啦! 既然是日志文件服务器,那么我们的 Linux 主机当然会启动一个埠口来监听了, 那个预设的埠口就是 UDP 或 TCP 的 port 514 喔!
图 18.2.2、日志文件服务器的架构
如上图所示,服务器会启动监听的埠口,客户端则将日志文件再转出一份送到服务器去。 而既然是登 录档『服务器』,所以当然有服务器与客户端 (client) 啰!这两者的设定分别是这样的:# 1. Server 端:修改 rsyslogd 的启动配置文件,在 /etc/rsyslog.conf 内!
[root@initroot ~]# vim /etc/rsyslog.conf
# 找到底下这几行:
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
# 上面的是 UDP 埠口,底下的是 TCP 埠口!如果你的网络状态很稳定,就用 UDP 即可。
# 不过,如果你想要让数据比较稳定传输,那么建议使用 TCP 啰!所以修改底下两行即可!
$ModLoad imtcp
$InputTCPServerRun 514
# 2. 重新启动与观察 rsyslogd 喔!
[root@initroot ~]# systemctl restart rsyslog.service
[root@initroot ~]# netstat -ltnp | grep syslog
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2145/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 2145/rsyslogd
# 嘿嘿!你的登录文件主机已经设定妥当啰!很简单吧!
透过这个简单的动作,你的 Linux 主机已经可以接收来自其他主机的登录信息了! 当然啦,你必须 要知道网络方面的相关基础,这里只是先介绍,未来了解了网络相关信息后,再回头来这里瞧一 瞧先! ^_^
至于 client 端的设定就简单多了!只要指定某个信息传送到这部主机即可! 举例来说,我们的登录 档服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/rsyslog.conf 里面新增这样的一行:
[root@initroot ~]# vim /etc/rsyslog.conf
*.* @@192.168.1.100
#*.* @192.168.1.100
# 若用 UDP 传输,设定要变这样!
[root@initroot ~]# systemctl restart rsyslog.service
再重新启动 rsyslog.service 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名』 就会显示来自不同主机的信息了。 很简单吧! ^_^。不过你得要特别注意,使用 TCP 传输与 UDP 传输的设定不太一样!请依据你的日志文件服务器的设定值来选择你的客户端语法喔! 接下来,让我 们来谈一谈,那么如何针对日志文件来进行轮替 (rotate) 呢?

日志文件的轮替(logrotate)

回到顶部
假设我们已经将登录数据写入了记录文件中了,也已经利用 chattr 设定了 +a 这个属性了,那么该 如何进行 logrotate 的工作呢?这里请特别留意的是:『rsyslogd 利用的是 daemon 的方式来启动的, 当有需求的时候立刻就会被执行的,但是 logrotate 却是在规定的时间到了之后才来进行日志文件的轮 替, 所以这个 logrotate 程序当然就是挂在 cron 底下进行的呦!』 仔细看一下 /etc/cron.daily/ 里面 的文件,嘿嘿~看到了吧! /etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮替的行为啦! ^_^!底下我们就来谈一谈怎么样设计这个 logrotate 吧!

logrotate 的配置文件

回到顶部
既然 logrotate 主要是针对日志文件来进行轮替的动作,所以啰,他当然必须要记载『 在什么状态下才 将日志文件进行轮替』的设定啊!那么 logrotate 这个程序的参数配置文件在哪里呢?呵呵!那就是:
/etc/logrotate.conf
/etc/logrotate.d/
那个 logrotate.conf 才是主要的参数文件,至于 logrotate.d 是一个目录, 该目录里面的所有文件都 会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件中,如果没有 规定到的一些细部设定,则以 /etc/logrotate.conf 这个文件的规定来指定为默认值!
好了,刚刚我们提到 logrotate 的主要功能就是将旧的登录文件移动成旧档, 并且重新建立一个新的 空的文件来记录,他的执行结果有点类似底下的图示:
图 18.3.1、日志文件进行 logrotate 的结果
由上面的图示我们可以清楚的知道,当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次执行之后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存 日志文件!那么如果我们仅设定保留三个日志文件而已的话,那么执行第四次时,则 messages.3 这个文 件就会被删除,并由后面的较新的保存日志文件所取代!基本的工作就是这样啦!
不过近年来磁盘空间容量比较大了,加上管理员又担心登录文件数据真的给它不见去,因此,你可能 已经发现到,最近的日志文件轮替后的档名已经会加上日期参数, 然后源源不绝的保留在你的系统上 耶~虽然这个设定是可以修订的,不过,也真的希望保留日期的文件名延伸记录,真的比较不用 担心未来要找问题时, 日志文件却已经 GG 了...
那么多久进行一次这样的 logrotate 工作呢?这些都记录在 logrotate.conf 里面,我们来看一下预设 的 logrotate 的内容吧![root@initroot ~]# vim /etc/logrotate.conf # 底下的设定是 "logrotate 的预设设定值" ,如果个别的文件设定了其他的参数,
# 则将以个别的文件设定为主,若该文件没有设定到的参数则以这个文件的内容为默认值!
weekly #预设每个礼拜对日志文件进行一次 rotate 的工作 rotate 4 #保留几个日志文件呢?预设是保留四个! create #由于日志文件被更名,因此建立一个新的来继续储存之意! dateext #就是这个设定值!可以让被轮替的文件名加上日期作为档名喔! #compress #被更动的日志文件是否需要压缩?如果日志文件太大则可考虑此参数启动 include /etc/logrotate.d # 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行 rotate 的工作! /var/log/wtmp { monthly #仅针对 /var/log/wtmp 所设定的参数 #每个月一次,取代每周! 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/ 当中即可,真是方便又 合理的做法啊! ^_^
一般来说,这个 /etc/logrotate.conf 是『预设的轮替状态』而已, 我们的各个服务都可以拥有自己的 日志文件轮替设定,你也可以自行修改成自己喜欢的样式啊! 例如,如果你的系统的空间够大,并且 担心除错以及黑客的问题,那么可以:
将 rotate 4 改成 rotate 9 左右,以保存较多的备份文件。不过如果已经加上 dateext 的参数,那这个项目 就不用更动了!
大部分的日志文件不需要 compress 啰!但是空间太小就需要 compress !尤其是很占硬盘空间的 httpd 更需 要 compress 的!
好了,上面我们大致介绍了 /var/log/wtmp 这个文件的设定,现在你知道了 logrotate.conf 的设定语 法是:
登录文件的绝对路径文件名 ... {
个别的参数设定值,如 monthly, compress 等等}
底下我们再以 /etc/logrotate.d/syslog 这个轮替 rsyslog.service 服务的文件,来看看该如何设定他的 rotate 呢?
[root@initroot ~]# 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 设定合用才行。
至于可用的环境为:
o prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
o postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
o 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@initroot ~]# 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 的意思啦! 由于我们建立了一个新的空的记录文件,如果不执行此一行来重新启动服务的话, 那么 记录的时候将会发生错误呦!(请回到第十六章读一下 kill 后面的 signal 的内容说明)

实际测试 logrotate 的动作

回到顶部
好了,设定完成之后,我们来测试看看这样的设定是否可行呢?给他执行底下的指令:
[root@initroot ~]# logrotate [-vf] logfile
选项与参数:
-v :启动显示模式,会显示 logrotate 运作的过程喔!
-f :不论是否符合配置文件的数据,强制每个日志文件都进行 rotate 的动作!
范例一:执行一次 logrotate 看看整个流程为何?
[root@initroot ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf #读取主要配置文件
including /etc/logrotate.d #呼叫外部的设定
reading config file chrony #就是外部设定啊!
....(中间省略)....
Handling 18 logs
#共有 18 个登录文件被记录
....(中间省略)....
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
weekly (52 rotations)
empty log files are not rotated, old logs are removedconsidering log /var/log/cron
log does not need rotating
considering log /var/log/maillog
log does not need rotating
considering log /var/log/messages
#开始处理 messages
log does not need rotating
#因为时间未到,不需要更动!
....(底下省略)....
范例二:强制进行 logrotate 的动作
[root@initroot ~]# logrotate -vf /etc/logrotate.conf
....(前面省略)....
rotating log /var/log/messages, log->rotateCount is 52
dateext suffix '-20150820'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
....(底下省略)....
# 看到否?整个 rotate 的动作就是这样一步一步进行的~
[root@initroot ~]# ll /var/log/messages*; lsattr /var/log/messages
-rw-------. 1 root root
143 Aug 20 01:45 /var/log/messages
-rw-------. 1 root root 167125 Aug 20 01:40 /var/log/messages-20150820
-----a---------- /var/log/messages
#主动加入 a 的隐藏属性啰!
上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化啰!而且应该不会出现错误讯息才对!嘿嘿!这样就 OK 了!很棒不是吗?!
由于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate 啰!
不用担心的啦!只是要注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼:
Aug
20
01:45:34
study
rsyslogd:
[origin
software="rsyslogd"
swVersion="7.4.7"
x-pid="2145"
x-info="http://www.rsyslog.com"] rsyslogd was HUPed
这说明的是 rsyslogd 重新启动的时间啦 (就是因为 /etc/logrotate.d/syslog 的设定之缘故! ) 底下我们 来进行一些例题的练习,让你更详细的了解 logrotate 的功用啊!

自定义登录文件的轮替功能

回到顶部
假设前提是这样的,前一小节当中,假设你已经建立了 /var/log/admin.log 这个文件, 现在,你想要 将该文件加上 +a 这个隐藏标签,而且设定底下的相关信息:
日志文件轮替一个月进行一次;
该日志文件若大于 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
保存五个备份文件;
备份文件需要压缩那你可以怎么样设定呢?呵呵~很简单啊!看看底下的动作吧!
# 1. 先建立 +a 这个属性啊!
[root@initroot ~]# chattr +a /var/log/admin.log
[root@initroot ~]# lsattr /var/log/admin.log
-----a---------- /var/log/admin.log
[root@initroot ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move `/var/log/admin.log' to `/var/log/admin.log.1': Operation not permitted
# 这里确定了加入 a 的隐藏属性!所以 root 无法移动此日志文件!
# 2. 开始建立 logrotate 的配置文件,增加一个文件在 /etc/logrotate.d 内就对了!
[root@initroot ~]# vim /etc/logrotate.d/admin
# This configuration is from VBird 2015/08/19
/var/log/admin.log {
monthly #每个月进行一次
size=10M #文件容量大于 10M 则开始处置
rotate 5 #保留五个!
compress #进行压缩工作!
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/admin.log
endscript
}
# 3. 测试一下 logrotate 相关功能的信息显示:
[root@initroot ~]# logrotate -v /etc/logrotate.conf
....(前面省略)....
rotating pattern: /var/log/admin.log
10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
log does not need rotating
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
....(底下省略)....
# 因为还不足一个月,文件也没有大于 10M,所以不需进行轮替!
# 4. 测试一下强制 logrotate 与相关功能的信息显示:
[root@initroot ~]# logrotate -vf /etc/logrotate.d/admin
reading config file /etc/logrotate.d/adminreading config file /etc/logrotate.d/admin
Handling 1 logs
rotating pattern: /var/log/admin.log forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
log needs rotating
rotating log /var/log/admin.log, log->rotateCount is 5
dateext suffix '-20150820'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/admin.log.5.gz to /var/log/admin.log.6.gz (rotatecount 5, logstart 1, i 5),
old log /var/log/admin.log.5.gz does not exist
renaming /var/log/admin.log.4.gz to /var/log/admin.log.5.gz (rotatecount 5, logstart 1, i 4),
old log /var/log/admin.log.4.gz does not exist
renaming /var/log/admin.log.3.gz to /var/log/admin.log.4.gz (rotatecount 5, logstart 1, i 3),
old log /var/log/admin.log.3.gz does not exist
renaming /var/log/admin.log.2.gz to /var/log/admin.log.3.gz (rotatecount 5, logstart 1, i 2),
old log /var/log/admin.log.2.gz does not exist
renaming /var/log/admin.log.1.gz to /var/log/admin.log.2.gz (rotatecount 5, logstart 1, i 1),
old log /var/log/admin.log.1.gz does not exist
renaming /var/log/admin.log.0.gz to /var/log/admin.log.1.gz (rotatecount 5, logstart 1, i 0),
old log /var/log/admin.log.0.gz does not exist
log /var/log/admin.log.6.gz doesn't exist -- won't try to dispose of it
running prerotate script
fscreate context set to system_u:object_r:var_log_t:s0
renaming /var/log/admin.log to /var/log/admin.log.1
running postrotate script
compressing log with: /bin/gzip
[root@initroot ~]# lsattr /var/log/admin.log*
-----a---------- /var/log/admin.log
---------------- /var/log/admin.log.1.gz
#有压缩过喔!
看到了吗?透过这个方式,我们可以建立起属于自己的 logrotate 配置文件案, 很简便吧!尤其是要 注意的, /etc/rsyslog.conf 与 /etc/logrotate.d/* 文件常常要搭配起来,例如刚刚我们提到的两个案例 中所建立的 /var/log/admin.log 就是一个很好的例子~建立后,还要使用 logrotate 来轮替啊! ^_^

systemd-journald.service 简介

回到顶部
过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之 后,登录文件才会开始记录。所以,核心还得要自己产生一个 klogd 的服务, 才能将系统在开机过 程、启动服务的过程中的信息记录下来,然后等 rsyslogd 启动后才传送给它来处理~
现在有了 systemd 之后,由于这玩意儿是核心唤醒的,然后又是第一支执行的软件,它可以主动呼 叫 systemd-journald 来协助记载登录文件~ 因此在开机过程中的所有信息,包括启动服务与服务若 启动失败的情况等等,都可以直接被记录到 systemd-journald 里头去!
不过 systemd-journald 由于是使用于内存的登录文件记录方式,因此重新启动过后,开机前的登录文 件信息当然就不会被记载了。 为此,我们还是建议启动 rsyslogd 来协助分类记录!也就是说, systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所 以数据到磁盘文件中,方便未来进行查询喔!
虽然 systemd-journald 所记录的数据其实是在内存中,但是系统还是利用文件的型态 Tips 将它记录到 /run/log/ 底下! 不过我们从前面几章也知道, /run 在 CentOS 7 其实是内存内的数据,所以重新启 动过后,这个 /run/log 底下的数据当然就被刷新,旧的当然就不再存在了!

使用 journalctl 观察登录信息

回到顶部
那么 systemd-journald.service 的数据要如何叫出来查阅呢?很简单!就透过 journalctl 即可!让我们 来瞧瞧这个指令可以做些什么事?
[root@initroot ~]# 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 规范的服务相对序号来呼叫出正确的数据!
范例一:秀出目前系统中所有的 journal 日志数据
[root@initroot ~]# journalctl
-- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 00:01:01 CST. --Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max
142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max
142.4M, leaving 213.6M of free 1.3G, current limit 142.4M).
Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpuset
Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpu
.....(中间省略).....
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19268]: finished 0anacron
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19270]: starting 0yum-hourly.cron
Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19274]: finished 0yum-hourly.cron
# 从这次开机以来的所有数据都会显示出来!透过 less 一页页翻动给管理员查阅!资料量相当大!
范例二:(1)仅显示出 2015/08/18 整天以及(2)仅今天及(3)仅昨天的日志数据内容
[root@initroot ~]# journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00"
[root@initroot ~]# journalctl --since today
[root@initroot ~]# journalctl --since yesterday --until today
范例三:只找出 crond.service 的数据,同时只列出最新的 10 笔即可
[root@initroot ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10
范例四:找出 su, login 执行的日志文件,同时只列出最新的 10 笔即可
[root@initroot ~]# journalctl _COMM=su _COMM=login -n 10
范例五:找出讯息严重等级为错误 (error) 的讯息!
[root@initroot ~]# journalctl -p err
范例六:找出跟登录服务 (auth, authpriv) 有关的登录文件讯息
[root@initroot ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10
# 更多关于 syslog_facility 的数据,请参考 18.2.1 小节的内容啰!
基本上,有 journalctl 就真的可以搞定你的讯息数据啰!全部的资料都在这里面耶~再来假设一下, 你想要了解到日志文件的实时变化, 那又该如何处置呢?现在,请开两个终端机,让我们来处理处理!
# 第一号终端机,请使用底下的方式持续侦测系统!
[root@initroot ~]# journalctl -f
# 这时系统会好像卡住~其实不是卡住啦!是类似 tail -f 在持续的显示登录文件信息的!
# 第二号终端机,使用底下的方式随便发一封 email 给系统上的账号!
[root@initroot ~]# echo "testing" | mail -s 'tset' peter
# 这时,你会发现到第一号终端机竟然一直输出一些讯息吧!没错!这就对了!
如果你有一些必须要侦测的行为,可以使用这种方式来实时了解到系统出现的讯息~而取消 journalctl -f 的方法,就是 [crtl]+c 啊!18.4.2 logger 指令的应用 上面谈到的是叫出日志文件给我们查阅,那换个角度想,
『如果你想要让你的数据储存到登录文件当中』
呢?那该如何是好? 这时就得要使用 logger 这个好用的家伙了!这个家伙可以传输很多信息,不过, 我们只使用最简单的本机信息传递~ 更多的用法就请您自行 man logger 啰!
[root@initroot ~]# logger [-p 服务名称.等级] "讯息"
选项与参数:
服务名称.等级 :这个项目请参考 rsyslogd 的本章后续小节的介绍;
范例一:指定一下,让 peter 使用 logger 来传送数据到登录文件内
[root@initroot ~]# logger -p user.info "I will check logger command"
[root@initroot ~]# 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 peter[29753]: I will check logger command
现在,让我们来瞧一瞧,如果我们之钱写的 backup.service 服务中,如果使用手动的方式来备份,亦 即是使用 "/backups/backup.sh log" 来执行备份时, 那么就透过 logger 来记录备份的开始与结束的 时间!该如何是好呢?这样作看看!
[root@initroot ~]# vim /backups/backup.sh
#!/bin/bash
if [ "${1}" == "log" ]; then
logger -p syslog.info "backup.sh is starting"
fi
source="/etc /home /root /var/lib /var/spool/{cron,at,mail}"
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[ ! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log
if [ "${1}" == "log" ]; then
logger -p syslog.info "backup.sh is finished"
fi
[root@initroot ~]# /backups/backup.sh log
[root@initroot ~]# journalctl SYSLOG_FACILITY=5 -n 3
Aug 19 18:09:37 study.centos.vbird peter[29850]: backup.sh is starting
Aug 19 18:09:54 study.centos.vbird peter[29855]: backup.sh is finished
透过这个玩意儿,我们也能够将数据自行处置到登录文件当中啰!18.4.3 保存 journal 的方式 再强调一次,这个 systemd-journald.servicd 的讯息是不会放到下一次开机后的,所以,重新启动后, 那之前的记录通通会遗失。 虽然我们大概都有启动 rsyslogd 这个服务来进行后续的日志文件放置,不 过如果你比较喜欢 journalctl 的存取方式,那么可以将这些数据储存下来喔!
基本上,systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf 的内容,详细的参 数你可以参考 man 5 journald.conf 的资料。 因为预设的情况底下,配置文件的内容应该已经符合我 们的需求,所以这边就不再修改配置文件了。只是如果想要保存你的 journalctl 所读取的日志文件, 那么就得要建立一个 /var/log/journal 的目录,并且处理一下该目录的权限,那么未来重新启动 systemd-journald.service 之后, 日志登录文件就会主动的复制一份到 /var/log/journal 目录下啰!
# 1. 先处理所需要的目录与相关权限设定
[root@initroot ~]# mkdir /var/log/journal
[root@initroot ~]# chown root:systemd-journal /var/log/journal
[root@initroot ~]# chmod 2775 /var/log/journal
# 2. 重新启动 systemd-journald 并且观察备份的日志数据!
[root@initroot ~]# systemctl restart systemd-journald.service
[root@initroot ~]# ll /var/log/journal/
drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a
你得要注意的是,因为现在整个日志登录文件的容量会持续长大,因此你最好还是观察一下你系统能 用的总容量喔!避免不小心文件系统的容量被灌爆! 此外,未来在 /run/log 底下就没有相关的日志 可以观察了!因为移动到 /var/log/journal 底下来啰!
其实是这样想的,既然我们还有 rsyslog.service 以及 logrotate 的存在,因此这个 systemd-journald.service 产生的日志文件, 个人建议最好还是放置到 /run/log 的内存当中,以加快存 取的速度!而既然 rsyslog.service 可以存放我们的日志文件, 似乎也没有必要再保存一份 journal 登 录文件到系统当中就是了。单纯的建议!如何处理,依照您的需求即可喔!

分析日志文件

回到顶部
日志文件的分析是很重要的!你可以自行以 vim 或者是 journalctl 进入登录文件去查阅相关的信息。
而系统也提供一些软件可以让你从登录文件中取得资料, 例如之前谈过的 last, lastlog, dmesg 等等 指令。不过,这些数据毕竟都非常的分散,如果你想要一口气读取所有的登录信息, 其实有点困扰 的。不过,好在 CentOS 有提供 logwatch 这个登录文件分析程序,你可以藉由该程序来了解登录文 件信息。 此外,也依据 Red Hat 系统的 journalctl 搭配 syslog 函数写了一支小程序给大家使 用喔!

CentOS 预设提供的 logwatch

回到顶部
虽然有一些有用的系统指令,不过,要了解系统的状态,还是得要分析整个日志文件才行~ 事实上, 目前已经有相当多的日志文件分析工具,例如 CentOS 7.x 上面预设的 logwatch 这个套件所提供的分 析工具, 他会每天分析一次登录文件,并且将数据以 email 的格式寄送给 root 呢! 你也可以直接 到 logwatch 的官方网站上面看看:
http://www.logwatch.org/
不过在我们的安装方式里面,预设并没有安装 logwatch 就是了!所以,我们先来安装一下 logwatch 这套软件再说。假设你已经将 CentOS 7.1 的原版光盘挂载在 /mnt 当中了,那使用底下的方式来处 理即可:
[root@initroot ~]# yum install /mnt/Packages/perl-5.*.rpm
> /mnt/Packages/perl-Date-Manip-*.rpm \
> /mnt/Packages/perl-Sys-CPU-*.rpm \
> /mnt/Packages/perl-Sys-MemInfo-*.rpm \
> /mnt/Packages/logwatch-*.rpm
# 得要安装数个软件才能够顺利的安装好 logwatch 喔!当然,如果你有网络,直接安装就好了!
[root@initroot ~]# ll /etc/cron.daily/0logwatch
-rwxr-xr-x. 1 root root 434 Jun 10
2014 /etc/cron.daily/0logwatch
[root@initroot ~]# /etc/cron.daily/0logwatch
安装完毕以后,logwatch 就已经写入 cron 的运作当中了!详细的执行方式你可以参考上表中 0logwatch 文件内容来处理,未来则每天会送出一封 email 给 root 查阅就是了。因为我们刚刚安装, 那可以来分析一下吗?很简单啦!你就直接执行 0logwatch 即可啊!如上表最后一个指令的示意。 因为的测试机目前的服务很少, 所以产生的信息量也不多,因此执行的速度很快。比较忙的系 统信息量比较大,分析过程会花去一小段时间。如果顺利执行完毕,那请用 root 的身份去读一下 email 啰!
[root@initroot ~]# mail
Heirloom Mail version 12.5 7/5/10.
Type ? for help.
"/var/spool/mail/root": 5 messages 2 new 4 unread
>N
N
4 root Thu Jul 30 19:35 29/763 "testing at job"
5 logwatch@study.cento Thu Aug 20 17:55 97/3045 "Logwatch for study.centos.vbird (Linux)"
& 5
Message
5:
From root@initroot.centos.vbird
Thu Aug 20 17:55:23 2015
Return-Path: <root@initroot.centos.vbird>
X-Original-To: root
Delivered-To: root@initroot.centos.vbirdTo: root@initroot.centos.vbird
From: logwatch@study.centos.vbird
Subject: Logwatch for study.centos.vbird (Linux)
Auto-Submitted: auto-generated
Precedence: bulk
Content-Type: text/plain; charset="iso-8859-1"
Date: Thu, 20 Aug 2015 17:55:23 +0800 (CST)
Status: R
# logwatch 会先说明分析的时间与 logwatch 版本等等信息
################### Logwatch 7.4.0 (03/01/11) ####################
Processing Initiated: Thu Aug 20 17:55:23 2015
Date Range Processed: yesterday
( 2015-Aug-19 )
Period is day.
Detail Level of Output: 0
Type of Output/Format: mail / text
Logfiles for Host: study.centos.vbird
##################################################################
# 开始一项一项的数据进行分析!分析得很有道理啊!
--------------------- pam_unix Begin ------------------------
su-l:
Sessions Opened:
peter -> root: 2 Time(s)
---------------------- pam_unix End -------------------------
--------------------- Postfix Begin ------------------------
894 Bytes accepted 894
894 Bytes delivered 894
========
2
--------
2
========
==================================================
Accepted
100.00%
--------------------------------------------------
Total
100.00%
==================================================
2 Removed from queue
2 Delivered
---------------------- Postfix End -------------------------
--------------------- SSHD Begin ------------------------
Users logging in through sshd:
peter:
192.168.1.200: 2 times
Received disconnect:11: disconnected by user : 1 Time(s)
---------------------- SSHD End -------------------------
--------------------- Sudo (secure-log) Begin ------------------------
peter => root
--------------
/bin/su
-
2 Time(s).
---------------------- Sudo (secure-log) End -------------------------
# 当然也得说明一下目前系统的磁盘使用状态喔!
--------------------- Disk Space Begin ------------------------
Filesystem
/dev/mapper/centos-root
Size
Used Avail Use% Mounted on
10G 3.7G 6.3G
37% /
devtmpfs 1.4G 0 1.4G 0% /dev
/dev/vda2 1014M 141M 874M 14% /boot
/dev/vda4 1014M 33M 982M /dev/mapper/centos-home 5.0G 642M 4.4G /dev/mapper/raidvg-raidlv 1.5G 33M 1.5G
4% /srv/myproject
13% /home
3% /srv/raidlvm
---------------------- Disk Space End -------------------------
由于的测试用主机尚未启动许多服务,所以分析的项目很少。若你的系统已经启动许多服务的话, 那么分析的项目理应会多很多才对。

自己写的日志文件分析工具

回到顶部
虽然已经有了类似 logwatch 的工具,但是自己想要分析的数据毕竟与对方不同~所以啰, 就自己写了一支小程序 (shell script 的语法) 用来分析自己的登录文件,这支程序分析的登录文件主 要由 journalctl 所产生,而且只会抓前一天的日志文件来分析而已~ 若比对 rsyslog.service 所产生的 日志文件,则主要用到底下几个对应的档名 (虽然真的没用到! ^_^):
/var/log/secure
/var/log/messages
/var/log/maillog
当然啦,还不只这些啦,包括各个主要常见的服务,如 pop3, mail, ftp, su 等会使用到 pam 的服务, 都可以透过写的这个小程序来分析与处理呢~整个数据还会输出一些系统信息。如果你想要使用 这个程序的话, 欢迎下载:
http://linux.vbird.org//linux_basic/0570syslog//logfile_centos7.tar.gz
安装的方法也很简单,你只要将上述的文件在根目录底下解压缩,自然就会将 cron 排程与相对应的 文件放到正确的目录去。 基本上会用到的目录有 /etc/cron.d 以及 /root/bin/logfile 而已!已 经写了一个 crontab 在文件中,设定每日 00:10 去分析一次系统注册表档。 不过请注意,这次使用的日志文件真的是来自于 journalctl , 所以 CentOS 6 以前的版本千万不要使用喔!现在假设我将 下载的文件放在跟目录,所以:
[root@initroot ~]# tar -zxvf /logfile_centos7.tar.gz -C /
[root@initroot ~]# cat /etc/cron.d/vbirdlogfile
10 0 * * * root /bin/bash /root/bin/logfile/logfile.sh &> /dev/null
[root@initroot ~]# sh /root/bin/logfile/logfile.sh
# 开始尝试分析系统的登录文件,依据你的日志文件大小,分析的时间不固定!
[root@initroot ~]# mail
# 自己找到刚刚输出的结果,该结果的输出有点像底下这样:
Heirloom Mail version 12.5 7/5/10.
Type ? for help.
"/var/spool/mail/root": 9 messages 4 new 7 unread
N
8 root
Thu Aug 20 19:26 60/2653 "study.centos.vbird logfile analysis
Thu Aug 20 19:37 59/2612 "study.centos.vbird logfile analysis
results"
>N
9 root
results"
& 9
# 先看看你的硬件与操作系统的相关情况,尤其是 partition 的使用量更需要随时注意!
=============== system summary =================================
Linux kernel
:
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org)
CPU informatin: 2 Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
CPU speed : 2299.996 MHz
hostname is : study.centos.vbird
Network IP : 192.168.1.100
Check time : 2015/August/20 19:37:25 ( Thursday )
Summary date : Aug 20
Up times : 3 days, 59 min,
Filesystem summary:
Filesystem Type Size /dev/mapper/centos-root xfs 10G 3.7G 6.3G devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs tmpfs 1.4G 48K 1.4G 1% /dev/shm
tmpfs tmpfs 1.4G 8.7M 1.4G 1% /run
tmpfs tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/vda2 xfs 1014M 141M 874M /dev/vda4 xfs 1014M 33M 982M /dev/mapper/centos-home xfs 5.0G 642M 4.4G /dev/mapper/raidvg-raidlv xfs 1.5G 33M 1.5G /dev/sr0 7.1G 7.1G
iso9660
Used Avail Use% Mounted on
37% /
14% /boot
4% /srv/myproject
13% /home
3% /srv/raidlvm
0 100% /mnt
# 这个程序会将针对 internet 与内部监听的端口口分开来显示!================= Ports 的相关分析信息 =======================
主机启用的 port 与相关的 process owner:
对外部接口开放的 ports (PID|owner|command)
tcp 21|(root)|/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
tcp 22|(root)|/usr/sbin/sshd -D
tcp 25|(root)|/usr/libexec/postfix/master -w
tcp 222|(root)|/usr/sbin/sshd -f /etc/ssh/sshd2_config -D
tcp 514|(root)|/usr/sbin/rsyslogd -n
tcp 555|(root)|/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf
# 以下针对有启动的服务个别进行分析!
================= SSH 的登录文件信息汇整 =======================
今日没有使用 SSH 的纪录
================= Postfix 的登录文件信息汇整 ===================
使用者信箱受信次数:

目前都是透过这支程序去分析自己管理的主机,然后再据以了解系统状况,如果有特殊状况则实 时进行系统处理! 而且都是将上述的 email 调整成自己可以在 Internet 上面读到的邮件,这样 我每天都可以收到正确的登录文件分析信息哩!

本文由initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读