写点什么

通过 linux-PAM 实现禁止 root 用户登陆的方法

  • 2022-10-13
    北京
  • 本文字数:1457 字

    阅读完需:约 5 分钟

通过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 模块限制账户登陆的方法,我们可以灵活运用此模块限制主机内的账户登陆情况,加强主机的安全性。


作者:马寅初

发布于: 刚刚阅读数: 7
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
通过linux-PAM实现禁止root用户登陆的方法_数据库_京东科技开发者_InfoQ写作社区