前言
在linux系統中,root賬戶是有全部管理許可權的,一旦root賬戶密碼外洩,對於伺服器而言將是致命的威脅;出於安全考慮,通常會限制root賬戶的登陸,改為設定普通使用者登陸伺服器後su切換到root賬戶使用,這種方式較為安全,限制root賬戶登陸的方式有多種,本文主要介紹如何通過linux-PAM限制賬戶登陸;
PAM模組簡介
Linux-PAM (Pluggable Authentication Modules for Linux)可插拔認證模組。Linux-PAM是一套適用於Linux的身份驗證共用庫系統,它為系統中的應用程式或服務提供動態身份驗證模組支援。它提供了對所有服務進行認證的中央機制,在Linux中,PAM是可動態設定的,本地系統管理員可以自由選擇應用程式如何對使用者進行身份驗證。
由此可知PAM可以對linux系統的賬戶做驗證,我們通過PAM模組可以對linux系統內的賬戶進行登陸限制;PAM下的功能模組較多,此次主要講述通過pam_listfile.so模組限制賬戶登陸的方法
pam_listfile.so模組可以實現基於"使用者/組,主機名/IP,終端"的存取控制。存取控制依靠PAM組態檔中的控制選項和一個自定義的組態檔來實現的。而且除了針對上述存取源的控制之外,還能夠控制到ruser,rhost,所屬使用者組和登入shell。
存取控制的設定方法
下面說下基於使用者的存取控制的設定方法:
/etc/pam.d/目錄下是PAM組態檔所在路徑,/etc/pam.d/sshd和/etc/pam.d/login 兩個檔案是本次要修改的檔案;/etc/pam.d/sshd對應的是sshd登陸的組態檔,/etc/pam.d/login對應的是管理終端登陸的組態檔;
我們先在/etc/pam.d/sshd檔案中增加一行如下資訊:
auth required pam_listfile.so item=user sense=deny file=/etc/pam.d/denyuser onerr=succeed
此行表示使用者通過管理終端登陸主機的時候,會呼叫pam_listfile.so模組來驗證使用者是否可以登入;pam_listfile.so中設定的item=user表示基於使用者;sense=deny表示拒絕;file=/etc/pam.d/denyuser則是定義了一個denyuser的檔案;此行的含義是denyuser檔案中的使用者拒絕通過ssh系統;
此處對pam_listfile.so模組設定做下說明:
格式分為五個部分:分別是item、sense、file、onerr以及apply。
其中:
item=[tty|user|rhost|ruser|group|shell]__:定義了對哪些列出的目標或者條件採用規則,顯然,這裡可以指定多種不同的條件。
onerr=succeed|fail_:定義了當出現錯誤(比如無法開啟組態檔)時的預設返回值。_
sense=allow|deny_:定義了當在組態檔中找到符合條件的專案時的控制方式。如果沒有找到符合條件的專案,則一般驗證都會通過。_
file=filename_:用於指定組態檔的全路徑名稱。_
apply=user|@group__:定義規則適用的使用者型別(使用者或者組)。
測試效果
我們在雲主機中新增此設定測試下效果;
編輯下/etc/pam.d/sshd檔案新增上述資訊:(資訊需要新增到auth的第一行之前,否則不會生效)
在/etc/pam.d目錄下建立denyuser檔案,並寫入root;
之後測試下使用root賬戶ssh登入雲主機,提示密碼被拒絕;
在伺服器內檢視/var/log/secure檔案,紀錄檔中顯示的登陸錯誤為:
根據紀錄檔可以看出root登陸不上是被pam_listfile限制了;
如果想限制其他使用者,可以在denyuser檔案中將要限制的使用者名稱新增下,新增後對應使用者的登陸也會被限制;
下面在通過在/etc/pam.d/login組態檔新增限制,login檔案控制的是終端登陸,雲主機通過控制檯的遠端連線功能登陸屬於終端登陸;
調整後通過遠端終端vnc連線後,使用root賬戶登陸無法正常;說明設定已經生效。
以上是通過linux-PAM的pam_listfile.so模組限制賬戶登陸的方法,我們可以靈活運用此模組限制主機內的賬戶登陸情況,加強主機的安全性。
作者:馬寅初