通過linux-PAM實現禁止root使用者登陸的方法

2022-10-13 12:00:37

前言

在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模組限制賬戶登陸的方法,我們可以靈活運用此模組限制主機內的賬戶登陸情況,加強主機的安全性。

作者:馬寅初