系統安全及應用
目錄
一、賬號的基本 安全
1.1、系統賬號清理
1. 2、密碼安全控制
1.3、命令歷史限制
1.4、終端自動注銷
二、使用su命令切換用戶
2.1、用途及用戶
2.2、密碼驗證
2.3、限制使用su命令的用戶
三、Linux中的PAM安全認證
3.1、su命令的安全隱患
3.2、PAM可插拔式認證模塊
3.3、PAM認證原理
3.4、PM認證的構成
3.5、PAM安全認證流程
四、使用sudo機制提升權限
4.1、sudo命令的用途及用法
4.2、配置sudo授權
4.3、語法格式
4.4、設置別名
4.5、密碼驗證
4.6、查看sudo操作記錄
4.7、查詢授權的sudo操作記錄
五、系統引導和登錄控制
5.1、開關機安全控制
5.2、終端登錄安全控制
六、弱口令檢測
6.1、暴力破解工具-JR
6.2、安裝JR工具
6.3、檢測弱口令賬號
6.4、密碼文件的暴力破解
6.5、模擬暴破步驟
七、端口掃描
7.1、網絡掃描工具-NMAP
7.2、安裝NMAP包
7.3、nmap命令常用的選項和掃描類型
7.4、常規檢測方式:netstat
7.5、netstat命令常用選項
一、賬號安全基本措施
1、系統賬號清理
1)將非登錄用戶的Shell設為/sbin/nologin
2) 鎖定長期不使用的賬號
usermod -L 用戶名 鎖定用戶賬戶
passwd -l 用戶名 鎖定賬戶密碼
passwd -S 用戶名 查看用戶狀態
3)刪除無用的賬戶
userdel [-r] 用戶名 刪除用戶及其宿主目錄
4)清空一個賬號密碼
passwd -d 用戶名 清空賬戶密碼
5)鎖定賬戶文件passwd、shadow
chatte +i /etc/passwd /etc/shadow 鎖定文件
lsatter /etc/passwd /etc/shadow 查看文件狀態
chatter -i /etc/passwd /etc/shadow 解鎖文件
2、密碼安全控制
1)設置密碼有效期
vi /etc/login.defs
PASS_MAX_DAYS N(天數)
chage -M 30 用戶
cat /etc/shadow | grep 用戶
2)要求用戶下次登錄修改密碼
chage -d 0 用戶
cat /etc/shadow | grep 用戶
chage -M 日期 用戶 設置用戶密碼和有效期
chage -E xxxx-xx-xx 設置賬號過期日期
3、命令歷史限制
1)減少命令記錄條數
①、概述: /etc/profile 是系統全局變量配置文件,可以通過系統或者執行 source /etc/profile命令使文件被刷新重載
②、格式:vi /etc/profile 編劇全局變量配置文件
export HISTSIZE=x 輸入需要的命令條數
source /etc/profile 刷新重載
2)登錄時自動清空歷史命令
①、概述:~/.bashrc文件中的命令會在每次打開新的bash shell時(也包括登錄系統)被執行
②、格式:vi ~/.bashrc
echo“ ” > ~/.bashrc_history
4、終端自動注銷
1)限制600秒后自動注銷
格式:vi /etc/profile
export TMOUT=600
source /etc/profile
二、使用su命令切換用戶
1、用途及用戶
1)用途:Substitute User,切換用戶
2)格式:su - 目標用戶
2、密碼驗證
1)root ->任意用戶,不驗證密碼
2)普通用戶->其他用戶,驗證目標用戶密碼
3)格式: su - 用戶名 帶-選項表示將使用目標用戶的登錄 shell環境
3、限制使用su命令的用戶
1)將允許使用su命令的用戶加入wheel組
2)在/etc/pam.d/su文件中設置禁止用戶使用su命令
格式:vim /etc/pam.d/su
注:①、以上兩行是默認狀態(即開啟第一行,注釋第二行),這種狀態下是允許雖有用戶使用su命令進行切換的
②、兩行都注釋也是允許所有用戶都能使用su命令,但root下使用su切換到其他普通用戶需要輸入密碼;如果第一行不注釋,則root使用su切
換普通用戶就不需要輸入密碼
(pam_rootok.so模塊的主要作用是使uid為0的用戶,即 root用戶能夠直接通過認證而不用輸入密碼)
③、如果開啟第二行,表示只有root用戶和wheel組內的用戶才可以使用su命令。
④、如果注釋第一行,開啟第二行,表示只有wheel組內的用戶才能使用su命令,root用戶也被禁用su命令。
實驗驗證:
步驟一,新建AYHT/BYHT普通用戶,使用su命令實現root->普通用戶的切換,且將普通用戶AYHT加入wheel組中
步驟二、進入/etc/pam.d/su文件中設置禁止用戶使用su命令,選擇文件第六行,將行前注釋#刪除,啟用該字段
步驟三、重新進行用戶切換,發現加入wheel組中用戶AYHT正常切換,而未加入wheel組中的用戶BYHT切換失敗,顯示su:拒絕權限
注:啟用 pam_wheel認證后,未加入到wheel組中的其他用戶無法使用su命令
三、Linux中的PAM安全認證
1、su命令的安全隱患
1)、默認情況下,任何用戶都允許使用 su命令,有機會反復嘗試其他用戶(如root)的登錄密碼,帶來安全風險
2)、為了加強su 命令的使用控制,可借助於PAM認證模塊,只允許極個別用戶使用su命令進行切換
2、PAM (Pluggable Authentication Modules)可插拔式認證模塊
1)、是一種高效而且靈活的用戶級別的認證方式
2)、也是當前Linux服務器普遍使用的認證方式
3、PAM認證原理
1)PAM認證一般遵循的順序:Service(服務)-->PAM(配置文件)-->pam_*.so
2)PAM認證首先要確定哪一項服務,然后加載相應的PAM的配置文件(位於/etc/pam.d下),最后調用認證文件(位於/lib64/security下)進行安全認證
3)用戶訪問服務器時,服務器的某一個服務程序把用戶的請求發送到PAM模塊進行認證,不同的應用程序所對應的PAM模塊是不同的
4、PM認證的構成
1)查看某個程序是否支持PAM認證,可以用ls命令
2)格式:ls /etc/pam.d | grep su
3)查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一個獨立的認證過程,它們按從上往下的順序依次由PAM模塊調用
每一行可以區分為三個字段:認證類型、控制類型、pam模塊及其參數
①、第一列代表PAM認證模塊類型
auth∶ 對用戶身份進行識別,如提示輸入密碼,判斷是否為root。
account∶ 對賬號各項屬性進行檢查,如是否允許登錄系統,帳號是否已經過期,是否達到最大用戶數等。
passwor∶使用用戶信息來更新數據,如修改用 戶密碼。
session∶ 定義登錄前以及退出后所要進行的會話操作管理,如登錄連接信息,用戶數據的打開和關閉,掛載文件系統。
②、第二列代表PAM控制標記
required∶ 表示需要返回一個成功值,如果返回失敗,不會立刻將失敗結果返回,而是繼續進行同類型的下一驗證,所有此類型的模塊都執行完成后,再返回失敗。
requisite∶ 與required類似,但如果此模塊返回失敗,則立刻返回失敗並表示此類型失敗。
sufficient∶ 如果此模塊返回成功,則直接向程序返回成功,表示此類成功,如果失敗,也不影響這類型的返回值。
optional∶不進行成功與否的返回,一般不用於驗證,只是顯示信息(通常用於 session 類型)。
include∶ 表示在驗證過程中調用其他的PAM配置文件。比如很多應用通過完整調用/etc/pam.d/system-auth(主要負責用戶登錄系統的認認證工作)來實現認證而不需要重新逐一去寫配置項
③、第三列代表PAM模塊,默認實在/lib64/security/目錄下,若不在此默認路徑下,要填寫絕對路徑。
同一個模塊,可以出現在不同的模塊類型中,它在不同的類型中所執行的操作都不相同,這是由於每個模塊針對不同的模塊類型編制了不同的執行函數
④、第四列代表PAM模塊的參數,這個需要根據所使用的模塊來添加
傳遞給模塊的參數,參數可以有多個,之間用空格分隔開
5、PAM安全認證流程
控制類型也稱作Control Flags,用於PAM驗證類型的返回結果
1)required驗證失敗時仍然繼續,但返回Fail
2)requisite驗證失敗則立即結束整個驗證過程,返回Fail
3)sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續
4)optional不用於驗證,只顯示信息(通常用於session類型)
四、使用sudo機制提升權限
1、sudo命令的用途及用法
用途:以其他用戶身份(如root)執行授權的命令
用法:sudo 授權命令
2、配置sudo授權
visudo或vi /etc/sudoers #此文件的默認權限為440,保存退出時必須執行“wq!”,強制保存退出
3、語法格式:
用戶 主機名=命令程序列表
用戶 主機名=(用戶) 命令程序列表
用戶:直接授權指定的用戶名,或采用“%組名”的形式(授權一個組的所有用戶)。
主機名:使用此規則的主機名。沒配置過主機名時可用localhost(默認主機名),有配過主機名則用實際的主機名,ALL則代表所有主機
(用戶):用戶能夠以何種身份來執行命令。此項可省略,缺省時以root用戶的身份來運行命令
命令程序列表:允許授權的用戶通過sudo方式執行的特權命令,需填寫命令程序的完整路徑,多個命令之間以逗號“,”進行分割。ALL則代表系統中的所有命令
注:可使用通配符“ * ”表示所有,取反符號“!”表示排除
例如:Jerry localhost=/sbin/*,!/sbin/poweroff
表示jerry用戶操作localhost主機可使用sbin目錄下的除poweroff以外的所有命令
注:Jerry仍可使用init、shutdown等命令執行關機操作,因此限制命令需做到全面無漏,否則限制影響十分有限。
4、設置別名
使用關鍵字User_Alias、Host_Alias、Cmds_Alias來進行設置別名(別名必須為大寫)
User_Alias USERS=Tom,Jerry,Mike
Host_Alias HOSTS=localhost,bogon
Cmnd_Alias CMDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOST=CMDS
5、密碼驗證
1)正常情況下,第一次使用sudo命令需輸入密碼驗證,有效期為五分鍾,過期后使用sudo需再次輸入密碼驗證。
2)可以設置特定用戶無需密碼驗證
Mike ALL=(ROOT)NOPASSWD:/bin/kill,/usr/bin/killall
3)也可設置組用戶無需密碼驗證
%wheel ALL=NOPASSWD:ALL
4)以及所有用戶無需密碼驗證
USERS HOSTS=NOPASSWD:CMDS
6、查看sudo操作記錄
- 需啟用Defaults logfile配置
- 默認日志文件:/var/log/sudo
- visudo #進入sudo配置文件
- Defaults logfile="/var/log/sudo" #啟動Defaults logfile
- tail /var/log/sudo #查看sudo末尾10行記錄
7、查詢授權的sudo操作
1)格式:sudo -l
2)例:
五、系統引導和登錄控制
1、開關機安全控制
1)調整BIOS引導設置
- 將第一引導設備設為當前系統所在硬盤
- 禁止從其他設備(光盤、U盤、網絡)引導系統
- 將安全級別設為setup,並設置管理員密碼
2)GRUB限制
①、通常情況下,在系統開機進入GRUB菜單時,按e鍵可以查看並修改GRUB引導參數,也可進入急救模式修改用戶密碼,這對服務器是一個極大的安全威脅。為此,可以為GRUB菜單設置一個密碼,只有提供正確的密碼才被允許修改引導參數。
使用grub2-mkpasswd-pbkdf2生成密鑰
修改/etc/grub.d/00_header文件,添加密碼記錄
生成新的grub.cfg配置文件
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鍵將需要輸入賬號密碼才能修改引導參數。
2、終端登錄安全控制
1)限制root只在安全終端登錄
①、安全終端配置:/etc/securetty
vi /etc/securetty
②、將tty5,tty6前加“#”將其注釋,表示禁止root用戶從終端tty5、tty6登錄
2)禁止普通用戶登錄
①、建立/etc/nologin
touch /etc/nologin
②、刪除nologin文件或重啟后即恢復正常
rm -rf /etc/nologin
六、弱口令檢測
1、暴力破解工具-JR
John the Ripper是一款開源的密碼破解工具,可使用密碼字典(包含各種密碼組合的列表文件)來進行暴力破解。通過對shadow文件的口令分析,可以檢測密碼強度。
官方網站:http://www.openwall.com/john/
2、安裝JR工具
1)安裝方法:make clean 系統類型
2)主程序文件為john
3、檢測弱口令賬號
1)獲得Linux/Unix服務器的shadow文件
2)執行john程序,將shadow文件作為參數
4、密碼文件的暴力破解
1) 准備好密碼子彈文件,默認為password.lst
2) 執行john程序,結合--wordlist=字典文件
5、模擬暴破步驟
1)解壓工具包
cd /opt
tar zxf john-1.8.0.tar.gz
2)安裝軟件編譯工具
yum install -y gcc gcc-c++ make
3)切換到src子目錄
cd /opt/john-1.8.0/src
4)進行編譯安裝
make clean linux-x86-64
5)准備待暴破的密碼文件
cp /etc/shadow /opt/shadow.txt
6)執行暴力破解
cd /opt/john-1.8.0/run
./john /opt/shadow.txt
7)查看已破解出的賬戶列表
./john --show /opt/shadow.txt
8)使用密碼字典文件
使用> john.pot #清空已破解出的賬戶列表以便重新分析
./john --wordlist=./password.list /opt/shadow.txt #使用指定的字典文件進行破解
9)添加字典內容
若密碼無法被暴力破解說明字典中沒有該密碼記錄,可以進入字典文件(/opt/john-1.8.0/run/password.list)中手工輸入添加,字典內容的豐富程度與破解能力成正比
七、端口掃描
1、網絡掃描工具-NMAP
NMAP是一個強大的端口掃描類安全評測工具,支持ping掃描、多端口檢測等多種技術。
2、安裝NMAP軟件包
rpm -qa | grep nmap #檢查是否已安裝
yum install -y namp #若未安裝,進行yum安裝
3、nmap命令常用的選項和掃描類型

4、常規檢測方式:netstat
netstat -natp # 查看正在運行的使用TCP協議的網絡狀態信息
netstat -naup # 查看正在運行的使用UDP協議的網絡狀態信息
1) 分別查看本機/其他主機開放的TCP、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
2)檢測192.168.80.0/24網段有哪些主機提供HTTP服務
nmap -p 80 192.168.80.0/24
3)檢測192.168.80.0/24網段有哪些存活主機
nmap -n -sP 192.168.80.0/24
5、netstat命令常用選項
