Linux-网络安全私房菜(二)

文章目录

防火墙

先找到防火墙的服务名字才能开启

shell 复制代码
# 先列出所有单元,过滤出fire关键字,你就会拿到完整服务名为:firewalld.service
systemctl list-units  | grep fire

# 查看服务状态,这个命令,其实是找到一个服务脚本文件,这个就是一个脚本来的,可以cat查看
systemctl status firewalld.service

防火墙简单操作

shell 复制代码
# 列出区域模板,以及具体的信息
firewall-cmd --list-all-zones

# 列出所有的区域的名字
firewall-cmd --get-zones
# block dmz drop external home internal public trusted work

# 列出当前使用的区域是
firewall-cmd --get-default-zone 

# 查看当前的public区域,以及其详细信息
# 列出当前使用的区域,以及详细信息
firewall-cmd --list-all # 一般用来你添加了什么开放的端口后来查看是否添加成功
  • 添加准入端口
shell 复制代码
# 给当前的防火墙区域,添加一个策略,允许80端口通过
firewall-cmd --add-port=80/tcp
  • 针对服务名添加,比如ntp服务
shell 复制代码
firewall-cmd --add-service=ntp
  • 删除,添加规则
shell 复制代码
firewall-cmd --remove-port=80/tcp
firewall-cmd --remove-service=ntp

iptables

firewalld,作用其实是添加iptables的规则

  • 查看系统上所有iptables的命令
shell 复制代码
iptables -L
  • 查看到firewalld命令,添加的防火墙规则如下
shell 复制代码
iptables -L |grep ntp

tips建议

shell 复制代码
# 永久性添加,加上--permanent参数即可
firewall-cmd  --permanent --add-port=8000/tcp

# 关于很多程序,配置不会立即生效,需要reload重新读取配置文件方可生效
firewall-cmd --reload

系统资源篇章

理解数据流

执行linux命令时,linux默认为用户进程提供了3种数据流

  • stdin
    • 标准输入、0
    • 一般是键盘输入数据
    • 比如cat命令等待用户输入
  • stdout
    • 标准输出、1
    • 程序执行结果,输出到终端
  • stderr
    • 标准错误输出,代号,2
    • 程序执行结果,输出到终端

输出重定向

shell 复制代码
# 输入重定向,原本是来自于终端的键盘输入,改为了,可以是来自于文件的输入
cat < /etc/passwd

# 比如用在数据库的,数据导入
mysql < /opt/back.sql 
  • 2>&1
shell 复制代码
# 就是当你有错误的时候,也把错误信息当做标准输出
ls /oppppppppppppppppppppp   > /tmp/opt.log      2>&1
# 这样就是即使有错误,也会把错误信息写入到opt.log中

stress压力测试命令

运行多进程,测试查看cpu压力

复制代码
1.安装stress工具
yum install stress -y

2.使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境
# --cpu 4 让4个c
stress --cpu 1  --timeout 600

free命令

netstat命令

network status,网络状态命令

复制代码
命令:netstat

作用:查看网络连接状态

语法:netstat -tnlp



选项:

-t:表示只列出tcp 协议的连接;(你可以看到你的nginx的运行)

-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;(netsta默认会看到机器的主机名 -n 直接显示ip)

-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;(你的nginx是否监听了0.0.0.0:80)确认端口在运行中,等待客户来访问

-p:表示显示发起连接的进程pid 和进程名称; (显示使用该端口的进程的id号)

-u  :查看udp连接  (ntpd服务)

netstat -tunlp |grep nginx  

netstat -tunlp | grep ntp

ss命令

复制代码
用法和netstat一模一样

ss -tunlp |grep nginx

在高并发场景下,也就是机器的链接数特别多的时候,使用ss性能比netstat更高一些。

软件包篇章

rpm包管理

更详细的可以查看帮助命令--help,下面只介绍简单常用的命令

  • 安装
shell 复制代码
rpm -ivh xxx.rpm
-i(install)  安装
-v(verbose)  显示详细信息
-h(hash)  显示进度
  • 更新
shell 复制代码
rpm -Uvh 软件包

rpm -Fvh  软件包
  -U(upgrade)  升级
	upgrade:安装有旧版程序包,则"升级"  
        如果不存在旧版程序包,则"安装"  
	freshen:安装有旧版程序包,则"升级"  
     如果不存在旧版程序包,则不执行升级操作  
--oldpackage:降级  
--force: 强制安装
  • 卸载
shell 复制代码
rpm -e 包名
  -e(erase)  卸载
  --nodeps  不检查依赖性
  • 查询
shell 复制代码
# 查询更加详细一点
rpm -qi xxx


# 其他参数
-q 软件包名 查询已安装过的软件包名。  
-qa 列出所有的已安装过的rpm包  
	-qa "name*"    
	-qa | grep name  
-qf 查询一个文件来自于哪一个rpm包 (已安装的rpm)  
-q --changelog 版本更新日志  
**-qc 查询软件包的配置文件(不是所有包都有配置文件)**  
-qd 查询软件包的帮助文档  
-qi 查询软件包的详细信息  
-ql 查询软件包所安装到系统当中的所有文件路径  
-q --scripts 查询软件包自带的脚本  
-q --provides 查询自身的功能(能够提供的依赖)  
-qR 查询实现自身的功能需要什么能力(需要的外部依赖)  
-qp[licd] rpm包 查看未安装的rpm包的各项信息

dpkg包管理

  • 安装
shell 复制代码
dpkg -i package_name.deb
  • 查询软件包信息
shell 复制代码
dpkg -l

# -s参数代表查询状态(show)。它会显示软件包的详细信息,包括版本号、描述等。
dpkg -s package_name
  • 卸载
shell 复制代码
dpkg -r package_name
  • 修复损坏的软件包
shell 复制代码
#  这里的--configure -a参数表示自动配置所有已安装但尚未配置的软件包
dpkg --configure -a
  • 更新
shell 复制代码
dpkg --update-availabilities
  • 搜索相关软件包
shell 复制代码
# 这个命令会在已安装的软件包中搜索名称或描述中包含package_name的软件包
# 注意和-s参数不一样,-s是搜索你给出的这个软件包的详细信息
dpkg --search package_name
  • 强制忽略依赖关系安装
shell 复制代码
# --force-depends参数表示忽略依赖问题。但请注意,这可能导致系统不稳定,应谨慎使用。
dpkg --force-depends -i package_name.deb

磁盘篇章

磁盘

l 磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头;

l 磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据;

l 柱面(cylinder)数:同磁道数量;

l 扇区(sector)数:每个磁道都别切分成很多扇形区域,每道的扇区数量相同,扇区大小是0.5KB是512字节,文件存储在硬盘中,最小存储单位就是扇区。

l 磁头读取扇区数据,是读取连续的多个扇区,称之为block(块)

l 圆盘(platter)数:就是盘片的数量。

  • 查看磁盘情况
shell 复制代码
# df看的是挂载之后的硬盘信息
dh -f 
或
lsblk

MBR

MBR极限是2TB容量


在linux中,分区默认是4个主分区=3个主分区+1个扩展分区

这个扩展分区的意思是记录后面你非主分区的扩展分区中有多少大小

注意mbr中四个主分区里有一个是扩展分区(逻辑上的主分区),但是他不属于后面的那个扩展分区

他这个的的意思是主分区里有一个叫做扩展分区的东西,这个东西是记录你扩展分区有多大,然后接下来后面的扩展分区中进行逻辑分区的时候要用


一定要弄清楚上面的几个分区的情况,我们在对MBR进行分区的时候一定要了解分到哪个地方了才行。


fdisk

只能操作MBR格式

语法格式:fdisk 要进行分区的磁盘

常用参数:

-b 指定每个分区的大小
-l 列出指定的外围设备的分区表状况
-s 将指定的分区大小输出到标准输出上,单位为区块
-u 搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v 显示版本信息
-m 查看全部可用参数
-n 添加新的分区
-d 删除某个分区信息
-t 改变某个分区的类型
-p 查看分区表信息
-w 保存并退出
-q 不保存直接退出
  • partx刷新分区
shell 复制代码
# 当你fdisk分区玩了之后,看不到分区的信息,是因为linux内核,还未更新分区表
# 得使用命令,重新读取磁盘的分区,直接指定你分区的那个盘进行刷新即可
partx /dev/sdb

GPT(GUID)

他和MBR的区别就是MBR只能对2TB的大小进行操作,大于2TB的剩下的就会浪费

那么大于2TB的时候就用GPT即可,分区个数无限制,那么也就可以对更大的荣两个进行分区了

  • GPT没有扩展分区,只有主分区和逻辑分区
  • 可以使用parted命令修改磁盘分区类型,但是建议从GPT改为MBR
    • 不建议从MBR改为GPT,很麻烦
  • 请注意,fdisk是只能操作MBR的,不能操作GPT的

linux默认情况下都是MBR分区,那么我们要对一个磁盘进行转换成GPT

shell 复制代码
fdisk 进入该磁盘后,使用d命令一个个分区删掉即可

gdisk

完整的菜单如下:

b 将GPT数据备份到一个文件 c 更改分区名称 d 删除一个分区 i 显示分区详细信息 l 列出已知分区类型。此处8200是Linux swap,8300是Linux filesystem(对应fdisk的82和83)。还有一个8e00是Linux LVM n 增加一个新的分区 o 创建一个新的空白的GPT分区表 p 显示当前磁盘的分区表 q 退出gdisk程序,不保存任何修改 r 恢复和转换选项(仅限专家) s 排序分区 t 改变分区的类型 v 验证磁盘分区表 w 将分区表写入裁判并退出(保存并退出) x 额外功能(仅限专家) ? 显示帮助信息

parted 转换分区类型

使用parted命令修改磁盘分区类型,但是是从GPT改为MBR

复制代码
ms-doc  这是mbr类型的名字
gpt 这是GUID分区表的类型名字

parted /dev/sdb 
修改当前硬盘的分区表类型,改为gpt,注意如下操作会摧毁原有的数据
(parted) mklabel gpt  
使用print指令,查看分区表信息,以及分区表类型
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted)               

查看系统的磁盘使用情况

lsblk

文件系统类型

文件系统类型之间的区别

mkfs格式化文件系统

shell 复制代码
mkfs + tab 键补全

你会发现很多不同的系统文件类型命令,我们根据你想要格式化的那个文件系统磁盘的类型,使用对应的类型命令即可进行格式化

  • 格式化xfs文件系统
shell 复制代码
# 比如/dev/sdc1是xfs类型的
mkfs.xfs /dev/sdc1

mount挂载分区

  • mount挂载分区简单使用

    mount挂载命令

    mount 设备名 挂载点

    mount /dev/sdc1 /opt/my_sdc/

    挂载的参数,设置(rw)是可读可写的

    取消挂载,注意,该挂载点,无人使用,才可以取消挂载

    umount 挂载点

    查看挂载情况

    mount -l

    设置永久挂载

    编辑 /etc/fstab文件即可
    挂载的设备 要挂载的文件夹 你挂载文件设备的这个文件类型 后面的默认即可
    /dev/sdc1 /opt/my_sdc xfs defaults 0 0

    完成上述设置后重启机器,mount -l 查看是否确实挂载到了,那就代表设置永久挂载成功

  • mount命令详解

shell 复制代码
功能:加载指定的文件系统。 

语法:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点] 

用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件/etc/fstab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。 

常用参数和选项: 

-a 加载文件/etc/fstab中设置的所有设备。 
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。 
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。 
-h 显示在线帮助信息。 
-L<标签> 加载文件系统标签为<标签>的设备。 
-l 显示已加载的文件系统列表(同直接执行mount) 
-n 不将加载信息记录在/etc/mtab文件中。 
-o<选项> 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括: 
    async 以非同步的方式执行文件系统的输入输出动作。 
    atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。 
    auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。 
    defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。 
    dev 可读文件系统上的字符或块设备,取消选项为nodev。 
    exec 可执行二进制文件,取消选项为noexec。 
    loop 用来把一个文件当成硬盘分区挂接上系统。 
    noatime 每次存取时不更新inode的存取时间。 
    noauto 无法使用-a参数来加载。 
    nodev 不读文件系统上的字符或块设备。 
    noexec 无法执行二进制文件。 
    nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。 
    nouser 使一位用户无法执行加载操作,默认设置。 
    remount 重新加载设备。通常用于改变设备的设置状态。 
    ro 以只读模式加载。 
    rw 以可读写模式加载。 
    suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。 
    sync 以同步方式执行文件系统的输入输出动作。 
    user 可以让一般用户加载设备。 
-r 以只读方式加载设备。 
-t<文件系统类型> 指定设备的文件系统类型。常用的选项说明有: 
    minix Linux最早使用的文件系统。 
    ext2 Linux目前的常用文件系统。 
    msdos MS-DOS 的 FAT。 
    vfat Win85/98 的 VFAT。 
    nfs 网络文件系统。 
    iso9660 CD-ROM光盘的标准文件系统。 
    ntfs Windows NT的文件系统。 
    hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 
    auto 自动检测文件系统。 
    ubifs (Unsorted Block Image File System, UBIFS)无序区块镜像文件系统是用于固态存储设备上,为JFFS2的后继文件系统之一。
-v 执行时显示详细的信息。 
-V 显示版本信息。 
-w 以可读写模式加载设备,默认设置。

实际案例

  • 挂载 ISO 镜像文件
shell 复制代码
# 1. 创建挂载点
sudo mkdir /mnt/iso

# 2. 挂载 ISO 文件
sudo mount -o loop ubuntu-20.04.iso /mnt/iso

# 3. 查看内容
ls /mnt/iso
  • 挂载网络共享 (NFS)
shell 复制代码
# 1. 创建挂载点
sudo mkdir /mnt/nfs

# 2. 挂载 NFS 共享
sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs

# 3. 查看网络共享内容
ls /mnt/nfs
  • 挂载 Windows 共享 (CIFS/SMB)
shell 复制代码
# 1. 创建挂载点
sudo mkdir /mnt/windows

# 2. 挂载 Windows 共享
sudo mount -t cifs //192.168.1.50/shared /mnt/windows -o username=user,password=pass

# 或者使用凭据文件(更安全)
sudo mount -t cifs //192.168.1.50/shared /mnt/windows -o credentials=/home/user/.smbcredentials
  • 挂载选项
shell 复制代码
# 只读挂载
sudo mount -o ro /dev/sdb1 /mnt/usb

# 读写挂载
sudo mount -o rw /dev/sdb1 /mnt/usb

# 指定字符编码(解决中文乱码)
sudo mount -o iocharset=utf8 /dev/sdb1 /mnt/usb

# 允许普通用户访问
sudo mount -o uid=1000,gid=1000 /dev/sdb1 /mnt/usb

# 多个选项组合
sudo mount -o rw,uid=1000,gid=1000,umask=022 /dev/sdb1 /mnt/usb
  • 卸载文件系统
shell 复制代码
# 卸载设备
sudo umount /mnt/usb
# 或者
sudo umount /dev/sdb1

# 如果设备繁忙,强制卸载
sudo umount -l /mnt/usb  # 延迟卸载
sudo umount -f /mnt/usb  # 强制卸载
  • 常见问题:
shell 复制代码
设备正忙无法卸载
# 查看哪个进程在使用挂载点
lsof /mnt/usb
fuser -m /mnt/usb
# 结束相关进程或切换到其他目录



权限问题
# 查看当前用户 ID 和组 ID
id
# 挂载时指定正确的 UID 和 GID
sudo mount -o uid=1000,gid=1000 /dev/sdb1 /m

inode、block

shell 复制代码
linux读取文件内容顺序:
	文件名 > inode编号 > block

inode

  • inode的目的
shell 复制代码
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

当你机器上有大量的无用的小文件,空文件,白白消耗inode数量,touch 创建新文件,想分配inode编号,你会发现发现不够用了,显示no space for disk
(查看发现还有空间,但是你的inode数量肯定是没了)
shell 复制代码
# 查看文件,文件夹的inode号码
ls -i

# stat也可以看到
stat xx
  • inode存储的内容
shell 复制代码
* 文件的字节数

* 文件拥有者的User ID

* 文件的Group ID

* 文件的读、写、执行权限

* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

* 链接数,即有多少文件名指向这个inode

* 文件数据block的位置

可以用stat命令,查看某个文件的具体inode信息

block

复制代码
block是linux实际存储数据的空间,是8个连续的扇区,(8*512bytes=4KB)
单个大文件需要用多个block来存储
特别小的文件即使不满足4KB,也只能浪费其空间。

1 block =4kb

软、硬链接

软连接文件存储的是源文件的路径。

复制代码
# 创建语法
ln -s 源文件 目标文件

创建软连接 ln -s参数去创建软连接
↓
当你访问软连接文件,其实是
↓
访问到源文件的路径,源文件的文件名
↓
访问源文件的inode编号  ls -i filename
↓
inode找到block,访问到数据

软连接特点

1.软连接文件的inode号和源文件不同,作用是存储源文件的路径

2.命令ln -s创建

3.删除普通软连接,不影响源文件

4.删除源文件,软连接找不到目标,报错提示。

硬链接,就是一个数据(block)被多个相同inode号的文件指向。
硬链接,不得跨分区设置(inode号,是基于分区来创建)

shell 复制代码
# 创建语法
ln 源文件 目标文件

硬链接特点

1.可以对已存在的文件做硬链接,该文件的硬链接数,至少是1,为0就表示文件不存在

2.硬链接的文件,inode相同,属性一致

3.只能在同一个磁盘分区下,同一个文件系统下创建硬链接

4.不能对文件夹创建硬链接,只有文件可以

5.删除一个硬链接,不影响其他相同inode号的文件
(也就是说等你删完所有硬链接这个文件才会消失)

6.文件夹的硬链接,默认是2个,以及是2+(第一层子目录总数)=文件夹的硬链接数量

7.可以用任意一个硬链接作为入口,操作文件(修改的其实是block中的数据)

8.当文件的硬链接数为0时,文件真的被删除

相关推荐
SPC的存折5 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧6 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩6 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7776 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
我是伪码农7 小时前
外卖餐具智能推荐
linux·服务器·前端
汤愈韬8 小时前
下一代防火墙通用原理
运维·服务器·网络·security
皮皮林5518 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH8 小时前
Linux 的 od 命令
linux·运维·服务器·bash
Kk.08029 小时前
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
linux·运维·算法
有代理ip9 小时前
网络隐私防护指南:代理服务与换 IP 工具的科学结合
网络·tcp/ip·web安全