一.文件系统
1.cp和inode
cp命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm命令:
- 硬链接数递减,从而释放的inode号可以被重复使用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时会被覆盖
mv和inode:
如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置;没有数据被移动
[root@localhost a]#find -inum 69 -exec rm {} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete
三种时间戳
当创建一个文件时,这个文件的最后访问时间,最后内容修改时间,最后状态更新时间都是一致的。修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间。
当查看文件时,文件的最后查看时间(Access time)会更新
- Moaify Time 查看这个文件有没有被修改过
- Access Time 查看这个文件最后查看时间
- Change Time 查看这个文件最后变动的时间
2.inode表
相同设备上inode号是不会相同的
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data 元信息 )元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
每一个inode表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
如何查看inode号
ls -i
stat
有3个时间:
最近访问atime:最后一次查看文件 需要打开文件才会变更
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等
二.日志
内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf
将系统和应用发生的事件记录至日志中,以助于排错和分析使用
1.日志文件的格式:
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
#查看一下 /var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息,更加容易理解。
命令:
[root@localhost ~]#vim /var/log/secure
Sep 22 22:43:31 localhost sshd[17254]: Accepted password for root from 192.168.91.1 port 54264 ssh2
Sep 22 22:43:31 localhost sshd[17254]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 22 22:56:11 localhost sshd[13323]: pam_unix(sshd:session): session closed for user root
Sep 22 22:57:42 localhost sshd[13887]: pam_unix(sshd:session): session closed for user root
Sep 22 22:59:14 localhost sshd[14472]: pam_unix(sshd:session): session closed for user root
Sep 22 23:01:35 localhost sshd[14992]: pam_unix(sshd:session): session closed for user root
Sep 22 23:02:51 localhost sshd[15543]: pam_unix(sshd:session): session closed for user root
内核和公共消息日志存储位置
内核及大多数系统消息被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中,日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。
rsys服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。
公共日志/var/log/messages文件的格式其中每一行表示一条日志消息,每一条消息均包括以下四个字段:
- 时间标签:消息发出的日期和时间
- 主机名:生成消息的计算机名称
- 子系统名称:发出消息的应用程序的名称
- 消息:消息的具体内容
用户日志:
在wtmp、btmp、lastlog等日志文件中,保存了系统用户登录,退出等相关的事件消息。
但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、last和lastb等用户查询命令来获取日志信息。
2.查询用户登录的历史记录
last
用于查询成功登录到系统的用户记录
最近的登录情况显示在最前面,通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,表示当前主机可能已被入侵。
lastb
用于查询登陆失败的用户记录
如果登录的用户名错误,密码不正确等情况都会被记录,登录失败的情况属于安全事件,因为这表示可能有人在尝试破解你的密码,除了使用last命令查看以外,也可以直接从安全日志文件/var/log/secure中获得相关信息。
三.Rsyslog
1.rsyslog系统日志服务
rsyslog提供了高性能,出色的安全性和模块化设计,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
rsyslog的特性:
- 多线程
- UDP,TCP,SSL,TLS,RELP
- MYSQL,PGSOL,Oracle实现日志存储
- 可实现过滤日志信息中任意部分
- 自定义输出格式
- 适用于企业
2.rsyslog相关文件
- 程序包 rsyslog
- 主程序 /usr/sbin/rsyslogd
- centos 6 /etc/rc.d/init.d/rsyslog{start|stop|restart|status}
- centos 7,8 /usr/lib/systemd/system/rsyslog.service
- 配置文件 /etc/rsyslog.conf,/etc/rsyslog.d/*.conf
- 库文件 /lib64/rsyslog/*.so
3.rsyslog配置文件
/etc/rsyslog.conf配置文件格式:由三部分组成
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
RULES配置格式:
facility.priority;
#分类 优先级
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
通常的日志文件格式:/var/log/messages,cron,secure等
4.系统日志术语
facilitty:设施,从功能或程序上对日志进行归类
#内置分类
auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
#自定义的分类
local0-local7
Priority 优先级别,从低到高排序
debug
info
notice
warn(warning)
err(error)
crit(critical)
alert
emerg(panic)
5.日志管理工具 journalctl
查看所有日志
日志配置文件:
/etc/systemd/journald.conf
journalctl命令格式
journalctl [OPTIONS...] [MATCHES...]
6.日志等级
等级名称 | 说明 |
---|---|
debug (LOG_DEBUG) | 一般的调试信息说明 |
info (LOG_INFO) | 基本的通知信息 |
notice (LOG_NOTICE) | 普通信息,但是有一定的重要性 |
warning(LOG_WARNING | 警告信息,但是还不会影响到服务或系统的运行 |
error(LOG_ERR) | 错误信息,一般达到err等级的信息已经可以影响到服务和系统的运行了 |
crit (LOG_CRIT) | 临界状况信息,比err等级还要严重 |
alert (LOG_ALERT) | 状态信息,比crit等级还要严重,必须立即采取行动 |
emerg (LOG_EMERG) | 疼痛等级信息,系统已经无法使用了 |
* | 代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录 |
7.服务名称
服务名称 | 说明 |
---|---|
auth(LOG AUTH) | 安全和认证相关消息 (不推荐使用authpriv替代) |
authpriv(LOG_AUTHPRIV) | 安全和认证相关消息(私有的) |
cron (LOG_CRON) | 系统定时任务cront和at产生的日志 |
daemon (LOG_DAEMON) | 与各个守护进程相关的日志 |
ftp (LOG_FTP) | ftp守护进程产生的曰志 |
kern(LOG_KERN) | 内核产生的曰志(不是用户进程产生的) |
Iocal0-local7 (LOG_LOCAL0-7) | 为本地使用预留的服务 |
lpr (LOG_LPR) | 打印产生的日志 |
mail (LOG_MAIL) | 邮件收发信息 |
news (LOG_NEWS) | 与新闻服务器相关的日志 |
syslog (LOG_SYSLOG) | 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称) |
user (LOG_USER) | 用户等级类别的日志信息 |
uucp (LOG_UUCP> | uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中 |
8.日志文件
- /var/log/secure:系统安全日志,文本格式,应周期性分析
- /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
- /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
- /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
- /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况
- /var/log/boot.log 系统服务启动的相关信息,文本格式
- /var/log/messages :系统中大部分的信息
- /var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
[root@localhost ~]#lastb
#btmp 无法查看需要使用 lastb 来查看
root :0 :0 Tue Mar 8 01:32 - 01:32 (00:00)
root ssh:notty 192.168.91.101 Tue Mar 8 00:53 - 00:53 (00:00)
root ssh:notty 192.168.91.101 Tue Mar 8 00:50 - 00:50 (00:00)
btmp begins Tue Mar 8 00:50:35 2022
[root@localhost ~]#last
#上一次成功登录包括重启
root pts/2 192.168.91.101 Tue Mar 8 00:50 - 00:53 (00:02)
root pts/0 192.168.91.1 Mon Mar 7 23:44 still logged in
[root@localhost ~]#lastlog
#最后一次登录
四.shell服务的日志单独设置
将 ssh服务的日志 文件 独立成出来
原来ssh /var/log/secure
[root@localhost ~]#tail -f /var/log/secure
#查看ssh服务的日志位置
[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
local 0-7
[root@localhost ~]#vim /etc/rsyslog.conf
#76 行添加自己的文件位置
local6.*
/var/log/ssh.log
[root@localhost log]#systemctl restart rsyslog.service sshd
#重启服务
网络日志
#开启日志的远程传输功能在192.168.91.100 10 台左右的服务器
[root@localhost ~]#rpm -ql rsyslog
/usr/lib64/rsyslog/imtcp.so
/usr/lib64/rsyslog/imudp.so
[root@localhost ~]#ss -ntap |grep 514
[root@localhost ~]#vim /etc/rsyslog.conf
#打开19 20 行
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
[root@localhost ~]#ss -ntap |grep 514
#查看514端口是否打开
#在192.168.91.101 上设置发送到哪台主机去
[root@centos7-2 ~]#vim /etc/rsyslog.conf
#修改配置文件
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
#复制54行 改成ip地址
55 *.info;mail.none;authpriv.none;cron.none @@192.168.91.100
#两个@ 代表使用 tcp 一个代表udp
如果修改 的是udp @192.168.91.100
如果要想指定端口 @192.168.91.100:端口号
[root@centos7-2 ~]#logger "this is test log from 192.168.91.101 2"
#测试,写日志进去