文章目錄
- 前言
- 一、基本安全措施
- 1、系統賬號清理
- 2、密碼安全控制
- 3、命令歷史限制
- 4、終端自動注銷
- 二、用戶切換與提權
- 1、切換用戶——su
- 2、在/etc/pam.d/su檔案里設定禁止用戶使用su命令
- 3、用戶提權——sudo
- 三、PAM安全認證
- 1、PAM及作用
- 2、PAM認證原理
- 3、PAM認證的構成
- 4、PAM 控制型別
- 總結
前言
用戶賬號,是計算機使用者的身份憑證或標識,每一個要訪問系統資源的人,必須憑借其用戶賬號才能進入計算機,在 Linux 系統中,提供了多種機制來確保用戶賬號的正當、安全使用,為了確保我們的賬戶安全我們要學會賬號安全的控制,
一、基本安全措施
1、系統賬號清理
- 在 Linux 系統中,除了用戶手動創建的各種賬號之外,還包括隨系統或程式安裝程序而生成的其他大量賬號
- 除了超級用戶 root 之外,其他大量賬號只是用來維護系統運作、啟動或保持服務器行程,一般是不允許登錄的,因此也稱為非登錄用戶
- 為了確保系統安全,這些系統的登錄 shell 通常是 /sbin/nologin,表示禁止終端登錄,應確保不被人為改動
grep "/sbin/nologin$" /etc/passwd
#查看
usermod -s /sbin/nologin 用戶名
#將非登錄用戶的 shell 設為 /sbin/nologin
- 各種非登錄用戶中,還有相當一部分是很少用到的,這些賬號可以視為冗余賬號,直接洗掉即可
- 除此之外,還有一些隨應用程式安裝的用戶賬號,若程式卸載以后未能自動洗掉,則需要管理員手動進行清理
userdel -r 用戶名
#洗掉用戶及其宿主目錄
- 對于 Linux 服務器中長期不用的用戶賬號,若無法確認是否應該洗掉,可以暫時將其鎖定(passwd、usermod 命令皆可用來鎖定、解鎖賬號)
usermod -L 用戶名 #鎖定用戶賬號
passwd -l 用戶名 #鎖定用戶密碼,鎖定的用戶將無法再登錄系統
passwd -S 用戶名 #查看賬號狀態(是否被鎖定)
usermod -U 用戶名 #解鎖用戶賬號

- 如果服務器中的用戶賬號已經固定,不再更改,還可以采取鎖定賬號組態檔的方法
chattr +i /etc/passwd /etc/shadow #鎖定檔案
lsattr /etc/passwd /etc/shadow #查看為鎖定的狀態
chattr -i /etc/passwd /etc/shadpow #解鎖檔案
lsattr /etc/passwd /etc/shadow #查看為解鎖的狀態

注:在賬號檔案被鎖定的情況下,其內容不允許變更,因此無法添加、洗掉賬號,也不能更改用戶的密碼、登錄 Shell、宿主目錄等屬性資訊
2、密碼安全控制
- 在不安全的網路環境中,為了降低密碼被才出或被暴力破解的風險,用戶應養成定期更改密碼的習慣,避免長期使用同一個密碼,管理員可以在服務器端限制用戶密碼的最大有效天數,對于密碼已過期的用戶,登錄時被要求重新設定密碼,否則將拒絕登錄
- 執行以下操作可將密碼的有效期設為 30 天(chage 命令用于設定密碼時限)
vim /etc/login.defs
...
PASS_MAX_DAYS 30 #該設定方法適用于新建的用戶
chage -M 日期 用戶 #設定用戶密碼有效期
chage -E xxxx-xx-xx #設定過期日期
例:
chage -M 30 xjj #該設定方法適用于已存在的用戶


- 在某些特殊情況下,如要求批量創建的用戶初次登錄時必須自設密碼,根據安全規劃統一要求所有用戶更新密碼等,可以由管理員執行強制策略,以便用戶在下次登錄時必須更改密碼
- 執行以下操作可強制要求用戶再下次登錄時重設密碼
chage -d 0 用戶名 #強制再下次登錄時修改密碼
cat /etc/shadow | grep 用戶名 #第三個欄位會被修改為0

3、命令歷史限制
-
Shell 環境的命令歷史機制為用戶提供了極大的便利,但另一方面也給用戶帶來了潛在的風險
-
只要獲得用戶的命令歷史檔案,該用戶的命令操作程序將會一覽無余,如果層間在命令列輸入銘文的密碼,則無意之中服務器的安全壁壘又多了一個缺口
-
在 Bash 終端環境中,歷史命令的記錄條數由變數 HISTSIZE 控制,默認為 1000 條
-
通過修改 /etc/profile 檔案中的 HISTSIZR 變數值,可以影響系統中的所有用戶
#編輯全域變陣列態檔,適用于新登錄用戶
vim /etc/profile
...
export HISTSIZE=200 #設定最多只記錄 200 條歷史命令
. /etc/profile #使 /etc/profile 內的命令多載一遍
history #只能查看 200 條歷史記錄了


4、終端自動注銷
- 在 Bash 終端環境中,還可以設定一個閑置超時時間,當超過指定的時間沒有任何輸入時即自動注銷終端,這樣可以避免當管理員不在時其他人對服務器的誤操風險
- 閑置超時由變數 TMOUT 來控制,默認單位為秒
vim /etc/profile #編輯全域變陣列態檔
...
export TMOUT=600 #輸出閑置超時變數 #600s為10min
. /etc/profile #執行該檔案內命令后生效
二、用戶切換與提權
大多數 Linux 服務器并不建議用戶直接以 root 用戶進行登錄,一方面可以大大減少因為誤操作而導致的破壞,另一方面也降低了特權密碼在不安全的網路總被泄露的風險,鑒于這些原因,需要為普通用戶提供一種身份切換或權限提升機制,以便在必要時執行管理任務
1、切換用戶——su
- 默認情況下,任何用戶都允許使用 su 命令,從而有機會反復嘗試其他用戶(如 root) 的登錄密碼,這樣帶來了安全風險,為了加強 su 命令的使用控制,可以借助于 pam_wheel 認證模塊,只允許極個別用戶使用 su 命令進行切換,實作程序如下:將授權使用 su 命令 的用戶添加到 wheel 組,修改/etc/pam.d/su 認證配置以啟用 pam_wheel 認證,
su -root #若當前登錄的為其他用戶,需要切換為 root 用戶
#需輸入 root 用戶的密碼,驗證成功后即可成功獲得 root 權限
- 上述命令操作中,選項“-”等同于“–login”或“-l”,表示切換用戶后進入目標用戶的登錄 Shell 環境,若缺少此選項則僅切換身份、不切換用戶環境
- 對于切換為 root 用戶的情況,“root”可以省略
gpasswd -a xcf wheel #將授權使用 su 命令的用戶添加到 wheel 組
grep wheel /etc/group #確認 wheel 組成員
#修改認證配置
vim /etc/pam.d/su
...
auth required pam_wheel.so use_uid
#取消注釋
2、在/etc/pam.d/su檔案里設定禁止用戶使用su命令
安全日志檔案:/var/log/secure
vim /etc/pam.d/su
①以上兩行是默認狀態(即開啟第一行,注釋第二行),這種狀態下是允許所有用戶間使用su命令進行切換的
2 auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid


②兩行都注釋也是運行所有用戶都能使用su命令,但root’下使用su切換到其他普通用戶需要輸入密碼;如果第一行不注釋,則root使用su切換普通用戶就不需要輸入密碼(pam rootok. so模塊的主要作用是使uid為0的用戶,即root用戶能夠直接通過認證而不用輸入密碼,)
2 #auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid


③如果開啟第二行,表示只有root用戶和wheel組內的用戶才可以使用su命令
2 auth sufficient pam_ rootok.so
6 auth required pam_ wheel.so use_ _uid


④如果注釋第一行,開啟第二行,表示只有whee1組內的用戶才能使用su命令,root用戶也被禁用su命令,
2 #auth sufficient pam_ rootok.so
6 auth required pam_ wheel.so use_ _uid


- 可以看到,啟用 pam_wheel 認證以后,未加入到 wheel 組內的其他用戶將無法使用 su 命令,嘗試進行切換時將會按照“拒絕權限”來處理,從而將切換用戶的權限控制在最小范圍內
- 普通用戶切換登錄測驗驗證
使用 su 命令切換用戶的操作將會記錄到安全日志/var/log/secure 檔案中,可以根據需要進行查看
3、用戶提權——sudo
①添加授權
sudo 機制的組態檔為 /etc/sudoers,檔案的默認權限為 440
使用visudo 或 vi /etc/sudoers (此檔案的默認權限為440, 保存退出時必須執行":wq!"命令來強制操作)
語法格式:
用戶 主機名=命令程式串列
用戶(user):授權的用戶名,或采用“%組名”的形式(授權一個組的所有用戶)
主機(MACHINE):使用此組態檔的主機名稱,此部分主要是方便在多個主機間公用同一份 sudoers 檔案,一般設為 localhost 或實際的主機名即可,ALL 代表所有主機
命令(COMMANDS):允許授權的用戶通過 sudo 方式執行的特權命令,需填寫命令程式的完整路徑,多個命令之間以逗號“,”進行分隔
visudo
#按“G”,跳轉至最后一行,'o'在下方插入內容
xcf01 localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD:ALL
#添加以上兩行
#如果是 vim /etc/sudoers 需要“wq!”才能正常保存退出
示例1:
su jj
#切換到用戶 jj
sudo ifconfig ens33:0 192.168.126.50
#設定虛擬網卡
ifconfig
#檢查
exit
#回到 root
示例1:

示例2:
aa 用戶可以使用useradd usermod
需求:aa root用戶下的權限 useradd usermod

驗證:

- 當使用相同授權的用戶較多,或者授權的命令較多時,可以采用集中定義的別名
- 用戶、主機、命令部分都可以定義為別名(必須為大寫),分別通過 User_Alias(用戶別名)、Host_Alias(主機別名)、Cmnd_Alias(命令別名) 來進行設定
示例:
useradd bb
useradd cc
echo '123123' | passwd --stdin bb
echo '123123' | passwd --stdin cc
#新建兩個用戶用作測驗
visudo
...
...
User_Alias USERS=bb,cc
#用戶別名
Host_Alias HOSTS=localhost,bb,cc
#主機別名
Cmnd_Alias CMNDS=/sbin/*!,/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/shutdown
#命令別名
USERS HOSTS=CMNDS
#呼叫別名
#讓用戶 bb 和 cc 執行 /sbin/ 目錄下除了 reboot、poweroff、init、shutdown 以外的其他所有命令程式
- 默認情況下,通過 sudo 防止執行的操作并不記錄,若要啟用 sudo 日志記錄以備管理員查看,應在 /etc/sudoers 檔案中增加“Defaults logfile”設定
visudo
...
...
Defaults logfile="/var/log/sudo" #將該命令添加至最后一行:wq保存并退出即可
②sudo [引數選項] 命令
| -l | 列出用戶在主機上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用這個命令來查看和測驗是不是配置正確的 |
|---|---|
| -v | 驗證用戶的時間戳;如果用戶運行sudo 后,輸入用戶的密碼后,在短時間內可以不用輸入口令來直接進行sudo 操作;用-v 可以跟蹤最新的時間戳 |
| -u | 指定以以某個用戶執行特定操作 |
| -k | 洗掉時間戳,下一個sudo 命令要求用求提供密碼 |
三、PAM安全認證
- PAM(Pluggable Authenticcation Modules),是 Linux 系統可插拔認證模塊(可以認為是一個組態檔或一個小模塊)
- 是一套可定制、 可動態加載的共享庫,使本地系統管理員可以隨意選擇程式的認證方式
1、PAM及作用
①PAM 是一種高效而且靈活便利的用戶級別認證方式,它也是當前 Linux 服務器普遍使用的認證方式
②PAM使用/etc/pam.d/下的組態檔,來管理對程式的認證方式,應用程式呼叫相應的PAM組態檔,從而呼叫本地的認證模塊,模塊放置在/1ib64/security下,以加載動態庫的形式進行認證,比如使用su命令時,系統會提示輸入root用戶的密碼,這就是su命令通過呼叫PAM模塊實作的
2、PAM認證原理
認證程序:用戶去訪問服務——訪問su——PAM認證下面的su的組態檔(/etc/pam.d/)——去呼叫wheel.so模塊
①PAM認證一般遵循的順序: Service (服務) --> PAM (組態檔) --> pam_ *.so;
②PAM認證首先要確定哪一項應用 服務,然后加載相應的PAM的組態檔(位于/etc/pam.d下),最后呼叫認證模塊(位于/lib64/security/下)進行安全認證,
③用戶訪問服務器的時候,服務器的某一個服務程式把用戶的請求發送到PAM模塊進行認證,不同的應用程式所對應的PAM模塊也是不同的,
④如果想查看某個程式是否支持PAM 認證,可以用ls命令進行查看/etc/pam.d/
ls /etc/pam.d | grep su #查看su是否支持PAM模塊認證

3、PAM認證的構成
- 每一行都是一個獨立的認證和程序,它們按從上往下的順序依次由 PAM 模塊呼叫
cat /etc/pam.d/su
ls /lib64/security #查看pam模塊

第一列 —代表PAM認證模塊型別,分別代表四種不同的任務
| 認證模塊型別 | 作用 |
|---|---|
| auth | 對用戶身份進行識別,如提示輸入密碼,判斷是否為 root |
| account | 對賬號各項屬性進行檢查,如是否允許登錄系統,帳號是否已經過期,是否達到最大用戶數等 |
| password | 使用用戶資訊來更新資料,如修改用戶密碼 |
| session | 定義登錄前以及退出后所要進行的會話操作管理,如登錄連接資訊,用戶資料的打開和關閉,掛載檔案系統 |
第二列—PAM使用控制型別來處理和判斷各個模塊的回傳值
| 控制型別 | 作用 |
|---|---|
| required | 需要回傳一個成功值,如果回傳失敗,不會立刻將失敗結果回傳,而是繼續進行同型別的下一驗證,所有此型別的模塊都執行完成后,再回傳失敗,該行以及所涉及模塊的成功是用戶通過鑒別的必要條件 |
| requisite | 與 required 類似,但如果此模塊回傳失敗,則立刻回傳失敗并表示此型別失敗 |
| sufficient | 如果此模塊回傳成功,則不管后面的驗證,直接向程式回傳成功,表示驗證通過,如果回傳失敗,則可以看成 optional(慎用) |
| optional | 不進行成功與否的回傳,一般不用于驗證,只是顯示資訊(通常用于 session 型別);不管成功、失敗,繼續下一模塊的驗證,且此模塊的服務也能享用 |
| include | 表示在驗證程序中呼叫其他的 PAM 組態檔;比如很多應用通過完整呼叫 /etc/pam.d/system-auth(主要負責用戶登錄系統的認證作業)來實作認證而不需要重新逐一去寫配置項 |
第三列—代表PAM模塊,默認是在/lib64/security/目錄下,如果不在此默認路徑下,要填寫絕對路徑
同一個模塊,可以出現在不同的模塊型別中,它在不同的型別中所執行的操作都不相同,這是由于每個模塊針對不同的模塊型別編制了不同的執行函式
第四列—代表PAM模塊的引數,這個需要根據所使用的模塊來添加
4、PAM 控制型別
- 控制型別也可以稱作 Control Flags,用于 PAM 驗證型別的回傳加過
required 驗證失敗時仍然繼續,但回傳 Fail
requisite 驗證失敗則立即結束整個驗證程序,回傳 Fail
sufficient 驗證成功則立即回傳,不再繼續,否則忽略結果并繼續
optional 不用于驗證,只是顯示資訊(通常用于 session 型別)
v
總結
默認情況下,任何用戶都允許使用su命令,有機會反復嘗試其他用戶(如root)的登陸密碼,帶來安全風險,為了加強su命令的使用控制,可借助PAM認證模塊,只允許極個別用戶使用su命令進行切換,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294867.html
標籤:其他
上一篇:淺談一年多的網路安全學習經歷
