Linux的登录当主要是由rsyslog.service负责,观察Linux是否启动rsyslog是否有设置开机启动。。
命令:$ ps aux | grep rsyslog #查看是否启动
命令:$ systemctl status rsyslog.service #查看预设开机是否自启动
1、rsyslog.service的配置文件:/etc/s/rsyslog.conf
其指的是rsyslog这个daemon的配置文件,rsyslog可以负责主机产生的各个信息的登录,这些信息本身是有等级之分的,基本上针对于各种服务与讯息记录在某些文件的配置文件是/etc/rsyslog.conf,该文件规定:什么是服务、服务的等级讯息、服务记录的装置或文件
<1>服务名称
相对序号 | 服务类别 | 说明 |
---|---|---|
0 | kern(kernel) | 就是核心 (kernel) 产生的讯息,大部分都是硬件侦测以及核心功能的启用 |
1 | user | 在用户层级所产生的信息,例如后续会介绍到的用户使用 logger 指令来记录登文件的功能 |
2 | 只要与邮件收发有关的讯息记录都属于这个; | |
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 | 保留给本机用户使用的一些登录文件讯息,较常与终端机互动。 |
/etc/rsyslog.conf的规范就是将各类的服务登录文件放置在不同的文件夹中。
<2>讯息等级
等级数值 | 等级名称 | 说明 |
---|---|---|
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-6外还有两个比较特殊的等级,那就是debug(错误侦测等级)与none(不需要登录等级)
特别留意一下在讯息等级之前还有 [.=!] 的链接符号喔!他代表的意思是这样的:
(1) . :代表『比后面还要严重的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的信息,而且该 信息等级严重于 info (含 info 本身)时,就会被记录下来的意思。
(2) .=:代表所需要的等级就是后面接的等级而已, 其他的不要!
(3) .!:代表不等于, 亦即是除了该等级外的其他等级都记录。
<3>讯息记录的文件名或装置或主机
文件常见放置处:
(1)文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
(2)打印机或其他:例如 /dev/lp0 这个打印机装置
(3)使用者名称:显示给用户啰!
(4)远程主机:例如 @study.vbird.tsai 当然啦,要对方主机也能支持才行 (5)*:代表目前在线的所有人,类似于wall指令
<4>服务、daemon与函数名称
syslog | 这个是 Linux 核心所提供的登录档设计指引,所有的要求大概都写入道一个名为 syslog.h 的头文件案中。如果你想要开发与登录文件有关的软件, 那你就得要依循这个 syslog 函数的要求去设计才行!可以用 man 3 syslog 去查询一下相关的数据! |
rsyslogd | 为了要达成实际上进行讯息的分类所开发的一套软件,所以,这就是最基本的 daemon 程序! |
rsyslog.service | 为了加入 systemd 的控制,因此 rsyslogd 的开发者设计的启动服务脚本设定! |
<5>rsyslog.conf语法练习
例题:如果我要将我的 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
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都
<5>centos.x预设的rsyslog.conf内容
命令:$ 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
(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) ,等到数据量够大了才一次性的将所有数据都填入磁盘内,这样将有助于登录文件的存取性能。 只不过由于讯息是暂存在内存内,因此若不正常关机导致登录信息未回填到登录档中,可能会造成部分数据的遗失。
<6>自行增加登录文件文件功能
如果有其他的需求时,所需特殊文件来帮你记录时,可以记录在/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
# 瞧吧!建立了这个登录档出现啰!
2、档的安全性设置
当使用vim编辑器编辑登录档离开使用:wq离开后会导致被编辑过的登录档无法记录,我们需要改变自己的vim使用习惯,然后重新启动rsyslog.service继续提供服务。如果将一个文件以 chattr设定i属性时,该文件以root权限都无法删除,而且不能写入新增的数据,对于不断记录信息的登录档而言,由于i属性无法增加数据所以需要使用a属性,此时登录档将 只能被增加而不能被删除。命令:$ chattr +a /ver/log/admin.log #创建只增不减的登录档记录文件
命令:$ lsattr /var/log/admin.log
3、登录档服务器设定
登录档服务器Linux主机会启动一个埠口(预设UDP或TCP的port514)来监听。关于登录服务器的服务器端与客户端的设定如下
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
客户端(client)[root@study ~]# vim /etc/rsyslog.conf
*.* @@192.168.1.100
#*.* @192.168.1.100 # 若用 UDP 传输,设定要变这样!
[root@study ~]# systemctl restart rsyslog.service