天天看點

全面詳解Linux系統安全及應用

文章目錄

    • 一.基本安全措施
      • 1.系統賬号清理
      • 2.密碼安全控制
      • 3.指令曆史,自動登出
    • 二.使用者切換與提權
      • 1.su指令 --substitute user(切換使用者)
      • 2.sudo指令 (提升執行權限)
    • 三.PAM安全認證
    • 四.開關機安全控制
      • 1.調整bios引導設定
      • 2. 禁止ctrl +alt +del 快捷鍵重新開機
      • 3.限制更改GRUB引導參數
    • 五.終端及登入控制
      • 1.減少開放的tty終端個數(以下方法隻适用于contens 6)
      • 2. 禁止root 使用者登入
      • 3.禁止普通使用者登入
    • 六.弱密碼檢測
    • 七.網絡掃描 -NMAP

一.基本安全措施

1.系統賬号清理

1.将非登入使用者的shell設為/sbin/nologin 來禁止使用者登入

useradd -s /sbin/nologin zhangsan
           

2.鎖定長期不适用的賬号

usermod -L zhangsan // 鎖定賬戶zhangsan

passwd -S zhangsan // 檢視賬戶狀态
zhangsan LK 2020-08-28 0 99999 7 -1 (Password locked.) //已被鎖定

usermod -U zhangsan //解鎖賬戶

passwd -S zhangsan
zhangsan PS 2020-08-28 0 99999 7 -1 (Password set, MD5 crypt.)
           

3.删除無用的賬号

userdel zhangsan
           

4.鎖定賬号檔案passwd ,shadow

chattr +i /etc/passwd /etc/shadow		#鎖定檔案
lsattr /etc/passwd /etc/shadow			#檢視狀态
           

chattr 指令的用法:

選項 用法
+ 在原有參數設定基礎上,追加參數。(配合以下選項使用,不能單獨使用)
- 在源有參數設定基礎上,移除參數(配合以下選項使用,不能單獨使用)
= 更新為指定參數設定(配合以下選項使用,不能單獨使用)
A 檔案或目錄的atime 不可被修改,可以有效預防例如手提電腦磁盤I /0錯誤的發生。
S 硬碟 I/O 同步選項,功能類似sync
a 即 compresse,設定檔案是經過壓縮後再存儲,讀取時需要經過自動解壓操作。
d 即 no dump ,設定檔案不能成為dump 程式的備份目标
i 設定檔案不能被删除,改名,設定連結關系,同時不能寫入或新增内容,i 參數對于檔案系統的安全設定有很大幫助
j 設定此參數使得當通過 mount 參數: data= ordered 或者 data = writeback 挂載的系統檔案

例如:

[[email protected] ~]# chattr +i /etc/passwd /etc/shadow //鎖定檔案
[[email protected] ~]# lsattr /etc/passwd /etc/shadow // 檢視為鎖定的狀态
----i----------- /etc/passwd
----i----------- /etc/shadow
[[email protected] ~]# useradd zhangsan //此時建立賬戶因為是鎖定狀态無法建立
useradd: cannot open /etc/passwd

[[email protected] ~]# passwd zhangsan // 修改密碼也因無法打開檔案而無法修改
passwd: Unknown user name 'zhangsan'.
[[email protected] ~]# chattr -i /etc/passwd /etc/shadow //解鎖檔案
[[email protected] ~]# lsattr /etc/passwd /etc/shadow //檢視為解鎖的狀态
---------------- /etc/passwd
---------------- /etc/shadow
[[email protected] ~]# useradd zhangsan //此時建立賬戶以及修改密碼都可
[[email protected] ~]# passwd zhangsan
Changing password for user zhangsan.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[[email protected] ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan)
           

2.密碼安全控制

密碼安全控制有以下兩種:
	設定密碼有效期
	要求使用者下次登入時修改密碼

vi /etc/login.defs		#适用于建立使用者
......
PASS_MAX_DAYS 30

chage -M 30 lisi		#适用于已有使用者

chage -d 0 zhangsan		#強制在下次登入時更改密碼
           

3.指令曆史,自動登出

指令曆史

指令曆史限制有以下三種方法:
	減少記錄的指令條數
	登出時自動清空指令曆史

[] vi /etc/profile
histsize=200 		//保留 200 t條曆史指令 (重新開機之後生效)
[] vi ~/.bash_logout
history -c 			// 清空曆史記錄 (重新開機之後生效)
clear
或者
[] echo > $home./bash_history //清空曆史記錄
           

自動登出

終端自動登出
	閑置600 秒後自動登出

vi ~/.bash_profile
......
export TMOUT=600 //閑置600秒後自動登出
           

二.使用者切換與提權

1.su指令 --substitute user(切換使用者)

作用: substitute user 切換使用者

格式: su - 目标使用者

su - root		#帶-選項表示将使用目标使用者的登入Shell環境
密碼
whoami
root

密碼驗證
	root -->任意使用者,不驗證密碼
	普通使用者-->其他使用者,驗證目标使用者的密碼
限制使用 su 指令的使用者
	将允許使用su指令的使用者加入wheel組
	啟用 pam_wheel 認證子產品
注意 : ( 自己做試驗的現象就是加入wheel組之間的可以自由切換,包括root,但是建立的或者是未加入wheel組的切換不了)
           

例如

[[email protected] ~]# gpasswd -a lisi wheel //添加授權使用者lisi
Adding user lisi to group wheel
[[email protected] ~]# grep wheel /etc/group //确認wheel 組成員
wheel:x:10:lihuihui,lisi
[email protected] ~]# vi /etc/pam.d/su //進入配置檔案去掉下面行開頭的#注釋
auth required pam_wheel.so use_uid
           

2.sudo指令 (提升執行權限)

1.在配置檔案/etc/sudoers 中添加授權

授權配置主要包括使用者,主機,指令三個部分含義分别如下
	使用者user 授權的使用者名,或者采用“%組名”的形式,(授權一個組的所有使用者)
	主機 (MACHINE)使用此配置檔案的主機名稱,此部分主要是友善在多個主機之間共用同一份sudoers檔案,一般設定為localhost或者實際的主機名即可
	指令·(COMMANDS)允許授權的使用者通過sudo方式執行特權指令,需填寫指令程式的完整路徑,多個明令之間以逗号,進行分隔。

彌補su指令的缺點
sudo 指令的用途及用法
	用途:以其他使用者身份(如root)執行授權指令
	用法:sudo 授權指令
配置sudo授權 (* 表示所有 !表示取反,不給使用)
	visudo 或者vi /etc/sudoers (儲存時:wq!)
	記錄格式 使用者 主機名清單=指令程式清單
           

備注: %wheel ALL=(ALL) ALL ALL 從左到右,第一個all是使用者,第二個是機器,第三個是新使用者身份(如 run_as_user ,如root ,oracle )第四個是指令

例如: (提權)

[[email protected] ~]# su lisi //切換使用者
[[email protected] root]$ vi a //建立檔案并編輯,此時因為沒有權限是編輯不了的
[[email protected] root]$ sudo /usr/bin/vi a //提升權限, 此時編輯是可以編輯的,編輯内容如下
[[email protected] root]$ sudo /usr/bin/cat a
123
[[email protected] root]$ touch b.txt //建立檔案夾,此時也因為沒有權限是建立不了
touch: cannot touch ‘b.txt’: Permission denied //無權限,拒絕
[[email protected] root]$ sudo /usr/bin/touch b.txt //提升全限
[[email protected] root]$ sudo /usr/bin/ls -lh //給ls -lh也提升權限來檢視一下,此時,已經建立檔案
total 20K
-rw-r--r-- 1 root root 4 Aug 30 19:35 a
-rw-r--r-- 1 root root 7 Aug 30 19:30 aa
-rw-------. 1 root root 2.9K Aug 9 20:18 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Aug 30 19:31 a.txt
... 省略部分内容
           

用sudo -l 來參看使用者所擁有的權限 (whoami檢視目前使用者是哪個)

注意:改權限的時候先檢視在哪個檔案夾下面,比如說,檢視路由 which route ,如果一個賬戶屬于多個組,那這個賬戶同時擁有多個組的權限, usr/sbin/下的權限隻能管理者能用,如果授予管理者權限加入wheel租的話既可以用。

[# ]route add -host 192.168.20.100 gw 192.168.20.1 添加主機加路由
【#】# route -n // 檢視路由
【$】sudo /ussr/sbin/route add -host 92.168.20.100 gw 192.168.20.1
【$】sudo /usr/sbin/ifconfig ens33:3 192.168.50.1/24
tail -f /var/log/secure : 此日志是檢視不給記錄

注:
[[email protected] ~]# ifconfig ens33:1 192.168.100.1/24 // 添加網段路由
[[email protected] ~]# route add -net 192.168.100.0/24 gw 192.168.100.1
# route add default gw 192.168.100.1 //添加預設路由
           

檢視sudo 操作記錄

​ 需要啟用 defaults logfile 配置

​ 預設日志檔案 : /var/log/sudo

補充:給普通使用者提權限但是不加入wheel組還有一種方式

【#】visudo
%wheel ALL=(ALL) ALL //加入wheel組的所有使用者都可以使用root權限
lisi server1=(zhangsan) /usr/bin/touch,/usr/bin/ls // 設定lisi 以張三的身份運作 并權重限 touch , ls
例如: sudo -u lisi /usr/bin/vi a.txt 使lisi以自己的身份運作執行權限。通常用來驗證權限
           

三.PAM安全認證

PAM 認證原理
	一般遵循的順序
		service(服務)—>PAM (配置檔案)--->pam_*.so
	首先要确定哪一項服務,然後加載相應的PAM的配置檔案(位于/etc/pam.d下),最後調用認證檔案(位于/lib/security下)進行安全認證
	使用者通路伺服器時,伺服器的某一個服務程式把使用者的請求發送到pam子產品進行認證
	不同的應用程式所對應的pam子產品是不同的
PAM 認證的構成
	檢視某個程式是否支援pam認證,可以用ls指令
例如
ls /etc/pam.d \ grep su

檢視su 的pam配置檔案:cat /etc/pam.d/su
	每一行都是一個獨立的認證過程
	每一行可以區分為三個字段 (認證類型 ,控制類型,PAM子產品及其參數)
	認證類型 (有以下四種)
		+ 認證管理: 授權使用者名和密碼,進而對該使用者的密碼進行認證
		+ 賬戶管理 : 檢查賬戶是否被允許登入系統,賬号時候已經過期,賬号的登入時候有時間段的限制等
		+ 密碼管理 : 主要用來修改使用者的密碼
		+ 會話管理 : 主要提供對話的管理和記賬
	控制類型
	控制類型也可以稱作control flags ,用于PAM驗證類型的傳回結果
	+ <1> required 驗證失敗時仍然繼續,但傳回fail
	+ <2>requisite 驗證失敗則立即結束整個驗證過程,傳回fail
	+ <3>sufficient 驗證成功則立即傳回,不再繼續,否則忽略結果并繼續
	+ <4>optinal 不用于驗證隻顯示資訊
           

PAM 子產品及其參數

全面詳解Linux系統安全及應用
su 指令的安全隐患
	預設情況下,任何使用者都允許使用su指令,有機會反複嘗試其他使用者,(如root)的登入密碼,帶來安全風險
	為了加強su 指令的使用控制,可借助PAM認證子產品,隻允許極個别使用者使用su指令進行切換
PAM 可插拔式認證子產品
	是一種高效而且靈活便利的使用者級别的認證方式
	也是目前linux伺服器普遍使用的認證方式
           

四.開關機安全控制

1.調整bios引導設定

調整BIOS引導設定
	将第一引導裝置設為目前系統所在硬碟
	禁止從其他裝置(CD光牒,U盤,網絡)引導系統
	将安全級别設為setup,并設定管理者密碼
           

2. 禁止ctrl +alt +del 快捷鍵重新開機

3.限制更改GRUB引導參數

使用gtub2-mkpasswd-pbkdf2生成密鑰
	修改/etc/grub.d/00_header檔案中,添加密碼記錄
	生成新的grub.cfg配置檔案
	
相關指令
grub2-mkpasswd-pbkdf2 //根據提示指定密碼,生成加密密鑰
Enter passwd:
Reenter password:
此段密鑰 is 後面才開始 假設密鑰為:asfhoia hfoasnvosdjiodcnxcjoasdnvasvnaf
......
//以上是經過加密的密碼字元串省略
【#】cp -rp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
【#】cp -rp /etc/grub.d/00_header /etc/grub.d/00_header.bak
【#】vim /etc/grub.d/00_header //将下面内容添加到檔案最後一行
	cat << EOF
	set superusers="root" password_pbkdf2 root 這裡後面加入is 後面的密鑰
	EOF
【#】grub2-mkconfig -o /boot/grub2/grub.cfg
           

注意:在使用cat <<EOF時,輸入完畢之後,需要在一個新的一行輸入EOF結束stdin的輸入。EOF必須頂行寫,前面不能用制表符或者空格。密鑰也可參考下面密鑰複制:

全面詳解Linux系統安全及應用

五.終端及登入控制

1.減少開放的tty終端個數(以下方法隻适用于contens 6)

/etc/init/tty.conf 控制tty終端的開啟
/etc/init/start-ttys.conf 控制tty終端的開啟數量,裝置檔案
/etc/sysconfig/init 控制tty 終端的開啟數量,終端顔色

配置示例如下
【#】vi /etc/init/start-ttys.conf
......
env ACTIVE_CONSOLES=/dev/tty[456]
【#】vi /etc/sysconfig/init
......
ACTIVE_CONSOLES=/dev/tty[456]
【reboot】
           

禁用tty1,tty2,tty3終端以後,重新開機并進入字元模式,預設将無法登陸。必須按alt+f4,alt+f5,alt+f6組合切換到可用的終端,然後才能進行登陸操作。

2. 禁止root 使用者登入

限制root 隻在安全終端登入
	安全終端配置:/etc/securetty
	
例如
[[email protected] ~]# vi /etc/securetty
......
#tty5
#tty6
//禁止root使用者從終端tty5、tty6
           

3.禁止普通使用者登入

在伺服器進行備份或調試過程時用

touch /etc/nologin			#禁止普通使用者登入
rm -rf /etc/nologin			#取消上述登入限制
           

六.弱密碼檢測

介紹

John the Ripper 簡稱JR ,一款密碼分析工具,支援字典式的暴力破解

通過對shadow檔案的密碼分析,可以檢測密碼強度

官方網站: http://www.openwall.com/john/

全面詳解Linux系統安全及應用
檢測過程:
	安裝JR工具
		安裝方法 : make clean系統類型
		主程式檔案為 john
	檢測弱密碼賬号
		獲得linux/unix伺服器的shadow檔案
		執行john程式,将shadow檔案作為參數
	密碼檔案的暴力破解
		準備好密碼字典檔案,預設為password.lst
		執行john程式,結合--wordlist=字典檔案
           

示例破解過程

首選導入john的壓縮包
[[email protected] ~]# tar zxvf john-1.8.0.tar.gz //解壓縮包
[[email protected] ~]# cd john-1.8.0
[[email protected] john-1.8.0]# cd src
[[email protected] src]# make clean linux-x86-64 //執行編譯檔案
[[email protected] src]# ls ../run/john //檢視是否生成john程式
../run/john
[[email protected] src]# cp /etc/shadow /root/shadow.txt //複制密碼檔案
[[email protected] src]# cd ../run
[[email protected] run]# ./john /root/shadow.txt //破譯賬戶弱密碼
Warning: only loading hashes of type "md5crypt", but also saw type "crypt" Use the "--format=crypt" option to force loading hashes of that type instead Loaded 4 password hashes with 3 different salts (md5crypt [MD5 32/64 X2]) Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (zhangsan)
123456 (root)
123456 (lisi)
[[email protected] run]# ./john --show /root/shadow.txt //檢視已破譯出的賬戶清單
root:123456::0:99999:7:::
lisi:123456:18505:0:99999:7:::
zhangsan:123456:18505:0:99999:7:::
           

使用密碼字典檔案破解:

[[email protected] run]# :> john.pot //上一步已破解出的賬戶清單,以便重新分析
[[email protected] run]# ./john --wordlist=./password.lst /root/shadow.txt
Warning: only loading hashes of type "md5crypt", but also saw type "crypt" Use the "--format=crypt" option to force loading hashes of that type instead Loaded 3 password hashes with 3 different salts (md5crypt [MD5 32/64 X2]) Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (zhangsan)
123456 (root)
123456 (lisi)
[[email protected] run]# ./john --show /root/shadow.txt
           

七.網絡掃描 -NMAP

一款強大的網絡掃描,端口掃描安全評測工具,官方站點:http://nmap.org/
支援ping掃描,多端口檢測,OS識别多種技術。
定期掃描内部網絡,可以找出網絡中不可控的應用服務,及時關閉不安全的服務,減小安全風險
指令:(此實驗是在centOS系統下)
yum安裝nmap 軟體包 : yum -y install nmap
文法是:nmap 掃描類型 選項 掃描目标
其中掃描的目标可以是主機名,ip位址,或網絡位址等,多個目标的話可以以空格分隔,常用的選項有 -p -n 分别用來指定掃描的端口,禁用反向DNS解析(以加快掃描速度)
比較常見的幾種掃描方式如下:
nmap -sT (tcp掃描連接配接) 127.0.0.1,192.168.4.0/24,192.168.4.100-200
nmap -sU (udp掃描)
nmap -sP (icmp掃描)
nmap -sS (tcp syn 掃描)
nmap -sF (tcp fin 掃描)
nmap -p (指定端口掃描)
           

例如

[[email protected] ~]# yum -y install nmap
[[email protected] ~]# nmap 127.0.0.1 //tcp 端口掃描
Starting Nmap 6.40 ( http://nmap.org ) at 2020-09-01 04:15 PDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
           

繼續閱讀