文章目錄
- 一、賬號安全控制
- 1.基本安全措施
- 1.1 系統賬號清理
- 1.2 密碼安全控制
- 1.3 命令歷史限制
- 1.4 終端自動注銷
- 2.用戶切換與提權
- 2.1 su 命令——切換用戶
- 2.2 sudo 命令——提升執行權限
- 2.2.1 添加授權
- 2.2.2 通過 sudo 執行特權命令
- 3.補充:PAM 安全認證
- 3.1 PAM 及其作用
- 3.2 PAM 認證原理
- 3.3 PAM 認證的構成
- 3.4 PAM 認證型別
- 3.5 PAM 控制型別
一、賬號安全控制
- 用戶賬號,是計算機使用者的身份憑證或標識,每一個要訪問系統資源的人,必須憑借其用戶賬號才能進入計算機
- 在 Linux 系統中,提供了多種機制來確保用戶賬號的正當、安全使用
1.基本安全措施
1.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、宿主目錄等屬性資訊
1.2 密碼安全控制
- 在不安全的網路環境中,為了降低密碼被才出或被暴力破解的風險,用戶應養成定期更改密碼的習慣,避免長期使用同一個密碼
- 管理員可以在服務器端限制用戶密碼的最大有效天數,對于密碼已過期的用戶,登錄時被要求重新設定密碼,否則將拒絕登錄
- 執行以下操作可將密碼的有效期設為 30 天(chage 命令用于設定密碼時限)
vim /etc/login.defs
...
PASS_MAX_DAYS 30
#該設定方法適用于新建的用戶
chage -M 日期 用戶
#設定用戶密碼有效期
chage -E xxxx-xx-xx
#設定過期日期
例:
chage -M 30 xcf
#該設定方法適用于已存在的用戶


- 在某些特殊情況下,如要求批量創建的用戶初次登錄時必須自設密碼,根據安全規劃統一要求所有用戶更新密碼等,可以由管理員執行強制策略,以便用戶在下次登錄時必須更改密碼
- 執行以下操作可強制要求用戶再下次登錄時重設密碼
chage -d 0 用戶名
#強制在下次登錄時修改密碼
cat /etc/shadow | grep 用戶名
#第三個欄位會被修改為 0
1.3 命令歷史限制
- Shell 環境的命令歷史機制為用戶提供了極大的便利,但另一方面也給用戶帶來了潛在的風險
- 只要獲得用戶的命令歷史檔案,該用戶的命令操作程序將會一覽無余,如果層間在命令列輸入銘文的密碼,則無意之中服務器的安全壁壘又多了一個缺口
- 在 Bash 終端環境中,歷史命令的記錄條數由變數 HISTSIZE 控制,默認為 1000 條
- 通過修改 /etc/profile 檔案中的 HISTSIZR 變數值,可以影響系統中的所有用戶
#編輯全域變陣列態檔,適用于新登錄用戶
vim /etc/profile
...
export HISTSIZE=200
#設定最多只記錄 200 條歷史命令
. /etc/profile
#使 /etc/profile 內的命令多載一遍
history
#只能查看 200 條歷史記錄了
export HISTSIZE=200
#適用于當前用戶
#查看歷史篇幅太長,這里不再貼圖展示
- 也可以修改用戶宿主目錄中的 ~/.bashrc 檔案,添加清空歷史命令的操作陳述句
vim ~/.bashrc
...
echo " " > ~/.bash_history
init 6
#重啟虛擬機以待測驗
...
...
history


1.4 終端自動注銷
- 在 Bash 終端環境中,還可以設定一個閑置超時時間,當超過指定的時間沒有任何輸入時即自動注銷終端,這樣可以避免當管理員不在時其他人對服務器的誤操風險
- 閑置超時由變數 TMOUT 來控制,默認單位為秒
#編輯全域變陣列態檔
vim /etc/profile
...
export TMOUT=600 #輸出閑置超時變數
#600s為10min
. /etc/profile
#執行該檔案內命令后生效
2.用戶切換與提權
- 大多數 Linux 服務器并不建議用戶直接以 root 用戶進行登錄
- 一方面可以大大減少因為誤操作而導致的破壞,另一方面也降低了特權密碼在不安全的網路總被泄露的風險
- 鑒于這些原因,需要為普通用戶提供一種身份切換或權限提升機制,以便在必要時執行管理任務
2.1 su 命令——切換用戶
- 使用 su 命令,可以切換為指定的另一個用戶,從而具有該用戶的所有權限
- 當然,切換時需要對目標用戶的密碼進行驗證(從 root 切換為其他用戶時除外)
su -root
#若當前登錄的為其他用戶,需要切換為 root 用戶
#需輸入 root 用戶的密碼,驗證成功后即可成功獲得 root 權限
- 上述命令操作中,選項“-”等同于“–login”或“-l”,表示切換用戶后進入目標用戶的登錄 Shell 環境,若缺少此選項則僅切換身份、不切換用戶環境
- 對于切換為 root 用戶的情況,“root”可以省略

- 默認情況下,任何用戶都允許使用 su 命令,從而有機會反復嘗試其他用戶(如 root)的登錄密碼,帶來安全風險
- 為了加強 su 命令的使用控制,可以借助于 pam_wheel 認證模塊,只允許極個別用戶使用 su 命令進行切換
- 實作程序如下:
gpasswd -a xcf wheel
#將授權使用 su 命令的用戶添加到 wheel 組
grep wheel /etc/group
#確認 wheel 組成員
#修改認證配置
vim /etc/pam.d/su
...
auth required pam_wheel.so use_uid
#取消注釋
...



- 可以看到,啟用 pam_wheel 認證以后,未加入到 wheel 組內的其他用戶將無法使用 su 命令,嘗試進行切換時將會按照“拒絕權限”來處理,從而將切換用戶的權限控制在最小范圍內
關于 /etc/pam.d/su 組態檔的補充:
1.上圖中標記的兩行默認狀態時開啟第一行,注釋第二行,此時允許所有用戶使用 su 名
2.兩行都注釋即允許所有用戶都能使用 su 命令,但 root 下使用 su 切換到其他普通用戶需要輸入密碼
3.如果第一行不注釋,則 root 使用 su 切換普通用戶就不需要輸入密碼
4.pam_rootok.so 模塊的主要作用是使 uid 為 0 的用戶,即 root 用戶能夠直接通過認證而不用輸入密碼
5.如果開啟第二行,表示只有root用戶和wheel組內的用戶才可以使用su命令
6.如果注釋第一行,開啟第二行,表示只有wheel組內的用戶才能使用su命令
- 使用 su 命令切換用戶的操作將會記錄到安全日志 /var/log/secure 檔案中,可以根據需求查案
cat /var/log/secure
2.2 sudo 命令——提升執行權限
- 通過 su 命令可以非常方便地切換為另一個用戶,但前提條件是必須知道目標用戶的登錄密碼
- 對于生產環境中的 Linux 服務器,每多一個人知道特權密碼,那么其安全風險也就增加一份
- 那么,有沒有一種這種的辦法,既可以讓普通用戶擁有一部分管理權限,又不需要將 root 用戶的密碼告訴他呢,這就是 sudo 命令,可以提升執行權限
- 不過需要管理員預先進行授權,指定允許哪些用戶以超級用戶(或者其他普通用戶)的身份來執行哪些命令
2.2.1 添加授權
- sudo 機制的組態檔為 /etc/sudoers,檔案的默認權限為 440,需使用專門的 visudo 工具進行編輯,雖然也可以用 vim 進行編輯,但保存時必須執行“:wq!”來強行操作,否則系統將提示為只讀檔案而拒絕保存
visudo
或
vim /etc/sudoers
- 授權配置主要包括用戶、主機、命令三個部分,即授權那些人在哪些主機上執行哪些命令
- 各部分具體含義如下
用戶(user):授權的用戶名,或采用“%組名”的形式(授權一個組的所有用戶)
主機(MACHINE):使用此組態檔的主機名稱,此部分主要是方便在多個主機間公用同一份 sudoers 檔案,一般設為 localhost 或實際的主機名即可,ALL 代表所有主機
命令(COMMANDS):允許授權的用戶通過 sudo 方式執行的特權命令,需填寫命令程式的完整路徑,多個命令之間以逗號“,”進行分隔
- 典型的 sudo 配置記錄中,每一行對應一個用戶或組的 sudo 授權配置
- 例如,授權用戶能夠執行 ifconfig 命令來修改 ip 地址,而 wheel 組的用戶不需驗證密碼即可執行任何命令
- 另外有個好習慣,記得先查詢一下完整路徑
which ifconfig

visudo
#按“G”,跳轉至最后一行
xcf01 localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD:ALL
#添加以上兩行
#如果是 vim /etc/sudoers 需要“wq!”才能正常保存退出
#配置行過長,不再貼圖演示
su xcf
#切換到用戶 xcf
sudo ifconfig ens33:0 192.168.126.22
#設定虛擬網卡
ifconfig
#檢查
exit
#回到 root

- 當使用相同授權的用戶較多,或者授權的命令較多時,可以采用集中定義的別名
- 用戶、主機、命令部分都可以定義為別名(必須為大寫),分別通過 User_Alias(用戶別名)、Host_Alias(主機別名)、Cmnd_Alias(命令別名) 來進行設定
useradd xcf02
useradd xcf03
echo '123123' | passwd --stdin xcf02
echo '123123' | passwd --stdin xcf03
#新建兩個用戶用作測驗
visudo
...
...
User_Alias USERS=xcf02,xcf03
#用戶別名
Host_Alias HOSTS=localhost,xcf01,xcf02
#主機別名
Cmnd_Alias CMNDS=/sbin/*!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/shutdown
#命令別名
USERS HOSTS=CMNDS
#呼叫別名
#讓用戶 xcf02 和 xcf03 執行 /sbin/ 目錄下除了 reboot、poweroff、init、shutdown 以外的其他所有命令程式
#sudo 配置記錄的命令部分允許使用通配符“*”、取反符號“!”
#當需要授權某個目錄下的所有命令或取消其中個別命令時也別有用

- 默認情況下,通過 sudo 防止執行的操作并不記錄
- 若要啟用 sudo 日志記錄以備管理員查看,應在 /etc/sudoers 檔案中增加“Defaults logfile”設定
visudo
...
...
Defaults logfile="/var/log/sudo" #將該命令添加至最后一行:wq保存并退出即可
2.2.2 通過 sudo 執行特權命令
- 對于已獲得授權的用戶,通過 sudo 方式執行特權命令時,只要將正常的命令列作為 sudo 命令的引數即可
- 由于特權命令程式通常位于 /sbin、/user/sbin 等目錄下,普通用戶執行時應使用絕對路徑
- 前文有過使用,這里不再貼圖演示
- 在當前會話程序中,第一次通過 sudo 執行命令時,必須以用戶自己的密碼(不是 root 用戶或其他用戶的密碼)進行驗證
- 伺候再次通過 sudo 執行命令時,只要與前一次 sudo 操作的間隔時間不超過五分鐘,則不再重復驗證
- 若要查看用戶自己獲得哪些 sudo 授權,可以執行以下命令,已授權的用戶可以看到自己的 sudo 配置
su 用戶名
sudo -l
- 如果已啟用 sudo 日志,則可以從 /var/log/sudo 檔案中看到用戶的 sudo 操作記錄
tail /var/log/sudo
3.補充:PAM 安全認證
- PAM(Pluggable Authenticcation Modules),是 Linux 系統可插拔認證模塊
- Linux 系統使用 su 命令存在安全隱患,默認情況下,任何用戶都允許使用 su 命令,從而有機會反復嘗試其他用戶(如 root)的登錄密碼,帶來安全風險
- 為了加強 su 命令的使用控制,可以借助于 PAM 認證模塊,只允許極個別用戶使用 su 進行切換
3.1 PAM 及其作用
- PAM 是一種高效而且靈活便利的用戶級別認證方式,它也是當前 Linux 服務器普遍使用的認證方式
- PAM 提供了對所有服務進行認證的中央機制,適用于 login,遠程登錄(telnet,rlogin,fsh,ftp),su 等應用程式
- 系統管理員通過 PAM 組態檔來指定不同應用程式的不同認證策略
3.2 PAM 認證原理
- PAM 認證一般遵循的順序:Service(服務)→ PAM(組態檔)→ pam_*.so
- PAM 首先要確定哪一項服務,然后加載相應的 PAM 組態檔(位于 /etc/pam.d 下),最后呼叫認證檔案(位于 /lib/security 下)進行安全認證
- 用戶訪問服務器的時候,服務器的某一個服務程式把用戶的請求發送到 PAM 模塊進行認證,不同的應用程式所對應的 PAM 模塊也是不同的
- 如果想查看某個程式是否支持 PAM 認證,可以用 ls 命令進行查看
ls /etc/pam.d | grep su
#查看su是否支持PAM模塊認證

3.3 PAM 認證的構成
- 每一行都是一個獨立的認證和程序,它們按從上往下的順序依次由 PAM 模塊呼叫
- 每行都有三個磁區:認證型別、控制型別、PAM 模塊、PAM 模塊引數
cat /etc/pam.d/su

第一列: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模塊的引數,這個需要根據所使用的模塊來添加
3.4 PAM 認證型別
- 認證管理:
接收用戶名和密碼,進而對用戶的密碼進行認證 - 賬戶管理:
檢查賬戶是否被允許登錄,賬號是否已經過期,賬號的登錄是否有時間段的限制等 - 密碼管理:
主要是用來修改用戶的密碼 - 會話管理:
主要是提供對會話的管理和記賬
3.5 PAM 控制型別
控制型別也可以稱作 Control Flags,用于 PAM 驗證型別的回傳加過
- required 驗證失敗時仍然繼續,但回傳 Fail
- requisite 驗證失敗則立即結束整個驗證程序,回傳 Fail
- sufficient 驗證成功則立即回傳,不再繼續,否則忽略結果并繼續
- optional 不用于驗證,只是顯示資訊(通常用于 session 型別)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256307.html
標籤:其他
上一篇:nginx筆記
