系統安全與應用
- 一、賬號安全基本措施
- 1.1 系統賬號清理
- 1.1.1 將非登錄用戶的Shell設為/sbin/nologin
- 1.1.2 鎖定長期不使用的賬號
- 1.1.3 洗掉無用的賬號
- 1.1.4 鎖定賬號檔案 passwd、shadow(/etc/passwd、/etc/shadow)
- 1.1.5 清空用戶密碼
- 1.2 密碼安全控制
- 1.3 命令歷史限制
- 1.4 終端自動注銷
- 二、使用su命令切換用戶
- 2.1 用途及用法
- 2.2密碼驗證
- 三、 Linux中的PAM安全認證
- 3.1 su命令的安全隱患
- 3.1.1 PAM(Pluggable Authentication Modules)可插拔式認證模塊
- 3.2 PAM認證原理
- 3.2.1 一般遵循的順序
- 3.3 PAM認證的構成
- 3.3.1 查看某個程式是否支持PAM認證,可以用 Is 命令
- 3.3.2 查看su的PAM組態檔
- 3.4 PAM安全認證流程
- 3.5 限制使用su命令的用戶
- 3.5.1 將允許使用su命令的用戶加入wheel組
- 3.5.2 控制標記的補充說明:
- 3.6 查看su操作記錄
- 3.6.1 安全日志檔案 : /var/log/secure
- 四、使用sudo機制提升權限
- 4.1 sudo命令的用途及用法
- 4.2 配置sudo授權(使用sudo機制提升)
- 4.2.1 使用格式
- 4.3 使用關鍵字User_Alias、 Host_Alias、 Cmnd_Alias來進行設定別名(別名必須為大寫)
- 4.4 啟用sudo操作日志
- 4.5 查看sudo操作記錄
- 4.6 查詢授權的sudo操作
- 五、開關機安全控制
- 5.1 調整BIOS引導設定
- 5.2 GRUB限制
- 5.3 限制更改GRUB引導引數
- 六、終端登錄安全控制
- 6.1 限制root只在安全終端登錄
- 6.2 建立/etc/nologin檔案
- 七、系統弱口令檢測
- 7.1 安裝JR工具
- 7.1.1安裝方法
- 7.2 檢測弱口令賬號
- 7.3 密碼檔案的暴力破解
- 7.4 解壓工具包
- 八、網路埠掃描
- 8.1 NMAP
- 8.2 安裝NMAP軟體包
- 8.3 nmap命令常用的選項和掃描型別
- 8.4 natstat命令常用選項
一、賬號安全基本措施
1.1 系統賬號清理
1.1.1 將非登錄用戶的Shell設為/sbin/nologin
usermod -s /sbin/nologin 用戶名
解除時用 usermod -s /bin/bash 用戶名


1.1.2 鎖定長期不使用的賬號
usermod -L 用戶名
passwd -l 用戶名
(查看用戶的狀態是否被鎖 passwd -S 用戶名)
解鎖用:passwd -u 用戶
usermod -U 用戶




1.1.3 洗掉無用的賬號
userdel [-r] 用戶名

1.1.4 鎖定賬號檔案 passwd、shadow(/etc/passwd、/etc/shadow)
chattr +i /etc/passwd /etc/shadow 鎖定檔案
lsattr /etc/passwd /etc/shadow 查看狀態
chattr -i /etc/passwd /etc/shadow 解鎖檔案

1.1.5 清空用戶密碼
passwd -d 用戶 清空用戶密碼

1.2 密碼安全控制
設定密碼有效期
要求用戶下次登錄時修改密碼
[root@localhost~]# vi /etc/login.defs 修改密碼組態檔適用于新建用戶
......
PASS MAX_DAYS 30
[root@localhost~]# chage -M 30 lisi 適用于已有用戶
[root@localhost~]# cat /etc/shadow | grep lisi
[root@localhost~]# chage -d 0 zhangsan
[root@localhost~]# cat /etc/shadow | grep zhangsan 強制在下次登錄時更改密碼
###shadow檔案中的第三個欄位被修改為0


1.3 命令歷史限制
減少記錄的命令條數
注銷時自動清空命令歷史
[root@localhost~]# vi /etc/profile
export HISTSIZE=200
[root@localhost~]# source /etc/profile
方法一:
[root@localhost~]# vi ~/.bash_logout
history -c
clear
方法二:
[root@localhost~]# vi ~ /.bashrc
echo " " >~/.bash_history



1.4 終端自動注銷
閑置600秒后自動注銷(終端)
[root@localhost ~]# vi /etc/profile
......
export TMOUT=600
[root@localhost~]# source /etc/profile


二、使用su命令切換用戶
2.1 用途及用法
用途:Substitute User,切換用戶
格式
su - 目標用戶 帶-選項表示將使用目標用戶的登錄Shell環境
2.2密碼驗證
root→任意用戶,不驗證密碼
普通用戶→其他用戶,驗證目標用戶的密碼
[jerry@localhost ~]$ su - root #帶-選項表示將使用目標用戶的登錄Shell環境
口令:
[root@localhost~] whoami
root

三、 Linux中的PAM安全認證
3.1 su命令的安全隱患
默認情況下,任何用戶都允許使用su命令,有機會反復嘗試其他用戶(如root)的登錄密碼,會帶來安全風險
為了加強su命令的使用控制,可借助于PAM認證模塊,只允許極個別用戶使用su命令進行切換
3.1.1 PAM(Pluggable Authentication Modules)可插拔式認證模塊
是一種高效而且靈活便利的用戶級別的認證方式
也是當前Linux服務器普遍使用的認證方式
Linux-PAM,是Linux可插拔認證模塊,是一套可定制、可動態加載的共享庫,使本地系統管理員可以隨意選擇程式的認證方式,PAM使用 /etc/pam.d/ 下的組態檔,來管理對程式的認證方式,應用程式呼叫相應的PAM組態檔,從而呼叫本地的認證模塊,模塊放置在 /lib64/security 下,以加載動態庫的形式進行認證,比如使用su命令時,系統會提示輸入root用戶的密碼,這就是su命令通過呼叫PAM模塊實作的,
3.2 PAM認證原理
3.2.1 一般遵循的順序
1、PAM認證一般遵循的順序:Service (服務)–> PAM (組態檔)–> pam *.so
2、PAM認證首先要確定哪一項應用服務,然后加載相應的PAM的組態檔(位于/etc/pam.d下),最后呼叫認證模塊(位于 /lib64/security/ 下)進行安全認證
3、用戶訪問服務器的時候,服務器的某一個服務程式把用戶的請求發送到PAM模塊進行認證,不同的應用程式所對應的PAM模塊也是不同的
如果想查看某個程式是否支持PAM認證,可以用ls命令進行查看 /etc/pam.d/,
PAM的組態檔中的每一行都是一個獨立的認證程序,它們按從上往下的順序依次由PAM模塊呼叫,
3.3 PAM認證的構成
3.3.1 查看某個程式是否支持PAM認證,可以用 Is 命令

示例:查看su是否支持PAM模塊認證
ls /etc/pam.d | grep su

3.3.2 查看su的PAM組態檔
cat /etc/pam.d/su

每一行都是一個獨立的認證程序
每一行可以區分為三個欄位
(1)認證型別
(2)控制型別
(3)PAM模塊及其引數
3.4 PAM安全認證流程
控制型別也稱做Control Flags,用于PAM驗證型別的回傳結果
1、required驗證失敗時仍然繼續,但回傳Fail
2、requisite驗證失敗則立即結束整個驗證程序,回傳Fail
3、sufficient驗證成功則立即回傳,不再繼續,否則忽略結果并繼續
4、optional不用于驗證,只顯示資訊(通常用于session型別)
PAM驗證流程圖

3.5 限制使用su命令的用戶
3.5.1 將允許使用su命令的用戶加入wheel組
啟用pam_wheel認證模塊
[root@localhost~]# gpasswd -a tsengyia wheel #添加 tsengyia
正在將用戶"tsengyia"加入到"wheel"組中
[root@localhost~]# vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
......


第一列代表PAM認證模塊型別
auth:對用戶身份進行識別,如提示輸入密碼,判斷是否為root.
account:對賬號各項屬性進行檢查,如是否允許登錄系統,帳號是否已經過期,是否達到最大用戶數等,
password:使用用戶資訊來更新資料,如修改用戶密碼,
session:定義登錄前以及退出后所要進行的會話操作管理,如登錄連接資訊,用戶資料的打開和關閉,掛載檔案系統,
第二列代表PAM控制標記
required:表示需要回傳一個成功值,如果回傳失敗,不會立刻將失敗結果回傳,而是繼續進行同型別的下一驗證,所有此型別的模塊都執行完成后,再回傳失敗
requisite:與required類似,但如果此模塊回傳失敗,則立刻回傳失敗并表示此型別失敗,
sufficient:如果此模塊回傳成功,則直接向程式回傳成功,表示此類成功,如果失敗,也不影響這型別的回傳值,
optional:不進行成功與否的回傳,一般不用于驗證,只是顯示資訊(通常用于session型別)
include:表示在驗證程序中呼叫其他的PAM組態檔,比如很多應用通過完整呼叫 /etc/pam.d/system-auth
(主要負責用戶登錄系統的認證作業)來實作認證而不需要重新逐一去寫配置項,
第三列代表PAM模塊
默認是在 /lib64/security/ 目錄下,如果不在此默認路徑下,要填寫絕對路徑,
同一個模塊,可以出現在不同的模塊型別中,它在不同的型別中所執行的操作都不相同,這是由于每個模塊針對不同的模塊型別編制了不同的執行函式,
第四列代表PAM模塊的引數
這個需要根據所使用的模塊來添加,傳遞給模塊的引數,引數可以有多個,之間用空格分隔開
auth required pam_wheel.so use_uid 前有#表示啟用wheel組,在組內的可以su,不在組內的拒絕請求
啟用pam_wheel認證以后,未加入到wheel組內的其他用戶將無法使用su命令

3.5.2 控制標記的補充說明:
required:表示該行以及所涉及模塊的成功是用戶通過鑒別的【必要條件】,換句話說,只有當對應于應用程式的所有帶required標記的模塊全部成功后,該程式才能通過鑒別,同時,如果任何帶required標記的模塊出現了錯誤,
PAM并不立刻將錯誤訊息回傳給應用程式,而是在所有此型別模塊都呼叫完畢后才將錯誤訊息回傳呼叫他的程式,反正說白了,就是必須將所有的此型別模塊都執行一次,其中任何一個模塊驗證出錯,驗證都會繼續進行,并在執行完成之后才回傳錯誤資訊,這樣做的目的就是不讓用戶知道自己被哪個模塊拒絕,通過一種隱蔽的方式來保護系統服務,就像設定防火墻規則的時候將拒絕類的規則都設定為drop一樣,以致于用戶在訪問網路不成功的時候無法準確判斷到底是被拒絕還是目標網路不可達,
requisite:與required相仿,只有帶此標記的模塊回傳成功后,用戶才能通過鑒別,不同之處在于其一旦失敗就不再執行堆中后面的其他模塊,并且鑒別程序到此結束,同時也會立即回傳錯誤資訊,與上面的required相比,似乎要顯得更光明正大一些
sufficient:表示該行以及所涉及模塊驗證成功是用戶通過鑒別的【充分條件】,也就是說只要標記為sufficient的模塊一旦驗證成功,那么PAM便立即向應用程式回傳成功結果而不必嘗試任何其他模塊,即便后面的層疊模塊使用了requisite或者required控制標志也是一樣,當標記為sufficient的模塊失敗時,sufficient模塊會當做optional對待,因此擁有sufficient標志位的配置項在執行驗證出錯的時候并不會導致整個驗證失敗,但執行驗證成功之時則大門敞開,所以該控制位的使用務必慎重
optional:他表示即便該行所涉及的模塊驗證失敗用戶仍能通過認證,在PAM體系中,帶有該標記的模塊失敗后將繼續處理下一模塊,也就是說即使本行指定的模塊驗證失敗,也允許用戶享受應用程式提供的服務,使用該標志,PAM框架會忽略這個模塊產生的驗證錯誤,繼續順序執行下一個層疊模塊,
實體:
| 用戶1 | 用戶2 | 用戶3 | 用戶4 | |||
|---|---|---|---|---|---|---|
| auth | required | 模塊1 | pass | fail | pass | pass |
| auth | substack | 模塊2 | pass | pass | fail | pass |
| auth | required | 模塊3 | pass | pass | pass | fail |
| 結果 | pass | fail | pass | pass |
(重點)在/etc/pam.d/su檔案里設定禁止用戶使用su命令
vim /etc/pam.d/su
auth sufficient pam_rootok.so
......
#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 zhangsan wheel #添加授權用戶 zhangsan 到 wheel 組中
groups zhangsan (查看zhangsan屬組)
vim /etc/pam.d/su
auth required pam_heel.so use_uid #去掉此行開頭的注釋(表示只允許root和組內用戶使用su)
?
3.6 查看su操作記錄
3.6.1 安全日志檔案 : /var/log/secure
vim /var/log/secure 查看日志

tail -f /var/log/secure
tail -f #等同于--follow=descriptor,根據檔案描述符進行追蹤,當檔案改名或被洗掉,追蹤停止
四、使用sudo機制提升權限
su命令的缺點????????????
4.1 sudo命令的用途及用法
用途:以其他用戶身份(如root)執行授權的命令用法
用法
sudo 授權命令
4.2 配置sudo授權(使用sudo機制提升)
visudo 或者 vi /etc/sudoers(此檔案的默認權限為440,保存退出時必須執行":wg!"命令來強制操作)
4.2.1 使用格式
用戶 主機名=命令程式串列
用戶 主機名=(用戶)命令程式串列
用戶:直接授權指定的用戶名,或采用"%組名"的形式(授權一個組的所有用戶) ,
主機名:使用此規則的主機名,沒配置過主機名時可用localhost,有配過主機名則用實際的主機名, ALL則代表所有主機
(用戶):用戶能夠以何種身份來執行命令,此項可省略,預設時以root用戶的身份來運行命令
命令程式串列:允許授權的用戶通過sudo方式執行的特權命令,需填寫命令程式的完整路徑,多個命令之間以逗號","進行分隔,ALL則代表系統中的所有命令
[root@localhost~]# visudo
......
%wheel ALL=NOPASSWD:ALL
jerry localhost=/sbin/ifconfig
syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route #可以使用通配符*、取反符號!
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
mike localhost=PKGTOOLS

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
4.3 使用關鍵字User_Alias、 Host_Alias、 Cmnd_Alias來進行設定別名(別名必須為大寫)
其實就是把大家都放在了一個大的概念里就像白馬=馬、黑馬=馬 所以白馬=黑馬(當然這是謬論)
User_Alias USERS=Tom, Jerry, Mike
Host_Alias HOSTS=localhost,bogor
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel #命令串列的別名
USERS HOSTS=CMNDS #將命令寫入
4.4 啟用sudo操作日志
?visudo
Defaults logfile = "/var/log/sudo"
su - Tom
/sbin/ifconfig ens33:0 192.168.1.11/24
sudo /sbin/ifconfig ens33:0 192.168.1.11/24
#初次使用sudo時需驗證當前用戶的密碼,默認超時時長為5分鐘,在此期間不再重復驗證密碼,






4.5 查看sudo操作記錄
需啟用Defaults logfile配置
默認日志檔案:/var/log/sudo
[root@localhost ~]#visudo
Defaults logfile ="/var/log/sudo"
[root@localhost ~]# tail /var/log/sudo
...
Aug 24 23:59:44 :jerry : TTY=pts/0 ; PWD=/home/jerry ;USER=root ; COMMAND=/sbin/ifconfigens33:0 192.168.1.11/24
啟用日志配置以后, sudo
Aug 25 00:00:46 : syrianer : TTY=操作程序才會被記錄
pts/1 ; PWD=/home/syrianer ; USER=root ; COMMAND=list

4.6 查詢授權的sudo操作
sudo -l #查看當前用戶獲得哪些sudo授權


五、開關機安全控制
5.1 調整BIOS引導設定
將第一引導設備設為當前系統所在硬碟
禁止從其他設備(光碟、U盤、網路)引導系統
將安全級別設為setup,并設定管理員密碼
5.2 GRUB限制
使用grub2-mkpasswd-pbkdf2生成密鑰
修改/etc/grub.d/00_header檔案中,添加密碼記錄
生成新的grub.cfg組態檔
5.3 限制更改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鍵將需要輸入賬號密碼才能修改引導引數,
六、終端登錄安全控制
6.1 限制root只在安全終端登錄
安全終端配置: /etc/securetty
[root@localhost~]#vi /etc/securetty
......
#tty5
#tty6 #禁止root用戶從終端端tty5,tty6登錄
禁止普通用戶登錄
6.2 建立/etc/nologin檔案
洗掉nologin檔案或重啟后即恢復正常
[root@localhost~]# touch /etc/nologin #禁止普通用戶登錄
[root@localhost~]# rm -rf /etc/nologin #取消上述登錄限制
七、系統弱口令檢測
Joth the Ripper,簡稱為JR
一款開源的密碼分析工具,支持字典式(密碼字典:包含各種密碼組合的串列檔案)的暴力破解
通過對shadow檔案的口令分析,可以檢測密碼強度
官方網站: http://www.openwall.com/john/

7.1 安裝JR工具
7.1.1安裝方法
make clean 系統型別
主程式檔案為john
7.2 檢測弱口令賬號
獲得Linux/Unix服務器的shadow檔案
執行john程式,將shadow檔案作為引數
7.3 密碼檔案的暴力破解
準備好密碼字典檔案,默認為password.lst
執行john程式,結合 --wordlist=字典檔案
7.4 解壓工具包
cd /opt #安裝在此目錄下
把John the ripper壓縮包拖進xshell內
tar zxf john-1.8.0.tar.gz #完成解壓(視頻中是zxfv) #用 ls 查看一下是否解壓完成

#切換到src子目錄
cd /opt/john-1.8.0/src
或
cd jhon-1.8.0./src/ #用 ls 查看一下

#安裝軟體編譯工具
yum install -y gcc gcc-c++ make #安裝要較長時間



#確認是否掛載沒掛載就掛載
df -h
mount /dev/cdrom /mnt #沒掛載就掛載

#進行編譯安裝(要在 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 #使用指定的字典檔案進行破解
八、網路埠掃描
8.1 NMAP
一款強大的埠掃描類安全評測工具,支持ping掃描、多埠檢測等多種技術,
官方網站: http://nmap.org/
CentOS 7.3光碟中安裝包nmap-6.40-7.el7.x86_64.rpm
8.2 安裝NMAP軟體包
rpm -qa | grep nmap
yum install -y nmap
8.3 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檢測,快速判斷目標主機是否存活,不做其他掃描
-P0:跳過ping檢測,這種方式認為所有的目標主機是存活的,當對方不回應ICMP請求時,使用這種方式可以避免因無法ping通而放棄掃描
netstat -natp 查看在運行的使用TCP協議的網路狀態資訊
netstat -naup 查看正在運行的使用UDP協議的網路狀態資訊
示例:
#分別查看本機開放的TCP埠、UDP埠
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1


#檢測192.168.4.0/24網段有哪些主機提供HTTP服務
nmap -p 80 192.168.4.0/24
#檢測192.168.4.0/24網段有哪些存活主機
nmap -n -sP 192.168.4.0/24
8.4 natstat命令常用選項
-a:顯示主機中所有活動的網路連接資訊(包括監聽、非監聽狀態的服務埠),
-n:以數字的形式顯示相關的主機地址、埠等資訊,
-t:查看TCP相關的資訊,
-u:顯示UDP協議相關的資訊,
-p:顯示與網路連接相關聯的行程號、行程名稱資訊(該選項需要root權限),
-r:顯示路由表資訊,
-l:顯示處于監聽狀態的網路連接及埠資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230372.html
標籤:其他
上一篇:docker:IPv4 forwarding is disabled. Networking will not work. 解決方法
