5

通过linux-PAM实现禁止root用户登陆的方法 - 京东云开发者

 1 year ago
source link: https://www.cnblogs.com/Jcloud/p/16787159.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

通过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的第一行之前,否则不会生效)

0c410624-4204-459b-839b-933d63c91cf120210305190245.png

在/etc/pam.d目录下创建denyuser文件,并写入root;

dbc34c6c-1d30-4414-9c24-e05c137cf22f20210305190334.png

之后测试下使用root账户ssh登录云主机,提示密码被拒绝;

d184df74-6ccc-491f-9cad-6ad6ab536e7920210305190349.png

在服务器内查看/var/log/secure文件,日志中显示的登陆错误为:

d8aaaad7-45d9-43fa-81ea-8cb6de97dd4920210305190403.png

根据日志可以看出root登陆不上是被pam_listfile限制了;

如果想限制其他用户,可以在denyuser文件中将要限制的用户名添加下,添加后对应用户的登陆也会被限制;

下面在通过在/etc/pam.d/login配置文件添加限制,login文件控制的是终端登陆,云主机通过控制台的远程连接功能登陆属于终端登陆;

ec1defff-142d-4d91-8797-d3cbe7e0b94420210305190422.png

调整后通过远程终端vnc连接后,使用root账户登陆无法正常;说明配置已经生效。

a500410a-8a59-4d7e-a6c1-05fbd3e6aed820210305190531.png
298d31d1-6b1c-42cd-aa8e-1b68f471351c20210305190540.png

以上是通过linux-PAM的pam_listfile.so模块限制账户登陆的方法,我们可以灵活运用此模块限制主机内的账户登陆情况,加强主机的安全性。

作者:马寅初


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK