临时关闭防火墙
[root@localhost ~]#systemctl stop firewalld //临时关闭防火墙
[root@localhost ~]#systemctl disable firewalld //关闭防火墙的自启功能
[root@localhost ~]#setenforce 0 //对文件的修改进行严重
永久关闭重启以后也不会打开selinux
[root@localhost ~]#vim /etc/sysconfig/selinux 修改配置文件
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled 修改一下写入配置文件即可
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
一台Linux系统初始化环境后需要做一些什么安全工作?
1、添加普通用户登陆,禁止 root用户登陆,更改SSH端口号。修改SSH端口不一定绝对哈。当然,如果要暴露在外网,建议改下。
2、服务器使用密钥登陆,禁止密码登陆。
3、开启防火墙,关闭SElinux ,根据业务需求设置相应的防火墙规则。
4、装fail2ban这种防止SSH 暴力破击的软件。
5、设置只允许公司办公网出口IP能登陆服务器(看公司实际需要),也可以安装VPN等软件,只允许连接VPN到服务器上。
6、修改历史命令记录的条数为10条。
7、只允许有需要的服务器可以访问外网,其它全部禁止。
8、做好软件层面的防护。
(1)设置nginx_waf模块防止SQL 注入。
(2)把 web 服务使用www 用户启动。更改网站目录的所有者和所厘组为www
inode和block
- 文件数据包括元信息与实际数据。
- 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。
- block(块)
- 连续的八个扇区组成一个block
- 是文件存取的最小单位
- inode(索引节点)
- 中文译名为“索引节点”,也叫 i 节点
- 用于存储文件元信息
- 一个文件必须占用一个inode ,至少占用一个block
inode和block关系
-
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
-
一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
-
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。 因此,一个文件必须占用一个inode,并且至少占用一个block。
-
inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
-
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。
-
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找自己文件夹中的目录项,之后找到对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
inode
- inode包含文件元信息 (不包含文件名)
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读,写,执行权限
- 文件的时间戳
- 用stat命令可以查看到某个文件的inode信息
- Linux系统文件三个主要的时间属性
- atime(access time):最近访问
- 最后一次访问文件的时间
- mtime(modify):最近更改
- 最后一次更改文件内容的时间
- ctime(change time):最近改动
- 最后一次改变文件元信息的时间
不打开文件,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
修改文件内容的话,mtime会变,ctime也会变。
如果只修改文件的权限,ctime变,mtime不变。
- 目录文件的架构
- 目录也是一种文件
- 目录文件的架构
- 每个icode都有一个号码,操作系统用inode号码来识别用不同的文件
- Linux 系统内部不使用文件名,而使用inode号码来识别文件
- 对于用户,文件名只是inode号码便于识别的别称
inode的号码
- 用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息,找到文件数据所在的block,读出数据
- 查看inode号码的方法
ls -i命令查看文件名对应的inode号码-
stat命令查看文件inode信息中的inode号码
文件存储
- 硬盘分区后的架构
补充:
- 用户通过文件名查找到对应的inode号
- 根据inode好找到对应的inode信息
- 根据inode信息判断是否具有访问权限
- 如果有访问权限指向对应的数据块
- 如果权限不够拒绝访问
inode大小
inode也会消耗硬盘空间
- 每个inode的大小一般是128字节或256字节
格式化文件系统时确定inode的总数
- 如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。
- inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。
执行df-i命令可以查看每个磁盘分区对应的inode 总数和已经使用的inode数量
[root@localhost ~]#df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 31457280 123302 31333978 1% /
devtmpfs 250009 407 249602 1% /dev
tmpfs 253989 1 253988 1% /dev/shm
tmpfs 253989 572 253417 1% /run
tmpfs 253989 16 253973 1% /sys/fs/cgroup
/dev/sda1 2097152 327 2096825 1% /boot
tmpfs 253989 9 253980 1% /run/user/42
tmpfs 253989 1 253988 1% /run/user/0
由于_inode号码与文件名分离,导致Linx系统具备以下几种特有的现象:
- 文件名包含特殊字符,可能无法正常删余。这时直接删除inode,能够起到删除文件的作用;
[root@localhost ~]#touch '#abc001' //新建一个带有特殊符号的文件
[root@localhost ~]#ls -il //查看inode号
67170393 -rw-r--r--. 1 root root 0 8月 14 16:55 #abc001
[root@localhost ~]#find ./ -inum 67170393 -delete //通过inode号删除文件
[root@localhost ~]#find ./ -inum 67170393 -exec rm -f {} \; //通过inode号删除文件
[root@localhost ~]#find ./ -inum 67170393 |xargs rm -f //通过inode号删除文件
- 移动文件或重命名文件,只是改变文件名,不影响inode号码
[root@localhost data]#ls -i
34680227 123
[root@localhost data]#mv 123 /root/321
[root@localhost ~]#ls -i
34680227 321
- 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。4.使用vi编辑器修改文件数据保存后,会生成一个新的inode号码。
[root@localhost data]#ls -i
34680227 123
[root@localhost ~]#vi 321
[root@localhost ~]#ls -i
67170415 321
[root@localhost ~]#echo 1235 >321 //不会改变inode号
[root@localhost ~]#ls -i
67170415 321
inode号特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
- 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
- 移动或重命名文件时,只改变文件名,不影响inode号码
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
cp命令和inode:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm命令和inode:
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖 mv和inode
- 如果mv命令的目标和源在同一设备,
- 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
- 删除旧的目录对应关系新建目录对应关系
软链接与硬链接
| 对比项 | 硬链接 | 软链接 |
|---|---|---|
| 本质 | 本质是同一个文件 | 本质不是同一个文件 |
| inode | 和源文件相同 | 和源文件不同 |
| 链接数 | 创建新的硬链接,链接数会增加;删除硬链接,链接数减少 | 删除新建不会改变 |
| 目录 | 不支持给目录创建 | 支持 |
| 删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问链接文件 |
| 文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
| 文件大小 | 和源文件相同 | 源文件的路径的长度 |
| 能否交叉文件系统 | 不支持 | 支持 |
| 对不存在的文件 | 不支持创建硬链接 | 支持创建软链接 |
软链接与硬链接(必须使用绝对路径)
ln 源文件 目标文件 //创建硬链接文件
ln -s 源文件或目录 目标文件 //创建软链接文件
| 软链接 | 硬链接 | |
|---|---|---|
| 删除原始文件后 | 失效 | 仍旧可用 |
| 使用范围 | 适用于文件或目录 | 只可用于文件 |
| 保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统(如一个Linux分区)内 |
模拟inode节点耗尽实验
添加一个新硬盘
管理磁盘,创建磁盘
把文件系统类型格式化为ext3
创建一个目录用来挂载
使用touch创建7700个文件,查看超出inode值是否可创建
经过查看挂载表,发现已用容量仅555k,却无法再创建文件
文件恢复extundelete
-
删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字。Linux是通过Link的数量来控制文件删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。 在Linux系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过"回收站"找回的情况,比如使用"rm -rf"来删除数据。针对Linux下的EXT文件系统,可用的恢复工具有debugfs、 ext3grep、extundelete等。其中extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统。
-
使用extundelete工具如何恢复误删除的文件步骤:
-
在编译安装extundelete之前需要先安装两个依赖包e2fsprogs-libs和e2fsprogs-devel,这两个包在系统安装光盘的/Package目录下就有,使用rpm或yum命令将其安装。
[root@localhost ~]# yum install e2fsprogs-devel e2fsprogs-libs -y 先安装2个依赖包
[root@localhost ~]# cd /opt 把安装文件拖入/opt下
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar jxvf extundelete-0.2.4.tar.bz2 解压缩该文件
[root@localhost extundelete-0.2.4]# ls
acinclude.m4 config.h.in depcomp Makefile.am README
aclocal.m4 configure install-sh Makefile.in src
autogen.sh configure.ac LICENSE missing
[root@localhost extundelete-0.2.4]# ./configure 编译安装
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make
[root@localhost extundelete-0.2.4]# make install
验证恢复,只对ext3文件有效
[root@localhost ~]# df -Th|tail -n 2 创建分区并挂载
/dev/sdb1 ext3 9.8G 23M 9.2G 1% /zy1
/dev/sdb2 ext4 9.8G 37M 9.2G 1% /zy2
[root@localhost zy1]# echo a>a 在只zy1和zy2里建立同样的内容,后证txt4确实不支持
[root@localhost zy1]# echo a>b
[root@localhost zy1]# echo a>c
[root@localhost zy1]# echo a>d
[root@localhost zy1]# ls
a b c d lost+found
[root@localhost zy1]# rm -rf a d 模拟删除a和d
[root@localhost ~]# umount /zy1 在家目录下解挂
[root@localhost ~]# extundelete /dev/sdb1 --inode 2 查看分区下存在哪些文件
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
a 12 Deleted
b 13
c 14
d 15 Deleted
[root@localhost ~]# extundelete /dev/sdb1 --restore-all 使用恢复
[root@localhost ~]# ls 使用ls查看可以看见多了一个RECOVERED_FILES文件夹
[root@localhost RECOVERED_FILES]# ls 查看文件夹里的文件可以找到已删除的文件
a d
xfs文件的恢复
xfsdump命令格式
xfsdump-f //备份存放位置要备份的路径或设备文件
xfsdump备份级别(默认为0)
0:完全备份
1-9:增量备份
xfsdump常用选项
| 选项 | 含义 |
|---|---|
| -f | 指定备份文件目录 |
| -L | 指定标签session label |
| -M | 指定设备标签media label |
| -S | 备份单个文件,-s后面不能直接跟路径 |
xfsrestore命令格式
xfsrestore -f //恢复文件的位置存放恢复后文件的位置
使用xfsdump时,需要注意以下的几个限制:
-
不支持没有挂载的文件系统备份,所以只能备份已挂载的;
-
必须使用root的权限才能操作;
-
只能备份XFS文件系统;
-
备份下来的数据只能让xfsrestore解析;
-
不能备份两个具有相同UUID的文件系统(可使用blkid查看)
删除文件后空间不释放的处理方法
删除文件后,如果磁盘空间没有释放,是因为文件正在被其他人打开。 其他人退出使用该文件后空间会被释放。
可以使用 w 命令或 lsof 命令查看是否有人在使用该文件。
如果确定有人打开了该文件,可以使用三种方法释放空间:
1.echo " " > f1.txt //将被打开的文件变成空文件,依赖shell环境
2.cat /dev/null > f1.txt //导入空文件
3.lsof | grep f1.txt //查看被删除的文件和对应PID,之后杀死该进程
kill -9 PID
日志文件
日志的功能:
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类:
-
内核及系统日志:
这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。
-
用户日志:
记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
-
程序日志:
有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。
日志保存位置:
- 默认位于:/var/log 目录下
主要日志文件介绍:
| 日志 | 位置 | 描述 |
|---|---|---|
| 内核及公共消息日志 | /var/log/messages | 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出。 |
| 计划任务日志 | /var/log/cron | 记录与系统定时任务相关的曰志 |
| 系统引导日志 | /var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。 |
| 邮件系统日志 | /var/log/maillog | 记录邮件信息的曰志 |
| 用户登录日志: | /var/log/lastlog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看。 |
| 同上 | /var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
| 同上 | /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看。 |
| 同上 | /var/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看。 |
vim /etc/rsyslog.conf 查看rsyslog。conf配置文件
*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none 表示某事件的信息不写到日志文件里(这里比如是邮件)
内核及系统日志
由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。
- 软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
- 主要程序:/sbin/rsyslogd
- 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)
日志消息的级别:
| 级号 | 消息 | 级别 | 说明 |
|---|---|---|---|
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
| 2 | CRIT | 严重 | 比较严重的情况 |
| 3 | ERR | 错误 | 运行出现错误 |
| 4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
| 5 | NOTICE | 注意 | 不会影响系统但值得注意 |
| 6 | INFO | 信息 | 一般信息 |
| 7 | DEBUG | 调试 | 程序或系统调试信息等 |
日志记录的一般格式:
- 事件产生的时间。
- 产生事件的服务器的主机名。
- 产生事件的服务名或程序名。
- 事件的具体信息。
用户日志分析
保存了用户登录、退出系统等相关信息:
- /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
- /var/log/secure:与用户验证有关的安全性事件。
- /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
- /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。
分析工具:
- users、who、w、last、lastb
users:查询最近三次登录的用户信息。
users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
[root@localhost ~]# users
root root
who:查看当前登录的用户、终端、登录时间、IP地址。 who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可
以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用
户名、终端类型、登录日期及远程主机。
[root@localhost ~]# who
root pts/0 2022-09-19 20:51 (192.168.100.199)
root pts/1 2022-09-19 23:17 (192.168.100.199)
w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
[root@localhost ~]# w
23:25:58 up 2:07, 2 users, load average: 0.00, 0.01, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.199 20:51 2:34m 0.03s 0.03s -bash
root pts/1 192.168.100.199 23:17 6.00s 0.03s 0.01s w
last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。
last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
[root@localhost ~]# last -n 3 //查看最近3次登录信息
root pts/1 192.168.100.199 Mon Sep 19 23:17 still logged in
root pts/0 192.168.100.199 Mon Sep 19 20:51 still logged in
reboot system boot 3.10.0-693.el7.x Mon Sep 19 20:50 - 23:26 (02:35)
wtmp begins Wed Aug 17 16:50:28 2022
[root@localhost ~]# last -t 20220305200000 |head -5 //查看2022年3月5日20点之前的登录信息
wtmp begins Wed Aug 17 16:50:28 2022
lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息。
lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
[root@localhost ~]# lastb
btmp begins Mon Sep 19 20:50:49 2022
程序日志分析
由相应的应用程序独立进行管理:
-
Web服务:/var/log/httpd/
- access_log、error_log
-
代理服务:/var/log/squid
- access.log、cache.log
-
FTP服务:/var/log/xferlog
分析工具:
- 文本查看、grep过滤检索、Webmin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
日志管理策略
-
及时做好备份和归档
-
延长日志保存期限
-
控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等。
-
集中管理日志
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一收集、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改或删除