Linux系統安全及應用:你以為只是簡單的“防火牆配置”?

一,賬號安全控制

1.基本措施

1)系統賬號清理

將非登入使用者的shell設為/sbin/nologin
鎖定長期不使用的賬號
刪除無用的賬號
鎖定賬號檔案passwd,shadow

2)密碼安全控制

設定密碼有效期:chage -M 30 使用者名稱
要求使用者下次登入時修改密碼:chage -d 0 使用者名稱

3)命令歷史限制

減少記錄 的命令條數(歷史記錄預設1000條)
登出時自動清空命令歷史

4)終端自動登出

閒置600秒後自動登出

2.使用su命令切換使用者

su -使用者名稱 用途:切換使用者
密碼驗證:root–任意使用者,不驗證密碼;普通使用者–其他使用者,驗證目標使用者的密碼

1)限制su命令使用者

預設情況下,任何使用者都允許使用su命令,從而有機會反覆嘗試其他使用者(如root)的登入密碼,這樣帶來了安全風險。為了加強su命令的使用控制,可以藉助於 pam _wheel認證模組,只允許極個別使用者使用su命令進行切換。
實現過程如下:
將授權使用su命令的使用者新增到 wheel 組,修改/etc/pam.d/su 認證配置以啟用pam_wheel認證.
在/etc/pam.d/su檔案裡設定禁止使用者使用su命令

vim /etc/pam.d/su

2 #auth sufficient pam _ rootok.so

6 #auth required pam _ wheel.so use_ _uid
a)以上兩行是預設狀態(即開啟第一行,註釋第二行),這種狀態下是允許所有使用者間使用su命令進行切換的。
b)兩行都註釋也是執行所有使用者都能使用su命令,但root下使用su切換到其他普通使用者需要輸入密碼;如果第一行不註釋,則root使用su切換普通使用者就不需要輸入密碼(pam rootok.so模組的主要作用是使uid為o的使用者,即root使用者能夠直接透過認證而不用輸入密碼。)
【2關,6關:root切換使用者需要輸入密碼】
c)如果開啟第二行,表示只有root使用者和wheel組內的使用者才可以使用su命令
【2開,6開:root和wheel組可以su】
d)如果註釋第一行,開啟第二行,表示只有wheel組內的使用者才能使用su命令,root使用者也被停用su命令。
【2關,6開:只有wheel組可以su】

2)限制使用su命令的使用者,啟用pam_wheel認證模組

gpasswd -a 使用者名稱 wheel : 新增授權使用者,將使用者新增到wheel組
grep wheel /etc/group :確認wheel組成員
auth required pam _ wheel.so use_ _uid 去掉此行開頭#號
啟用pam_wheel認證後,未加入wheel組內的其他使用者將無法使用su命令,嘗試進行切換時將提示“拒絕許可權”,從而將切換使用者的許可權控制在最小範圍內。【普通使用者切換登入測試 驗證,使用su命令切換使用者的操作將會記錄到安全日誌/var/log/secure檔案中】

3.Linux中的PAM安全認證

1)su命令的安全隱患

●預設情況下,任何使用者都允許使用su命令,有機會反覆嘗試其他使用者(如root)的登入密碼,帶來安全風險
●為了加強su命令的使用控制,可藉助於PAM認證模組,只允許極個別使用者使用su命令進行切換

2)PAM(Pluggable Authentication Modules)可插拔式認證模組

●是一種高效而且靈活便利的使用者級別的認證方式
●也是當前Linux伺服器普遍使用的認證方式

3)PAM認證原理

1一般遵循的順序:

Service(服務)→PAM(配置檔案)→pam_*.so
2.首先要確定哪一項服務,然後載入相應的PAM的配置檔案(位於/etc/pam.d下),最後呼叫認證檔案(位於/lib/security下)進行安全認證
3.使用者訪問伺服器時,伺服器的某一個服務程式把使用者的

請求傳送到PAM模組進行認證
4.不同的應用程式所對應的PAM模組是不同的
如果想檢視某個程式是否支援PAM認證,可以用ls命令進行檢視/etc/pam.d/
PAM的配置檔案中的每一行都是一個獨立的認證過程,它們按從上往下的順序依次由PAM模組呼叫

4)PAM認證各列含義

第一列代表PAM認證模組型別

auth: 對使用者身份進行識別,如提示輸入密碼,判斷是否為root。
account:對賬號各項屬性進行檢查,如是否允許登入系統,帳號是否已經過期,是否達到最大使用者數等。
password:使用使用者資訊來更新資料,如修改使用者密碼。

session:定義登入前以及退出後所要進行的會話操作管理,如登入連線資訊,使用者資料的開啟和關閉,掛載檔案系統。
第二列代表PAM控制標記

required:表示需要返回一個成功值,如果返回失敗,不會立刻將失敗結果返回,而是繼續進行同型別的下一驗證,所有此型別的模組都執行完成後,再返回失敗。

requisite:與required類似,但如果此模組返回失敗,則立刻返回失敗並表示此型別失敗。

sufficient:如果此模組返回成功,則直接向程式返回成功,表示此類成功,如果失敗,也不影響這型別的返回值。

optional:不進行成功與否的返回,一般不用於驗證,只是顯示資訊(通常用於session型別),

include:表示在驗證過程中呼叫其他的PM配置檔案。比如很多應用透過完整呼叫/etc/pam.d/system-auth(主要負責使用者登入系統的認證工作)來實現認證而不需要重新逐一去寫配置項。
第三列代表PAM模組,預設是在/lib64/security/目錄下,如果不在此預設路徑下,要填寫絕對路徑。同一個模組,可以出現在不同的模組型別中,它在不同的型別中所執行的操作都不相同,

這是由於每個模組針對不同的模組型別編制了不同的執行函式。
第四列代表PAM模組的引數,這個需要根據所使用的模組來新增。傳遞給模組的引數。引數可以有多個,之間用空格分隔開

5)控制標記的補充說明:

required:表示該行以及所涉及模組的成功是使用者透過鑑別的[必要條件]。
換句話說,只有當對應於應用程式的所有帶required:標記的模組全部成功後,該程式才能透過鑑別。同時,如果任何帶required標記的模組出現了錯誤,PAM並不立刻將錯誤訊息返回給應用程式,而是在所有此型別模組都呼叫完畢後才將錯誤訊息返回呼叫他的程式。
反正說白了,就是必須將所有的此型別模組都執行一次,其中任何一個模組驗證出錯,驗證都會繼續進行,並在執行完成之後才返回錯誤資訊。這樣做的目的就是不讓使用者知道自己被哪個模組拒絕,透過一種隱蔽的方式來保護系統服務。就像設定防火牆規則的時候將拒絕類的規則都設定為drop-樣,以致於使用者在訪問網路不成功的時候無法準確判斷到底是被拒絕還是目標網路不可達。
requisite: 與required相仿,只有帶此標記的模組返回成功後,使用者才能透過鑑別。不同之處在於其-旦失敗就不再執行堆中後面的其他模組,並且鑑別過程到此結束,同時也會立即返回錯誤資訊。與上面的required相比,似乎要顯得更光明正大一些。
sufficient:表示該行以及所涉及模組驗證成功是使用者透過鑑別的[充分條件]。
也就是說只要標記為sufficient的模組一旦驗證成功,那麼PAM便立即嚮應用程式返回成功結果而不必嘗試任何其他模組。即便後面的層疊模組使用了requisite

或者required控制標誌也是一樣。當標記為sufficient的模組失敗時,sufficient模組會當做optional對待。因此擁有sufficient標誌位的配置項在執行驗證出錯的時候並不會導致整個驗證失敗,但執行驗證成功之時則大門敞開。所以該控制位的使用務必慎重。
optional:他表示即便該行所涉及的模組驗證失敗使用者仍能透過認證。在PAM體系中,帶有該標記的模組失敗後將繼續處理下一模組。也就是說即使本行指定的模組驗證失敗,也允許使用者享受應用程式提供的服務。使用該標誌,PAM框架會忽略這個模組產生的驗證錯誤,繼續順序執行下一個層疊模組。

6)PAM認證的構成

檢視某個程式是否支援PAM認證,可以用Is命令

●示例:檢視su是否支援PAM模組認證

ls /etc/pam.d | grep su
檢視su的PAM配置檔案: cat letc/pam.d/su

●每一行都是一個獨立的認證過程

●每一行可以區分為三個欄位:
認證型別

控制型別

PAM模組及其引數
7)PAM認證流程
1.required驗證失敗時仍然繼續,但返回Fail。
2.requisite驗證失敗則立即結束整個驗證過程,返回Fail。
3.sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續。
4.optional不用於驗證,只顯示資訊(通常用於session型別)

4.****使用sudo機制提升許可權(重點)**

su命令的缺點

1)sudo命令的用途及用法

●用途: 以其他使用者身份(如root)執行授權的命令

●用法:sudo 授權命令
visudo

vi /etc/sudoers (此檔案的預設許可權為440,儲存退出時必須執行" :wq !"命令來強制操作)
語法格式:

使用者主機名=命令程式列表

使用者主機名=(使用者)命令程式列表
使用者:直接授權指定的使用者名稱,或採用"%組名"的形式(授權一個組的所有使用者)。
主機名:使用此規則的主機名。沒配置過主機名時可用localhost,有配過主機名則用實際的主機名,ALL則代表所有主機
(使用者):使用者能夠以何種身份來執行命令。此項可省略,預設時以root使用者的身份來執行命令
命令程式列表:允許授權的使用者透過sudo方式執行的特權命令,需填寫命令程式的完整路徑,多個命令之間以逗號”,"進行分隔。ALL則代表系統中的所有命令
示例

Tom ALL=/sbin/ifconfig

Jerry localhost=/sbin/* ,!/sbin/reboot, !/sbin/poweroff

萬用字元"*"表示所有、取反符號"!”表示排除

%wheel ALL=NOPASSWD:ALL

表示wheel組成員無需驗證密碼即可使用sudo執行任何命令

Mike ALL=(root)NOPASSwD:/bin/ki1l,/usr/bin/killall gpasswd -M lisi wheel
李四加入wheel組

2)sudo [引數選項]命令vim /etc/sudoers

-l:列出使用者在主機上可用的和被禁止的命令;一般配置好/etc/sudoers後,要用這個命令來檢視和測試是不是配置正確的;

-v:驗證使用者的時間戳;如果使用者執行sudo後,輸入使用者的密碼後,在短時間內可以不用輸入口令來直接進行sudo操作;用-v可以跟蹤最新的時間戳;

-u :指定以以某個使用者執行特定操作;

-k:刪除時間戳,下一個sudo命令要求用求提供密碼:
案列一

wangliu 使用者可以使用useradd usermod

需求: wangliuroot使用者下的許可權useradd usermod

配置

visudo

wangliu ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod

如wangliu ALL= (root) NOPASSWD:/usrsn1n/useraad,EnSomi / us/oan

前面不需要輸入密碼,後面需要輸入密碼

驗證1

[ wangliu@kgc root] $ sudo /usr/ sbin/useradd tom[sudo] wangliu 的密碼:

[wangliu@kgc root]$ tail -2 /etc/passwd

wangliu:x : 1005:1005: : / home / wangliu : / bin/bashtom: x :1006:1006: : / home/tom: / bin/ bash

3)使用者別名案例

當使用相同授權的使用者較多,或者授權的命令較多時,可以採用集中定義的別名。使用者、

主機、命令部分都可以定義為別名(必須為大寫),分別透過關鍵字User_Alias、Host_Alias、Cand_Alias來進行設定。

檢視組下面的使用者

grep "wheel" letcl group使用者別名的語法格式:
  1. User_Alias 使用者別名:包含使用者、使用者組(%組名(使用3引導))、還可以包含其他其他已經使用者的別名user_Alias OPERATORS=zhangsan , tom,lisi

    2 ) Host_Alias

    主機別名:主機名、IP、網路地址、其他主機別名!取反Host_Alias MAILSVRS=smtp, pop

    3 ) cmnd_Alias

    命令路勁、目錄(此目錄內的所有命令)、其他事先定義過的命令別名cmnd_Alias PKGTOOLS=/bin/ rpm , /usr/bin/ yum
案例一使用者別名

使用關鍵字user_ Alias、Host_ Alias、Cmnd Alias來進行設定別名(別名必須為大寫)
Host_Alias MYHOSTS = kgc , localhost

User_Alias MYUSERS zhangsan , wangwu , lisi

Cmnd_Alias MYCMNDs = /sbin/*, ! / sbin/reboot, !/sbin/poweroff, ! /sbin/init, ! /usr/bin/rm
MYUSERS MYHOSTS=NOPASSWWW D :MYCMNDS

2)

User_Alias USERS=Tom,Jerry,MikeHost Alias HOSTs=localhost, bogon

Cmnd _Alias cMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOSTs=CMNDS
案列二
使用者別名

例如,以下操作透過別名方式來新增授權記錄,允許使用者wangliu、wangliu組、useradmin組並且定義命令別名。在主機smtp、pop 中執行rpm、yum命令
user_Alias USERADMIN = wangliu, 8wangliu , suseradmin
cmnd _Alias USERADMINCMND=/uSr/sbin/useradd,/usr/sbin/usermod, /usr/sbin/userdel,/usr/bin/passwd, ! /usr/bin/passwd root#取反的優先順序最高

USERADMIN ALL=(root) NOPASSwD: USERADMINCMND

驗正別名以及命令路徑

注bug

sudo passwd root測試

解決方法

cmnd_alias USBRADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod, /usr/sbin/userdel,/usr/bin/passwd

[A-Za-z]*,! lusr/ bin/passwd root

啟用sudo操作日誌

visudo

Defaults logfile = " / var/ log/sudo"

sudo日誌記錄以備管理員檢視,應在/etc/sudoers檔案中增加"Defaults logfile"設定如果已經啟用sudo日誌,則可以從/var/log/sudo檔案中看到使用者的 sudo操作記錄。注:啟用日誌: Defaults logfile=/var/ log/sudo

另外一個方法是/var/log/secure日誌可檢視到sudo操作使用者步驟

sudo -1#檢視當前使用者獲得哪些sudo授權

5.限制更改GRUB引導引數

通常情況下在系統開機進入GRUB選單時,按e鍵可以檢視並修改GRUB引導引數,這對伺服器是一個極大的威脅。可以為GRtB選單設定一個密碼,只有提供正確的密碼才被允許修改引導引數。
grub2-mkpasswd-pbkdf2#根據提示設定GRUB選單的密碼

PBKDF2 hash of your password is grub . pbkd….. ”Y#省略部分內容為經過加密生成的密碼字串I
cp / boot/grub2/ grub.cfg / boot/grub2/grub.cfg.bak

cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
vim letc/grub.d/ 00_header

cat <<EOF

set superusers="root"#設定使用者名稱為root
password_pbkdf2 root grub. pbkd2 ….-

設定密碼,省略部分內容為經過加密生成的密碼字串

EOF

grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub.cfg 檔案

重啟系統進入GRUB選單時,按e鍵將需要輸入賬號密碼才能修改引導引數。
一步到位

grub2-setpassword

二.開關機安全控制

調整BIOS引導設定

●將第一引導裝置設為當前系統所在硬碟

●禁止從其他裝置(光碟、隨身碟、網路)引導系統
●將安全級別設為setup,並設定管理員密碼
GRUB限制

●使用grub2-mkpasswd-pbkdf2生成金鑰

●修改/etclgrub.d/00_header檔案中,新增密碼記錄
●生成新的grub.cfg配置檔案

三.弱口令檢測

1)系統弱口令檢測

弱口令檢測一 -John the Ripper.

JohntheRipper是一-款開源的密碼破解工具,可使用密碼字典(包含各種密碼組合的列表檔案)來進行暴力破解。

解壓工具包

cd /opt

tar.zxf john-1.8.0.tar.gz

安裝軟體編譯工具

yum install -y gcc gcc-c++ make

切換到src子目錄

cd /opt/john-1.8.0/ src

進行編譯安裝

make clean linux-x86-64

準備待破解的密碼檔案

cp /etc/ shadow /opt/ shadow.txt

執行暴力破解

cd /opt/john-1.8.0/ run
./john /opt/ shadow.txt

檢視己破解出的賬戶列表

./john –show /opt/ shadow.txt

使用密碼字典檔案

john. pot

清空己破解出的賬戶列表,以便重新分析

./john–wordlist=./password.1st / opt/ shadow.txt

使用指定的字典檔案進行破解l

2)網路埠掃描

控制位.

SYN建立連結
ACK確認

FIN結束斷開

PSH傳送o資料快取 上層應用協議
RST重置

URG緊急

rpm -qa |grep nmap 檢視nmap
yum install -y nmap

nmap命令常用的選項和描型別
-p:指定掃描的埠。

-n:停用反向DNs解析(以加快掃描速度)

-sS:TCP的SYN掃描〈半開掃描),只向目標發出sYn資料包,如果收到SsY/AcK響應包就認為目標埠正在監聽,並立即斷開連線;否則認為目標埠並未開放。

-sT:TCP連線掃描,這是完整的rcP掃描方式(預設掃描型別),用來建立一個Tce連線,如果成功則認為目標埠正在監聽服務,否則認為目標埠並未開放。

-sF:TCP的FIN掃描,開放的埠會忽略這種資料包,關閉的埠會回應RsT資料包。許多防火牆只對sw資料包進行簡單過濾,而忽略了其他形式的TcP攻擊包。這種型別的掃描可間接檢測防火牆的健壯性。

-sU: UDP掃描,探測目標主機提供哪些uDP服務,UDP掃描的速度會比較慢。

-sP:ICMP掃描,類似於ping檢測,快速判斷目標主機是否存活,不做其他掃描。

-P0:跳過ping檢測,這種方式認為所有的目標主機是存活的,當對方不響應ICMP請求時,使用這種方式可以避免因無法ping通而放棄掃描。
再擴充套件
透過pam模組來防止暴力破解ssh
vim /etc/pam.d/ sshd
在第一行下面新增一行:

auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200說明:嘗試登陸失敗超過3次,普通使用者600秒解鎖,root使用者1200秒解鎖

手動解除鎖定:

檢視某一使用者錯誤登陸次數:pam_tally2 –user

例如,檢視work使用者的錯誤登陸次數:pam_tally2 –user work

清空某一使用者錯誤登陸次數:pam_tally2 —-user –reset

例如,清空work使用者的錯誤登陸次數,pam_tally2 –user work –reset
連結:https://www.cnblogs.com/qfzr2508/p/15781775.html
                                                              (版權歸原作者所有,侵刪)

文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。

僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。

為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套【2024最新運維資料高階運維工程師必備技能資料包(文末一鍵領取),內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
識別上方二維碼
備註:2024最新運維資料
100%免費領取
(是掃碼領取,不是在公眾號後臺回覆,別看錯了哦)


相關文章