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

前言

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

作者:馬寅初