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

系統安全及應用

結構

賬號安全控制

系統引導和登入控制

弱口令檢測

埠掃描

賬號安全基本措施

系統賬號清理

將非登入使用者的Shell設為/sbin/nologin
usermod -s /sbin/nologin使用者名稱
鎖定長期不使用的賬號
usermod -L 使用者名稱
passwd -l 使用者名稱
passwd -S 使用者名稱
刪除無用的賬號
userdel [-r] 使用者名稱
鎖定賬號檔案passwd, shadow
chattr +i /etc/passwd /etc/shadow
Isattr /etc/passwd /etc/shadow #鎖定檔案並檢視狀態
chattr -i/etc/passwd /etc/shadow #解鎖檔案

鎖定狀態下的檔案無法被修改

賬號安全基本措施

密碼安全控制

  • 設定密碼有期
  • 要求使用者下次登入時修改密碼
[root@localhost ~]# vi /etc/login.defs      ####修改密碼配置檔案,適用於新建使用者
……
PASS_MAX_DAYS 30
[root@localhost ~]# chage -M 30 lisi
[root@localhost ~]# cat /etc/shadow | grep lis
[root@localhost ~]# chage -d 0 zhangsan     ####強制在下次登入時更改密碼,檔案中的第三個欄位被修改為0
[root@localhost ~]# cat /etc/shadow | grep zhangsan shadow

賬號安全基本措施

命令歷史限制

  • 減少記錄的命令條數
  • 登入時自動清空命令歷史
[root@localhost ~]# vi /etc/profile 
export HISTSIZE=200                  ####將命令條數設定為200條
[root@localhost ~]# source /etc/profile
[root@localhost ~]# vi ~/.bashrc 
echo " " > ~/.bash_history           ####登陸時自動清空歷史命令,> ~/.bash_history 效果相同

終端自動登出

[root@localhost ~]# vi /etc/profile
……
export TMOUT=600                     ####閒置600秒自動登出
[root@localhost ~]# source /etc/profile

使用su命令切換使用者

用途及用法

  • 用途: Substitute User,切換使用者
  • 格式:
su -目標使用者

密碼驗證

  • root →任意使用者,不驗證密碼
  • 普通使用者 →其他使用者,驗證目標使用者的密碼
[jerry@localhost ~]$ su -root    ####帶-選項表示將使用目標使用者的登入Shell環境
口令:
[root@localhost ~]# whoami
root

限制使用su命令的使用者

  • 將允許使用su命令的使用者加入wheel組
  • 啟用pam_wheel認證模組
[root@localhost ~]# gpasswd -a tsengyia wheel
tsengyia
####正在將使用者"tsengyia"加入到"wheel"組中

檢視su操作記錄

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

Linux中的PAM安全認證

su命令的安全隱患

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

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

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

PAM認證原理

Linux-PAM,是linux可插拔認證模組,是一套可定製、可動態載入的共享庫,使本地系統管理員可以隨意選擇程式的認證方式。

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

PAM認證原理:

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

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

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

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

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

一般遵循的順序

  • Service (服務) →PAM (配置檔案)→pam_*so

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

使用者訪問伺服器時,伺服器的某一個服務程式把使用者的請求傳送到PAM模組進行認證

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

PAM認證的構成

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

  • 示例: 檢視su是否支援PAM模組認證
ls /etc/pam.d | grep su

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

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

auth: 對使用者身份進行識別,如提示輸入密碼,判斷是否為root. account: 對賬號各項屬性進行檢查,如是否允許登入系統,帳號是否已經過期,是否達到最大使用者數等 password: 使用使用者資訊來更新資料,如修改使用者密碼。 session: 定義登入前以及退出後所要進行的會話操作管理,如登入連線資訊,使用者資料的開啟和關閉,掛載檔案系統。

第二列代表PAM控制標記

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

requisite: 與required類似,但如果此模組返回失敗,則立刻返回失敗並表示此型別失敗。 sufficient: 如果此模組返回成功,則直接向程式返回成功,表示此類成功,如果失敗,也不影響這型別的返回值 optional: 不進行成功與否的返回,一般不用於驗證,只是顯示資訊(通常用於session型別)

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

第三列代表PAM模組,預設是在/lib64/security/目錄下,如果不在此預設路徑下,要填寫絕對路徑

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

第四列代表PAM模組的引數,這個需要根據所使用的模組來新增.

傳遞給模組的引數。引數可以有多個,之間用空格分隔開

  

PAM安全認證流程

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

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

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

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

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

使用者1 使用者2 使用者3 使用者4
auth required 模組1 pass fail pass pass
auth sufficient 模組2 pass pass fail pass
auth required 模組3 pass pass pass fail
結果 pass fail pass pass

使用sudo機制提升許可權

su命令的缺點

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

sudo命令的用途及用法

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

配置sudo授權

visudo 或者 vi /etc/sudoers 記錄格式:使用者 主機名=命令程式

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/kill, /usr/bin/killall 使用關鍵字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 #呼叫

檢視sudo操作記錄

需啟用Defaults logfile配置 啟用sudo操作日誌
[root@localhost ~]# visudo
Defaults logfile = "/var/log/sudo“ 

啟用日誌配置以後,sudo操作過程才會被記錄

sudo -l 檢視使用者許可權

開關機安全控制

調整BIOS引導設定

  • 將第一引導裝置設為當前系統所在硬碟
  • 禁止從其他裝置(光碟、U盤、網路)引導系統
  • 將安全級別設為setup,並設定管理員密碼

GRUB限制

  • 使用grub2-mkpasswd-pbkdf2生成金鑰
  • 修改/etc/grub.d/00-header檔案中,新增密碼記錄
  • 生成新的grub.cfg配置檔案

限制更改GRUB引導引數

通常情況下在系統開機進入GRUB選單時,按e鍵可以檢視並修改GRUB引導引數,這對伺服器是一個極大的威脅。

可以為GRUB選單設定一個密碼,只有提供正確的密碼才被允許修改引導引數。

grub2-mkpasswd-pbkdf2 #根據提示設定GRUB選單的密碼 PBKDF2 hash of your password is grub.pbkdf2... #省略部分內容為經過加密生成的密碼字串 cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak cp /etc/grub.d/00_header /etc/grub.d/00_header.bak vim /etc/grub.d/00_header cat << EOF set superusers="root" #設定使用者名稱為root password_pbkdf2 root grub.pbkdf2... #設定密碼,省略部分內容為經過加密生成的密碼字串 EOF

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

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

終端登入安全控制

在Linux系統中, login程式會讀取/etc/securetty檔案,以決定允許root使用者從哪些終端(安全終端)登入系統。

限制root只在安全終端登入

  • 安全終端配置: /etc/securetty
[root@localhost ~]# vi /etc/securetty
……
#tty5
#tty6

禁止普通使用者登入

  • 建立/etc/nologin檔案
  • 刪除nologin檔案或重啟後即恢復正常
[root@localhost ~]# touch /etc/nologin   ###禁止普通使用者登入
[root@localhost ~]# rm -f /etc/nologin   ###取消上述登入限制

系統弱口令檢測

John the Ripper,簡稱為JR

  • 一款密碼分析工具,支援字典式的暴力破解
  • 通過對shadow檔案的口令分析,可以檢測密碼強度
  • 官方網站: http://www.openwall.com/john/

#解壓工具包

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.lst /opt/shadow.txt #使用指定的字典檔案進行破解

  

網路埠掃描

NMAP是一個強大的埠掃描類安全評測工具,支援ping掃描、多埠檢測等多種技術。

#安裝NMAP軟體包
rpm -ga I grep nmap
yum install -y nmap

  

nmap命令常用的選項和掃描型別

-p: 指定掃描的埠。 -n: 禁用反向DNS解析(以加快掃描速度)。 -ss: TCP的SYN掃描(半開掃描) ,只向目標發出SYN資料包,如果收到SYN/ACK響應包就認為目標埠正在監聽,並立即斷開連線;否則認為目標埠並未開放。 -ST: TCP連線掃描,這是完整的TCP掃描方式(預設掃描型別) ,用來建立一個TCP連線,如果成功則認為目標埠正在監聽服務,否則認為目標埠並未開放。 -SF: TCP的FIN掃描,開放的埠會忽略這種資料包,關閉的埠會迴應RST資料包。許多防火牆只對SYN資料包進行簡單過濾,而忽略了其他形式的TCP攻擊包。這種型別的掃描可間接檢測防火牆的健壯性。 -sU: UDP掃描,探測目標主機提供哪些UDP服務, UDP掃描的速度會比較慢。 -sP: ICMP掃描,類似於ping檢測,快速判斷目標主機是否存活,不做其他掃描。 -PO: 跳過ping檢測,這種方式認為所有的目標主機是存活的,當對方不響應ICMP請求時,使用這種方式可以避免因無法ping通而放棄掃描。

netstat命令

netstat命令常用選項:

-a: 顯示主機中所有活動的網路連線資訊(包括監聽、非監聽狀態的服務埠) -n: 以數字的形式顯示相關的主機地址、埠等資訊。 -t: 檢視TCP相關的資訊。 -u: 顯示UDP協議相關的資訊。 -p: 顯示與網路連線相關聯的程序號、程序名稱資訊(該選項需要root許可權) -r: 顯示路由表資訊。 -l: 顯示處於監聽狀態的網路連線及埠資訊。

netstat -natp 檢視正在執行的使用TCP協議的網路狀態資訊

netstat -naup 檢視正在執行的使用UDP協議的網路狀態資訊

其他示例:

#分別檢視本機開放的TCP埠、UDP埠

nmap -sT 127.0.0.1 nmap -sU 127.0.0.1

#檢測192.168.80.0/24網段有哪些主機提供HTTP服務

nmap -p 80 192.168.80.0/24

#檢測192.168.80.0/24網段有哪些存活主機

nmap -n -sP 192.168.80.0/24

總結

賬號基本安全措施

  • 系統賬號清理、密碼安全控制、命令歷史清理、自動登出

使用者切換與提權

  • su, sudo

開關機安全控制

  • BIOS引導設定、GRUB選單設定密碼

終端控制

John the Ripper工具

пamp命令