18.2 rsyslog.service :记录登录文件的服务
最后更新于:2022-04-01 22:15:41
## 18.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
# 也有启动这个服务,也有默认开机时也要启动这个服务!OK!正常没问题!!
```
看到 rsyslog.service 这个服务名称了吧?所以知道他已经在系统中工作啰!好了,既然本章主要是讲登录文件的服务, 那么 rsyslog.service 的配置文件在哪里?如何设置?如果你的 Linux 主机想要当作整个区网的登录文件服务器时,又该如何设置? 下面就让我们来玩玩这玩意!
### 18.2.1 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) | 就是核心 (kernel) 产生的讯息,大部分都是硬件侦测以及核心功能的启用 |
| 1 | user | 在使用者层级所产生的信息,例如后续会介绍到的用户使用 logger 指令来记录登录文件的功能 |
| 2 | mail | 只要与邮件收发有关的讯息记录都属于这个; |
| 3 | daemon | 主要是系统的服务所产生的信息,例如 systemd 就是这个有关的讯息! |
| 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 | 与 auth 类似,但记录较多帐号私人的信息,包括 pam 模块的运行等! |
| 11 | ftp | 与 FTP 通讯协定有关的讯息输出! |
| 16~23 | local0 ~ local7 | 保留给本机用户使用的一些登录文件讯息,较常与终端机互动。 |
上面谈到的都是 Linux 核心的 syslog 函数自行制订的服务名称,软件开发商可以通过调用上述的服务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时,都会主动调用 syslog 内的 mail 服务名称 (LOG_MAIL)。所以上述三个软件 (sendmail, postfix, dovecot) 产生的讯息在 syslog 看起来,就会“是 mail ”类型的服务了。我们可以将这个概念绘制如下面的图示来理解:
![syslog 所制订的服务名称与软件调用的方式](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-13_5735737b86ed2.gif)图18.2.1、syslog 所制订的服务名称与软件调用的方式
另外,每种服务所产生的数据量其实差异是很大的,举例来说, mail 的登录文件讯息多的要命, 每一封信件进入后, mail 至少需要记录“寄信人的信息;与收信者的讯息”等等; 而如果是用来做为工作站主机的,那么登陆者 (利用 login 登录主机处理事情) 的数量一定不少,那个 authpriv 所管辖的内容可就多的要命了。
为了让不同的信息放置到不同的文件当中,好让我们分门别类的进行登录文件的管理, 所以啰,将各种类别的服务之登录文件,记录在不同的文件里面,就是我们 /etc/rsyslog.conf 所要作的规范了!
* 讯息等级
同一个服务所产生的讯息也是有差别的,有启动时仅通知系统而已的一般讯息 (information), 有出现还不至于影响到正常运行的警告讯息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题讯息 (error 等等); 讯息到底有多少种严重的等级呢?基本上,Linux 核心的 syslog 将讯息分为七个主要的等级,根据 syslog.h 的定义,讯息名称与数值的对应如下:
| 等级数值 | 等级名称 | 说明 |
| --- | --- |
| 7 | debug | 用来 debug (除错) 时产生的讯息数据; |
| 6 | info | 仅是一些基本的讯息说明而已; |
| 5 | notice | 虽然是正常信息,但比 info 还需要被注意到的一些信息内容; |
| 4 | warning(warn) | 警示的讯息,可能有问题,但是还不至于影响到某个 daemon 运行的信息;基本上, info, notice, warn 这三个讯息都是在告知一些基本信息而已,应该还不至于造成一些系统运行困扰; |
| 3 | err(error) | 一些重大的错误讯息,例如配置文件的某些设置值造成该服务服法启动的信息说明, 通常借由 err 的错误告知,应该可以了解到该服务无法启动的问题呢! |
| 2 | crit | 比 error 还要严重的错误信息,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔! |
| 1 | alert | 警告警告,已经很有问题的等级,比 crit 还要严重! |
| 0 | emerg(panic) | 疼痛等级,意指系统已经几乎要死机的状态! 很严重的错误信息了。通常大概只有硬件出问题,导致整个核心无法顺利运行,就会出现这样的等级的讯息吧! |
基本上,在 0(emerg) 到 6(info) 的等级之间,等级数值越高代表越没事,等级靠近 0 则代表事情大条了!除了 0 到 6 之外还有两个比较特殊的等级, 那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的信息时, 就用这两个咚咚吧!
特别留意一下在讯息等级之前还有 [.=!] 的链接符号喔!他代表的意思是这样的:
* . :代表“比后面还要严重的等级 (含该等级) 都被记录下来”的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息等级严重于 info (含 info 本身)时,就会被记录下来的意思。
* .=:代表所需要的等级就是后面接的等级而已, 其他的不要!
* .!:代表不等于, 亦即是除了该等级外的其他等级都记录。
一般来说,我们比较常使用的是“.”这个链接符号啦!^_^
* 讯息记录的文件名或设备或主机
再来则是这个讯息要放置在哪里的设置了。通常我们使用的都是记录的文件啦!但是也可以输出到设备呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!下面就是一些常见的放置处:
* 文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
* 打印机或其他:例如 /dev/lp0 这个打印机设备
* 使用者名称:显示给使用者啰!
* 远端主机:例如 @study.vbird.tsai 当然啦,要对方主机也能支持才行!
* *:代表“目前在线上的所有人”,类似 [wall](../Text/index.html#uselinux_talk) 这个指令的意义!
* 服务、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@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 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的屏幕观察系统时, 可以通过这个项目来连接取得核心的讯息。[[1]](#ps1)
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](../Text/index.html#analyze_vbird),这个 script 是依据 Red Hat 系统默认的登录文件所写的,因此不同的 distributions 想要使用这支程序时,就得要自行设计与修改一下 /etc/rsyslog.conf 才行喔!否则就可能会分析到错误的信息啰。 那么如果你有自己的需要而得要修订登录文件时,该如何进行?
* 自行增加登录文件文件功能
如果你有其他的需求,所以需要特殊的文件来帮你记录时,呵呵!别客气,千万给他记录在 /etc/rsyslog.conf 当中,如此一来,你就可以重复的将许多的信息记录在不同的文件当中,以方便你的管理呢! 让我们来作个练习题吧!如果你想要让“所有的信息”都额外写入到 /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
# 瞧吧!创建了这个登录文件出现啰!
```
很简单吧!如此一来,所有的信息都会写入 /var/log/admin.log 里面了!
### 18.2.2 登录文件的安全性设置
好了,由上一个小节里面我们知道了 rsyslog.conf 的设置,也知道了登录文件内容的重要性了, 所以,如果幻想你是一个很厉害的骇客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?对啦!就是离开的时候将屁股擦干净,将所有可能的讯息都给他抹煞掉, 所以第一个动脑筋的地方就是登录文件的清除工作啦~ 如果你的登录文件不见了,那该怎办?
![鸟哥的图示](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-13_5735736501917.gif "鸟哥的图示")
**Tips** 哇!鸟哥教人家干坏事……喂!不要乱讲话~俺的意思是,如果改天你发现你的登录文件不翼而飞了, 或者是发现你的登录文件似乎不太对劲的时候,最常发现的就是网友常常会回报说,他的 /var/log 这个目录“不见了!”不要笑!这是真的事情!请记得,“赶快清查你的系统!”
伤脑筋呢!有没有办法防止登录文件被删除?或者是被 root 自己不小心变更呢?有呀!拔掉网络线或电源线就好了……呵呵! 别担心,基本上,我们可以通过一个隐藏的属性来设置你的登录文件,成为“ 只可以增加数据,但是不能被删除 ”的状态,那么或许可以达到些许的保护!不过,如果你的 root 帐号被破解了,那么下面的设置还是无法保护的,因为你要记得“ root 是可以在系统上面进行任何事情的 ”,因此,请将你的 root 这个帐号的密码设置的安全一些!千万不要轻忽这个问题呢!
![鸟哥的图示](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-13_5735736501917.gif "鸟哥的图示")
**Tips** 为什么登录文件还要防止被自己 (root) 不小心所修改过呢? 鸟哥在教 Linux 的课程时,我的学生常常会举手说:“老师,我的登录文件不能记录信息了!糟糕!是不是被入侵了啊?” 怪怪!明明是计算机教室的主机,使用的是 Private IP 而且学校计中还有抵挡机制,不可能被攻击吧? 查询了才知道原来同学很喜欢使用“ :wq ”来离开 vim 的环境,但是 rsyslogd 的登录文件只要“被编辑过”就无法继续记录! 所以才会导致不能记录的问题。此时你得要 (1)改变使用 vim 的习惯; (2)重新启动 rsyslog.service 让他再继续提供服务才行喔!
既然如此,那么我们就来处理一下隐藏属性的东东吧!我们在[第六章](../Text/index.html)谈到过 [lsattr](../Text/index.html#lsattr) 与 [chattr](../Text/index.html#chattr) 这两个东西啦!如果将一个文件以 chattr 设置 i 这个属性时,那么该文件连 root 都不能杀掉!而且也不能新增数据,嗯!真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀!所以啰,我们要使用的是 a 这个属性!你的登录文件如果设置了这个属性的话,那么 他将只能被增加,而不能被删除!嗯! 这个项目就非常的符合我们登录文件的需求啦!因此,你可以这样的增加你的登录文件的隐藏属性。
![鸟哥的图示](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-13_5735736501917.gif "鸟哥的图示")
**Tips** 请注意,下面的这个 chattr 的设置状态:“仅适合已经对 Linux 系统很有概念的朋友”来设置, 对于新手来说,建议你直接使用系统的默认值就好了,免得到最后登录文件无法写入~ 那就比较糗一点! @_@
```
[root@study ~]# chattr +a /var/log/admin.log
[root@study ~]# 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@study ~]# chattr -a /var/log/admin.log
```
### 18.2.3 登录文件服务器的设置
我们在之前稍微提到的,在 rsyslog.conf 文件当中,可以将登录数据传送到打印机或者是远端主机上面去。这样做有什么意义呢? 如果你将登录信息直接传送到打印机上面的话,那么万一不小心你的系统被 cracker 所入侵, 他也将你的 /var/log/ 砍掉了,怎么办?没关系啊!反正你已经将重要数据直接以打印机记录起来了, 嘿嘿!他是无法逃开的啦!^_^
再想像一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部主机的状态,因此,你常常需要登陆这十部主机去查阅你的登录文件~ 哇!光用想的,每天要进入十部主机去查数据,想到就烦~没关系~这个时候我们可以让某一部主机当成 “登录文件服务器”,用他来记录所有的十部 linux 主机的信息,嘿嘿!这样我就直接进入一部主机就可以了! 省时又省事,真方便~
那要怎么达到这样的功能呢?很简单啦,我们 CentOS 7.x 默认的 rsyslogd 本身就已经具有这个登录文件服务器的功能了, 只是默认并没有启动该功能而已。你可以通过 man rsyslogd 去查询一下相关的选项就能够知道啦! 既然是登录文件服务器,那么我们的 Linux 主机当然会启动一个端口来监听了,那个默认的端口就是 UDP 或 TCP 的 port 514 喔!
![登录文件服务器的架构](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-05-13_5735737ba91bd.jpg)图18.2.2、登录文件服务器的架构
如上图所示,服务器会启动监听的端口,用户端则将登录文件再转出一份送到服务器去。 而既然是登录文件“服务器”,所以当然有服务器与用户端 (client) 啰!这两者的设置分别是这样的:
```
# 1\. Server 端:修改 rsyslogd 的启动配置文件,在 /etc/rsyslog.conf 内!
[root@study ~]# 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@study ~]# systemctl restart rsyslog.service
[root@study ~]# 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@study ~]# vim /etc/rsyslog.conf
*.* @@192.168.1.100
#*.* @192.168.1.100 # 若用 UDP 传输,设置要变这样!
[root@study ~]# systemctl restart rsyslog.service
```
再重新启动 rsyslog.service 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的“主机名称”就会显示来自不同主机的信息了。 很简单吧! ^_^。不过你得要特别注意,使用 TCP 传输与 UDP 传输的设置不太一样!请依据你的登录文件服务器的设置值来选择你的用户端语法喔! 接下来,让我们来谈一谈,那么如何针对登录文件来进行轮替 (rotate) 呢?
';