1. 程式人生 > 其它 >Linux系統安全及應用

Linux系統安全及應用

一、賬號安全基本措施

1、系統賬號清理

  • 將非登入使用者的Shell設為/sbin/nologin

usermod -s /sbin/nologin 使用者名稱
  • 鎖定長期不使用的賬號

usermod -L 使用者名稱
passwd -l 使用者名稱
  • 刪除無用的賬號

userdel  [-r]  使用者名稱
  • 鎖定賬號檔案 passwd、shadow

chattr +i /etc/passwd /etc/shadow      #鎖定檔案並檢視狀態

lsattr /etc/passwd /etc/shadow         #檢視

chattr -i /etc/passwd /etc/shadow      #解鎖檔案

2、密碼安全控制

  • 設定密碼有效期

  • 要求使用者下次登入時修改密碼

適用於新建使用者:

vi /etc/login.defs

適用於已有使用者:

chage -M xx xx

強行在下次登入時更改密碼:

chage -d 0 xxx

3、命令歷史限制

  • 減少記錄的命令條數

vi /etc/profile

  • 登入時自動清空命令歷史

vi .bashrc

echo " " > ~/.bash_history

舉例

減少記錄的命令條數:

vi /etc/profile

登入時自動清空命令歷史:

vi .bashrc

echo " " > ~/.bash_history

4、終端自動登出

閒置360秒後自動登出

vi /etc/profile

二.SU命令切換使用者

1、用途及用法

  • 用途: Substitute User,切換使用者

  • 格式: su-目標使用者

2、密碼驗證

  • root>任意使用者,不驗證密碼

  • 普通使用者→其他使用者,驗證目標使用者的密碼

3、限制使用su命令的使用者

  • 將允許使用su命令的使用者加入wheel組

  • 啟用pam_ wheel認證模組

gpasswd -a xxx wheel      #將使用者加入wheel組

vi /etc/pam.d/su          #進入設定su使用命令

4、檢視su操作記錄

安全日誌檔案:/var/log/secure

補充

在/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為0的使用者,即root使用者能夠直接通過認證而不用輸入密碼)

c) 如果開啟第二行,表示只有root使用者和wheel組內的使用者才可以使用su命令

d) 如果註釋第一行,開啟第二行,表示只有wheel組內的使用者才能使用su命令,root使用者也被禁用su命令

gpasswd -a lili wheel      #新增授權使用者zhangsan 到wheel組中
groups lili
vim /etc/pam.d/su 
auth required pam_wheel.so use_uid      #去掉此行開頭的註釋

啟用pam_wheel認證以後,未加入到wheel組內的其他使用者將無法使用su命令

三、Linux中的PAM安全認證

PAM使用/etc/pam.d/下的配置檔案,來管理對程式的認證方式。

應用程式呼叫相應的PAM配置檔案,從而呼叫本地的認證模組,模組放置在/lib64/security下以載入動態庫的形式進行認證。比如使用su命令時,系統會提示輸入root使用者的密碼,這就是su命令通過呼叫PAM模組實現的。

1、su命令的安全隱患

■ 預設情況下,任何使用者都允許使用su命令,有機會反覆嘗試其他使用者(如root) 的登入密碼,帶來安全風險

■ 為了加強su命令的使用控制,可藉助於PAM認證模組只允許極個別使用者使用su命令進行切換

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

■ 是一種高效而且靈活便利的使用者級別的認證方式

■ 是當前Linux伺服器普遍使用的認證方式

3、PAM認證原理

① PAM認證一般遵循的順序:Service(服務)–>PAM(配置檔案)–>pam_*.so

② PAM認證首先要確定哪一項應用服務,然後載入相應的PAM的配置檔案(位於7etc/pam.d下),最後呼叫認證模組(位於/lib64/security/下)進行安全認證

③ 使用者訪問伺服器的時候,伺服器的某–個服務程式把使用者的請求傳送到PAM模組進行認證。不同的應用程式所對應的PAM模組也是不同的

④ 不同的應用程式所對應的PAM模組是不同的

  • 如果想檢視某個程式是否支援PAM 認證,可以用ls命令進行檢視/etc/ pam.d/

  • PAM的配置檔案中的每一行都是一個獨立的認證過程,它們按從上往下的順序依次由PAM模組呼叫/

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

auth: 對使用者身份進行識別,如提示輸入密碼,判斷是否為root

account: 對賬號各項屬性進行檢查,如是否允許登入系統,帳號是否已經過期,是否達到最大使用者數等

password: 使用使用者資訊來更新資料,如修改使用者密碼

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

第二列代表PAM控制標記

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

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

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

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

include: 表示在驗證過程中呼叫其他的PAM配置檔案。比如很多應用通過完整呼叫/etc/pam.d/system-auth(主要負責使用者登入系統的認證工作)來實現認證而不需要重新逐一去寫配置項

第三列代表PAM模組

預設是在/lib64/security/目錄下,如果不在此預設路徑下,要填寫絕對路徑

同一個模組,可以出現在不同的模組型別中,它在不同的型別中所執行的操作都不相同,這是由於每個模組針對不同的模組型別編制了不同的執行函式

第四列代表PAM模組的引數

這個需要根據所使用的模組來新增傳遞給模組的引數。引數可以有多個,之間用空格分隔開

4、認證流程

控制型別也稱做Control Flags,用於PAM驗證型別的返回結果

required驗證失敗時仍然繼續,但返回Fail

requisite驗證失敗則立即結束整個驗證過程,返回Fail

sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續

optional不用於驗證,只顯示資訊
(通常用於session型別)

required:表示該行以及所涉及模組的成功是使用者通過鑑別的[必要條件]。換句話說,只有當對應於應用程式的所有帶requi red標記的模組全部成功後,該程式才能通過鑑別。同時,如果任何帶requi red標記的模組出現了錯誤,PAM並不立刻將錯誤訊息返回給應用程式,而是在所有此型別模組都呼叫完畢後才將錯誤訊息返回呼叫他的程式

說白了,就是必須將所有的此型別模組都執行一次,其中任何一個模組驗證出錯,驗證都會繼續進行,並在執行完成之後才返回錯誤資訊。這樣做的目的就是不讓使用者知道自已被哪個模組拒絕,通過一種隱蔽的方式來保護系統服務。就像設定防火牆規則的時候將拒絕類的規則都設定為drop-樣,以致於使用者在訪問網路不成功的時候無法準確判斷到底是被拒絕還是目標網路不可達

requisite: 與required相仿, 只有帶此標記的模組返回成功後,使用者才能通過鑑別。不同之處在於其一旦失敗就不再執行堆中後面的其他模組,並且鑑別過程到此結束,同時也會立即返回錯誤資訊。與上面的required相比,似乎要顯得更光明正大一-些

sufficient: 表示該行以及所涉及模組驗證成功是使用者通過鑑別的[充分條件]。也就是說只要標記為sufficient的模組一旦驗證成功,那麼PAM便立即嚮應用程式返回成功結果而不必嘗試任何其他模組。即便後面的層疊模組使用了requisite或者required控制標誌也是一樣。當標記為sufficient的模組失敗時,sufficient模 塊會當做optional對待。因此擁有sufficient標誌位的配置項在執行驗證出錯的時候並不會導致整個驗證失敗,但執行驗證成功之時則大門]敞開。所以該控制位的使用務必慎重

optional: 表示即便該行所涉及的模組驗證失敗使用者仍能通過認證。在PAM體系中,帶有該標記的模組失敗後將繼續處理下一模組。也就是說即使本行指定的模組驗證失敗,也允許使用者享受應用程式提供的服務。使用該標誌,PAM框架會忽略這個模組產生的驗證錯誤,繼續順序執行下一個層疊模組

四、sudo機制提升許可權

1、sudo命令的用途及用法

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

用法:sudo 授權命令

2、配置sudo授權

  • visudo 或者 vi /etc/sudoers此檔案的預設許可權為440,儲存退出時必須執行 “:wq!”命令來強制操作

  • 記錄格式:使用者 主機名=(使用者)命令程式列表

使用者: 直接授權指定的使用者名稱,或採用“。組名"的形式(授權一個組的所有使用者)

主機名: 使用此規則的主機名。沒配置過主機名時可localhost,有配過主機名則用實際的主機名,ALI則代表所有主機

(使用者): 使用者能夠以何種身份來執行命令。此項可省略,預設時以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/kill, /usr/bin/killall

注:帶有感嘆號的意思為 不可以執行這個操作

注:加入wheel組,可以使用sudo執行任何命令

樣例二:

使用關鍵字User_ Alias、Host_ Alias、Cmnd_ Alias 來進行設定別名( 別名必須為大寫)

User_Alias USERS=Tom, Jerry, Mike
Host_Alias HOSTS=localhost, bogon
Cmnd_Alias CMNDS=/sbin/ifconfig, /usr/sbin/useradd,/usr/sbin/userdel
USERS HOSTS=CMNDS
USERS HOSTS=NOPASSWD:CMNDS      #執行過程不需要驗證密碼

注:這裡我只是讓這兩位小傢伙只能執行 新增使用者和關機操作

3、檢視sudo操作記錄

  • 需啟用Defaults logfile配置

  • 預設日誌檔案: /var/log/sudo

4、檢視授權的sudo操作

sudo -l

初次使用sudo時需驗證當前使用者的密碼,預設超時時長為5分鐘,在此期間不再重複驗證密碼

總結

1.賬號安全基本措施

■ 鎖定賬號檔案 passwd、shadow

  • chattr +i /etc/passwd /etc/shadow
    鎖定檔案並檢視狀態

  • Isattr /etc/passwd /etc/shadow
    檢視

  • chattr -i /etc/passwd /etc/shadow
    解鎖檔案

■ 密碼安全控制

  • 適用於新建使用者

vi /etc/login.defs

  • 適用於已有使用者

chage -M xx xx

  • 強行在下次登入時更改密碼

chage -d 0 xxx

■ 命令歷史限制

  • 減少記錄的命令條數

vi /etc/profile

  • 登入時自動清空命令歷史

vi .bashrc
echo " " > ~/.bash_history

■ 終端自動登出

vi /etc/profile

2、限制使用su命令的使用者

  • 將允許使用su命令的使用者加入wheel組
  • vim /etc/pam.d/ su
  • 啟用pam_ wheel認證模組

檢視su操作記錄

安全日誌檔案:/var/log/secure

3、Linux中的PAM安全認證

  • PAM使用/etc/pam.d/下的配置檔案,來管理對程式的認證方式

  • 如果想檢視某個程式是否支援PAM 認證,可以用ls命令進行檢視/etc/ pam.d/

  • PAM的配置檔案中的每一行都是一個獨立的認證過程,它們按從上往下的順序依次由PAM模組呼叫

4、sudo機制提升許可權

■ 記錄格式:使用者 主機名=(使用者)命令程式列表

Tom ALL=/sbin/ifconfig

■ 使用關鍵字User_ Alias、Host_ Alias、Cmnd_ Alias 來進行設定別名(別名必須為大寫)

■ 檢視sudo操作記錄

  • 需啟用Defaults logfile配置
  • 預設日誌檔案: /var/log/sudo

■ 檢視授權的sudo操作

sudo -l