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

京東雲發表於2022-10-13

前言

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


作者:馬寅初


相關文章