Stories

Detail Return Return

Linux-網絡安全私房菜(二) - Stories Detail

目錄
  • 防火牆
    • 防火牆簡單操作
    • iptables
    • tips建議
  • 系統資源篇章
    • 理解數據流
    • 輸出重定向
    • stress壓力測試命令
    • free命令
    • netstat命令
    • ss命令
  • 軟件包篇章
    • rpm包管理
    • dpkg包管理
  • 磁盤篇章
    • MBR
      • fdisk
    • GPT(GUID)
      • gdisk
    • parted 轉換分區類型
    • 查看系統的磁盤使用情況
      • lsblk
    • 文件系統類型
    • mkfs格式化文件系統
    • mount掛載分區
    • inode、block
      • inode
      • block
    • 軟、硬鏈接

防火牆

先找到防火牆的服務名字才能開啓

# 先列出所有單元,過濾出fire關鍵字,你就會拿到完整服務名為:firewalld.service
systemctl list-units  | grep fire

# 查看服務狀態,這個命令,其實是找到一個服務腳本文件,這個就是一個腳本來的,可以cat查看
systemctl status firewalld.service

防火牆簡單操作

# 列出區域模板,以及具體的信息
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 # 一般用來你添加了什麼開放的端口後來查看是否添加成功
  • 添加准入端口
# 給當前的防火牆區域,添加一個策略,允許80端口通過
firewall-cmd --add-port=80/tcp
  • 針對服務名添加,比如ntp服務
firewall-cmd --add-service=ntp
  • 刪除,添加規則
firewall-cmd --remove-port=80/tcp
firewall-cmd --remove-service=ntp

iptables

firewalld,作用其實是添加iptables的規則

  • 查看系統上所有iptables的命令
iptables -L
  • 查看到firewalld命令,添加的防火牆規則如下
iptables -L |grep ntp

tips建議

# 永久性添加,加上--permanent參數即可
firewall-cmd  --permanent --add-port=8000/tcp

# 關於很多程序,配置不會立即生效,需要reload重新讀取配置文件方可生效
firewall-cmd --reload

系統資源篇章

理解數據流

執行linux命令時,linux默認為用户進程提供了3種數據流

  • stdin
      - 標準輸入、0
      - 一般是鍵盤輸入數據
      - 比如cat命令等待用户輸入
  • stdout
      - 標準輸出、1
      - 程序執行結果,輸出到終端
  • stderr
      - 標準錯誤輸出,代號,2
      - 程序執行結果,輸出到終端

輸出重定向

# 輸入重定向,原本是來自於終端的鍵盤輸入,改為了,可以是來自於文件的輸入
cat < /etc/passwd

# 比如用在數據庫的,數據導入
mysql < /opt/back.sql 
  • 2>&1
# 就是當你有錯誤的時候,也把錯誤信息當做標準輸出
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,下面只介紹簡單常用的命令

  • 安裝
rpm -ivh xxx.rpm
-i(install)  安裝
-v(verbose)  顯示詳細信息
-h(hash)  顯示進度
  • 更新
rpm -Uvh 軟件包

rpm -Fvh  軟件包
  -U(upgrade)  升級
	upgrade:安裝有舊版程序包,則“升級”  
        如果不存在舊版程序包,則“安裝”  
	freshen:安裝有舊版程序包,則“升級”  
     如果不存在舊版程序包,則不執行升級操作  
--oldpackage:降級  
--force: 強制安裝
  • 卸載
rpm -e 包名
  -e(erase)  卸載
  --nodeps  不檢查依賴性
  • 查詢
# 查詢更加詳細一點
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包管理

  • 安裝
dpkg -i package_name.deb
  • 查詢軟件包信息
dpkg -l

# -s參數代表查詢狀態(show)。它會顯示軟件包的詳細信息,包括版本號、描述等。
dpkg -s package_name
  • 卸載
dpkg -r package_name
  • 修復損壞的軟件包
#  這裏的--configure -a參數表示自動配置所有已安裝但尚未配置的軟件包
dpkg --configure -a
  • 更新
dpkg --update-availabilities
  • 搜索相關軟件包
# 這個命令會在已安裝的軟件包中搜索名稱或描述中包含package_name的軟件包
# 注意和-s參數不一樣,-s是搜索你給出的這個軟件包的詳細信息
dpkg --search package_name
  • 強制忽略依賴關係安裝
# --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)數:就是盤片的數量。

  • 查看磁盤情況
# 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刷新分區
# 當你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

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格式化文件系統

mkfs + tab 鍵補全

你會發現很多不同的系統文件類型命令,我們根據你想要格式化的那個文件系統磁盤的類型,使用對應的類型命令即可進行格式化

  • 格式化xfs文件系統
# 比如/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命令詳解
功能:加載指定的文件系統。 

語法: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 鏡像文件
# 1. 創建掛載點
sudo mkdir /mnt/iso

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

# 3. 查看內容
ls /mnt/iso
  • 掛載網絡共享 (NFS)
# 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)
# 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
  • 掛載選項
# 只讀掛載
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
  • 卸載文件系統
# 卸載設備
sudo umount /mnt/usb
# 或者
sudo umount /dev/sdb1

# 如果設備繁忙,強制卸載
sudo umount -l /mnt/usb  # 延遲卸載
sudo umount -f /mnt/usb  # 強制卸載
  • 常見問題:
設備正忙無法卸載
# 查看哪個進程在使用掛載點
lsof /mnt/usb
fuser -m /mnt/usb
# 結束相關進程或切換到其他目錄



權限問題
# 查看當前用户 ID 和組 ID
id
# 掛載時指定正確的 UID 和 GID
sudo mount -o uid=1000,gid=1000 /dev/sdb1 /m

inode、block

linux讀取文件內容順序:
	文件名 > inode編號 > block

inode

  • inode的目的
文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB)。

操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。

當你機器上有大量的無用的小文件,空文件,白白消耗inode數量,touch 創建新文件,想分配inode編號,你會發現發現不夠用了,顯示no space for disk
(查看發現還有空間,但是你的inode數量肯定是沒了)
# 查看文件,文件夾的inode號碼
ls -i

# stat也可以看到
stat xx
  • inode存儲的內容
* 文件的字節數

* 文件擁有者的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號,是基於分區來創建)

# 創建語法
ln 源文件 目標文件

硬鏈接特點
1.可以對已存在的文件做硬鏈接,該文件的硬鏈接數,至少是1,為0就表示文件不存在
2.硬鏈接的文件,inode相同,屬性一致
3.只能在同一個磁盤分區下,同一個文件系統下創建硬鏈接
4.不能對文件夾創建硬鏈接,只有文件可以
5.刪除一個硬鏈接,不影響其他相同inode號的文件
(也就是説等你刪完所有硬鏈接這個文件才會消失)
6.文件夾的硬鏈接,默認是2個,以及是2+(第一層子目錄總數)=文件夾的硬鏈接數量
7.可以用任意一個硬鏈接作為入口,操作文件(修改的其實是block中的數據)
8.當文件的硬鏈接數為0時,文件真的被刪除

Add a new Comments

Some HTML is okay.