找回密码
 立即注册
首页 业界区 安全 Linux-网络安全私房菜(二)

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

言晓莉 昨天 20:25
目录

  • 防火墙

    • 防火墙简单操作
    • iptables
    • tips建议

  • 系统资源篇章

    • 理解数据流
    • 输出重定向
    • stress压力测试命令
    • free命令
    • netstat命令
    • ss命令

  • 软件包篇章

    • rpm包管理
    • dpkg包管理

  • 磁盘篇章

    • MBR

      • fdisk

    • GPT(GUID)

      • gdisk

    • parted 转换分区类型
    • 查看系统的磁盘使用情况

      • lsblk

    • 文件系统类型
    • mkfs格式化文件系统
    • mount挂载分区
    • inode、block

      • inode
      • block

    • 软、硬链接






防火墙

先找到防火墙的服务名字才能开启
  1. # 先列出所有单元,过滤出fire关键字,你就会拿到完整服务名为:firewalld.service
  2. systemctl list-units  | grep fire
  3. # 查看服务状态,这个命令,其实是找到一个服务脚本文件,这个就是一个脚本来的,可以cat查看
  4. systemctl status firewalld.service
复制代码
防火墙简单操作
  1. # 列出区域模板,以及具体的信息
  2. firewall-cmd --list-all-zones
  3. # 列出所有的区域的名字
  4. firewall-cmd --get-zones
  5. # block dmz drop external home internal public trusted work
  6. # 列出当前使用的区域是
  7. firewall-cmd --get-default-zone
  8. # 查看当前的public区域,以及其详细信息
  9. # 列出当前使用的区域,以及详细信息
  10. firewall-cmd --list-all # 一般用来你添加了什么开放的端口后来查看是否添加成功
复制代码

  • 添加准入端口
  1. # 给当前的防火墙区域,添加一个策略,允许80端口通过
  2. firewall-cmd --add-port=80/tcp
复制代码

  • 针对服务名添加,比如ntp服务
  1. firewall-cmd --add-service=ntp
复制代码

  • 删除,添加规则
  1. firewall-cmd --remove-port=80/tcp
  2. firewall-cmd --remove-service=ntp
复制代码
iptables

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

  • 查看系统上所有iptables的命令
  1. iptables -L
复制代码

  • 查看到firewalld命令,添加的防火墙规则如下
  1. iptables -L |grep ntp
复制代码
tips建议
  1. # 永久性添加,加上--permanent参数即可
  2. firewall-cmd  --permanent --add-port=8000/tcp
  3. # 关于很多程序,配置不会立即生效,需要reload重新读取配置文件方可生效
  4. firewall-cmd --reload
复制代码
系统资源篇章

理解数据流

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

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

1.png
  1. # 输入重定向,原本是来自于终端的键盘输入,改为了,可以是来自于文件的输入
  2. cat < /etc/passwd
  3. # 比如用在数据库的,数据导入
  4. mysql < /opt/back.sql
复制代码

  • 2>&1
  1. # 就是当你有错误的时候,也把错误信息当做标准输出
  2. ls /oppppppppppppppppppppp   > /tmp/opt.log      2>&1
  3. # 这样就是即使有错误,也会把错误信息写入到opt.log中
复制代码
stress压力测试命令

运行多进程,测试查看cpu压力
  1. 1.安装stress工具
  2. yum install stress -y
  3. 2.使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境
  4. # --cpu 4 让4个c
  5. stress --cpu 1  --timeout 600
复制代码
free命令

2.png

netstat命令

network status,网络状态命令
  1. 命令:netstat
  2. 作用:查看网络连接状态
  3. 语法:netstat -tnlp
  4. 选项:
  5. -t:表示只列出tcp 协议的连接;(你可以看到你的nginx的运行)
  6. -n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;(netsta默认会看到机器的主机名 -n 直接显示ip)
  7. -l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;(你的nginx是否监听了0.0.0.0:80)确认端口在运行中,等待客户来访问
  8. -p:表示显示发起连接的进程pid 和进程名称; (显示使用该端口的进程的id号)
  9. -u  :查看udp连接  (ntpd服务)
  10. netstat -tunlp |grep nginx  
  11. netstat -tunlp | grep ntp
复制代码
ss命令
  1. 用法和netstat一模一样
  2. ss -tunlp |grep nginx
复制代码
在高并发场景下,也就是机器的链接数特别多的时候,使用ss性能比netstat更高一些。
软件包篇章

rpm包管理

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

  • 安装
  1. rpm -ivh xxx.rpm
  2. -i(install)  安装
  3. -v(verbose)  显示详细信息
  4. -h(hash)  显示进度
复制代码

  • 更新
  1. rpm -Uvh 软件包
  2. rpm -Fvh  软件包
  3.   -U(upgrade)  升级
  4.         upgrade:安装有旧版程序包,则“升级”  
  5.         如果不存在旧版程序包,则“安装”  
  6.         freshen:安装有旧版程序包,则“升级”  
  7.      如果不存在旧版程序包,则不执行升级操作  
  8. --oldpackage:降级  
  9. --force: 强制安装
复制代码

  • 卸载
  1. rpm -e 包名
  2.   -e(erase)  卸载
  3.   --nodeps  不检查依赖性
复制代码

  • 查询
  1. # 查询更加详细一点
  2. rpm -qi xxx
  3. # 其他参数
  4. -q 软件包名 查询已安装过的软件包名。  
  5. -qa 列出所有的已安装过的rpm包  
  6.         -qa "name*"    
  7.         -qa | grep name  
  8. -qf 查询一个文件来自于哪一个rpm包 (已安装的rpm)  
  9. -q --changelog 版本更新日志  
  10. **-qc 查询软件包的配置文件(不是所有包都有配置文件)**  
  11. -qd 查询软件包的帮助文档  
  12. -qi 查询软件包的详细信息  
  13. -ql 查询软件包所安装到系统当中的所有文件路径  
  14. -q --scripts 查询软件包自带的脚本  
  15. -q --provides 查询自身的功能(能够提供的依赖)  
  16. -qR 查询实现自身的功能需要什么能力(需要的外部依赖)  
  17. -qp[licd] rpm包 查看未安装的rpm包的各项信息
复制代码
dpkg包管理


  • 安装
  1. dpkg -i package_name.deb
复制代码

  • 查询软件包信息
  1. dpkg -l
  2. # -s参数代表查询状态(show)。它会显示软件包的详细信息,包括版本号、描述等。
  3. dpkg -s package_name
复制代码

  • 卸载
  1. dpkg -r package_name
复制代码

  • 修复损坏的软件包
  1. #  这里的--configure -a参数表示自动配置所有已安装但尚未配置的软件包
  2. dpkg --configure -a
复制代码

  • 更新
  1. dpkg --update-availabilities
复制代码

  • 搜索相关软件包
  1. # 这个命令会在已安装的软件包中搜索名称或描述中包含package_name的软件包
  2. # 注意和-s参数不一样,-s是搜索你给出的这个软件包的详细信息
  3. dpkg --search package_name
复制代码

  • 强制忽略依赖关系安装
  1. # --force-depends参数表示忽略依赖问题。但请注意,这可能导致系统不稳定,应谨慎使用。
  2. 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)数:就是盘片的数量。


  • 查看磁盘情况
  1. # df看的是挂载之后的硬盘信息
  2. dh -f
  3. lsblk
复制代码
MBR

MBR极限是2TB容量
在linux中,分区默认是4个主分区=3个主分区+1个扩展分区
这个扩展分区的意思是记录后面你非主分区的扩展分区中有多少大小
3.png

注意mbr中四个主分区里有一个是扩展分区(逻辑上的主分区),但是他不属于后面的那个扩展分区
他这个的的意思是主分区里有一个叫做扩展分区的东西,这个东西是记录你扩展分区有多大,然后接下来后面的扩展分区中进行逻辑分区的时候要用
4.png

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

只能操作MBR格式
语法格式:fdisk 要进行分区的磁盘
常用参数:
-b指定每个分区的大小-l列出指定的外围设备的分区表状况-s将指定的分区大小输出到标准输出上,单位为区块-u搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址-v显示版本信息-m查看全部可用参数-n添加新的分区-d删除某个分区信息-t改变某个分区的类型-p查看分区表信息-w保存并退出-q不保存直接退出

  • partx刷新分区
  1. # 当你fdisk分区玩了之后,看不到分区的信息,是因为linux内核,还未更新分区表
  2. # 得使用命令,重新读取磁盘的分区,直接指定你分区的那个盘进行刷新即可
  3. partx /dev/sdb
复制代码
GPT(GUID)

他和MBR的区别就是MBR只能对2TB的大小进行操作,大于2TB的剩下的就会浪费
那么大于2TB的时候就用GPT即可,分区个数无限制,那么也就可以对更大的荣两个进行分区了

  • GPT没有扩展分区,只有主分区和逻辑分区
  • 可以使用parted命令修改磁盘分区类型,但是建议从GPT改为MBR

    • 不建议从MBR改为GPT,很麻烦

  • 请注意,fdisk是只能操作MBR的,不能操作GPT的
linux默认情况下都是MBR分区,那么我们要对一个磁盘进行转换成GPT
  1. fdisk 进入该磁盘后,使用d命令一个个分区删掉即可
复制代码
5.png

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
  1. ms-doc  这是mbr类型的名字
  2. gpt 这是GUID分区表的类型名字
  3. parted /dev/sdb
  4. 修改当前硬盘的分区表类型,改为gpt,注意如下操作会摧毁原有的数据
  5. (parted) mklabel gpt  
  6. 使用print指令,查看分区表信息,以及分区表类型
  7. (parted) print
  8. Model: VMware, VMware Virtual S (scsi)
  9. Disk /dev/sdb: 21.5GB
  10. Sector size (logical/physical): 512B/512B
  11. Partition Table: gpt
  12. Disk Flags:
  13. Number  Start  End  Size  File system  Name  Flags
  14. (parted)               
复制代码
查看系统的磁盘使用情况

lsblk

6.png

文件系统类型

7.png

文件系统类型之间的区别
8.png

mkfs格式化文件系统
  1. mkfs + tab 键补全
复制代码
你会发现很多不同的系统文件类型命令,我们根据你想要格式化的那个文件系统磁盘的类型,使用对应的类型命令即可进行格式化
9.png


  • 格式化xfs文件系统
  1. # 比如/dev/sdc1是xfs类型的
  2. mkfs.xfs /dev/sdc1
复制代码
mount挂载分区

10.png


  • mount挂载分区简单使用
  1. # mount挂载命令
  2. # mount 设备名      挂载点
  3. mount /dev/sdc1 /opt/my_sdc/
  4. # 挂载的参数,设置(rw)是可读可写的
  5. # 取消挂载,注意,该挂载点,无人使用,才可以取消挂载
  6. umount 挂载点
  7. # 查看挂载情况
  8. mount -l
  9. # 设置永久挂载
  10. 编辑 /etc/fstab文件即可
  11. 挂载的设备   要挂载的文件夹    你挂载文件设备的这个文件类型       后面的默认即可
  12. /dev/sdc1 /opt/my_sdc       xfs                             defaults 0 0
  13. # 完成上述设置后重启机器,mount -l 查看是否确实挂载到了,那就代表设置永久挂载成功
复制代码

  • mount命令详解
  1. 功能:加载指定的文件系统。
  2. 语法:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点]
  3. 用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件/etc/fstab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。
  4. 常用参数和选项:
  5. -a 加载文件/etc/fstab中设置的所有设备。
  6. -f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
  7. -F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
  8. -h 显示在线帮助信息。
  9. -L<标签> 加载文件系统标签为<标签>的设备。
  10. -l 显示已加载的文件系统列表(同直接执行mount)
  11. -n 不将加载信息记录在/etc/mtab文件中。
  12. -o<选项> 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
  13.     async 以非同步的方式执行文件系统的输入输出动作。
  14.     atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
  15.     auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
  16.     defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
  17.     dev 可读文件系统上的字符或块设备,取消选项为nodev。
  18.     exec 可执行二进制文件,取消选项为noexec。
  19.     loop 用来把一个文件当成硬盘分区挂接上系统。
  20.     noatime 每次存取时不更新inode的存取时间。
  21.     noauto 无法使用-a参数来加载。
  22.     nodev 不读文件系统上的字符或块设备。
  23.     noexec 无法执行二进制文件。
  24.     nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
  25.     nouser 使一位用户无法执行加载操作,默认设置。
  26.     remount 重新加载设备。通常用于改变设备的设置状态。
  27.     ro 以只读模式加载。
  28.     rw 以可读写模式加载。
  29.     suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
  30.     sync 以同步方式执行文件系统的输入输出动作。
  31.     user 可以让一般用户加载设备。
  32. -r 以只读方式加载设备。
  33. -t<文件系统类型> 指定设备的文件系统类型。常用的选项说明有:
  34.     minix Linux最早使用的文件系统。
  35.     ext2 Linux目前的常用文件系统。
  36.     msdos MS-DOS 的 FAT。
  37.     vfat Win85/98 的 VFAT。
  38.     nfs 网络文件系统。
  39.     iso9660 CD-ROM光盘的标准文件系统。
  40.     ntfs Windows NT的文件系统。
  41.     hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
  42.     auto 自动检测文件系统。
  43.     ubifs (Unsorted Block Image File System, UBIFS)无序区块镜像文件系统是用于固态存储设备上,为JFFS2的后继文件系统之一。
  44. -v 执行时显示详细的信息。
  45. -V 显示版本信息。
  46. -w 以可读写模式加载设备,默认设置。
复制代码
实际案例

  • 挂载 ISO 镜像文件
  1. # 1. 创建挂载点
  2. sudo mkdir /mnt/iso
  3. # 2. 挂载 ISO 文件
  4. sudo mount -o loop ubuntu-20.04.iso /mnt/iso
  5. # 3. 查看内容
  6. ls /mnt/iso
复制代码

  • 挂载网络共享 (NFS)
  1. # 1. 创建挂载点
  2. sudo mkdir /mnt/nfs
  3. # 2. 挂载 NFS 共享
  4. sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs
  5. # 3. 查看网络共享内容
  6. ls /mnt/nfs
复制代码

  • 挂载 Windows 共享 (CIFS/SMB)
  1. # 1. 创建挂载点
  2. sudo mkdir /mnt/windows
  3. # 2. 挂载 Windows 共享
  4. sudo mount -t cifs //192.168.1.50/shared /mnt/windows -o username=user,password=pass
  5. # 或者使用凭据文件(更安全)
  6. sudo mount -t cifs //192.168.1.50/shared /mnt/windows -o credentials=/home/user/.smbcredentials
复制代码

  • 挂载选项
  1. # 只读挂载
  2. sudo mount -o ro /dev/sdb1 /mnt/usb
  3. # 读写挂载
  4. sudo mount -o rw /dev/sdb1 /mnt/usb
  5. # 指定字符编码(解决中文乱码)
  6. sudo mount -o iocharset=utf8 /dev/sdb1 /mnt/usb
  7. # 允许普通用户访问
  8. sudo mount -o uid=1000,gid=1000 /dev/sdb1 /mnt/usb
  9. # 多个选项组合
  10. sudo mount -o rw,uid=1000,gid=1000,umask=022 /dev/sdb1 /mnt/usb
复制代码

  • 卸载文件系统
  1. # 卸载设备
  2. sudo umount /mnt/usb
  3. # 或者
  4. sudo umount /dev/sdb1
  5. # 如果设备繁忙,强制卸载
  6. sudo umount -l /mnt/usb  # 延迟卸载
  7. sudo umount -f /mnt/usb  # 强制卸载
复制代码

  • 常见问题:
  1. 设备正忙无法卸载
  2. # 查看哪个进程在使用挂载点
  3. lsof /mnt/usb
  4. fuser -m /mnt/usb
  5. # 结束相关进程或切换到其他目录
  6. 权限问题
  7. # 查看当前用户 ID 和组 ID
  8. id
  9. # 挂载时指定正确的 UID 和 GID
  10. sudo mount -o uid=1000,gid=1000 /dev/sdb1 /m
复制代码
inode、block
  1. linux读取文件内容顺序:
  2.         文件名 > inode编号 > block
复制代码
11.png

inode


  • inode的目的
  1. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
  2. 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
  3. 当你机器上有大量的无用的小文件,空文件,白白消耗inode数量,touch 创建新文件,想分配inode编号,你会发现发现不够用了,显示no space for disk
  4. (查看发现还有空间,但是你的inode数量肯定是没了)
复制代码
  1. # 查看文件,文件夹的inode号码
  2. ls -i
  3. # stat也可以看到
  4. stat xx
复制代码

  • inode存储的内容
  1. * 文件的字节数
  2. * 文件拥有者的User ID
  3. * 文件的Group ID
  4. * 文件的读、写、执行权限
  5. * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  6. * 链接数,即有多少文件名指向这个inode
  7. * 文件数据block的位置
复制代码
可以用stat命令,查看某个文件的具体inode信息
12.png

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



软连接文件存储的是源文件的路径。
  1. # 创建语法
  2. ln -s 源文件 目标文件
  3. 创建软连接 ln -s参数去创建软连接
  4. 当你访问软连接文件,其实是
  5. 访问到源文件的路径,源文件的文件名
  6. 访问源文件的inode编号  ls -i filename
  7. inode找到block,访问到数据
复制代码
软连接特点
1.软连接文件的inode号和源文件不同,作用是存储源文件的路径
2.命令ln -s创建
3.删除普通软连接,不影响源文件
4.删除源文件,软连接找不到目标,报错提示。


硬链接,就是一个数据(block)被多个相同inode号的文件指向。
硬链接,不得跨分区设置(inode号,是基于分区来创建)
  1. # 创建语法
  2. ln 源文件 目标文件
复制代码
硬链接特点
1.可以对已存在的文件做硬链接,该文件的硬链接数,至少是1,为0就表示文件不存在
2.硬链接的文件,inode相同,属性一致
3.只能在同一个磁盘分区下,同一个文件系统下创建硬链接
4.不能对文件夹创建硬链接,只有文件可以
5.删除一个硬链接,不影响其他相同inode号的文件
(也就是说等你删完所有硬链接这个文件才会消失)
6.文件夹的硬链接,默认是2个,以及是2+(第一层子目录总数)=文件夹的硬链接数量
7.可以用任意一个硬链接作为入口,操作文件(修改的其实是block中的数据)
8.当文件的硬链接数为0时,文件真的被删除

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册