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

作者:马寅初

点赞
收藏

评论区

加载中...

相关推荐

Linux修改MySQL数据库密码

我使用的是centos7.91.修改数据库配置文件,使之登录不需要密码此操作需要具备服务器root账户权限1.1切换Linux系统的root用户注:如果当前使用的是root账户,即不需要再切换su1.2定位配置文件位置

Linux修改MySQL数据库密码

我使用远程3A服务器进行操作1.修改数据库配置文件,使之登录不需要密码此操作需要具备服务器root账户权限1.1切换Linux系统的root用户注:如果当前使用的是root账户,即不需要再切换su1.2定位配置文件位置

MariaDB常用命令

1\.设置root账户其一:mysql_secure_installation回车即可,因为还没有root密码。下来根据提示输入y表示新建root。然后是连续输入两次root密码。接下来就是一路输入y后回车就可以了。其二:mysqlmysqladminurootpassword所要设

ubuntu 18.04使用root用户登录ssh

ubuntu系统默认root用户是不能登录的,密码也是空的。如果要使用root用户登录,必须先为root用户设置密码打开终端,输入:sudopasswdroot然后按回车此时会提示你输入密码,在password:后输入你现在登录的用户的密码在ubuntu系统中,默认是不开启ssh使用root用户登陆的,在/etc/ssh/sshd\_c

MySQL远端连接设置

下面是步骤:0、新安装完后是没有密码的,为root添加密码:mysqladminurootpasswordroot'spassword1、登陆本地的mysqlServer:mysql uroot p输入密码后进入mysql。参数u是输入用户名,这里是用root登陆,p是要输入密码。2、使用并查看mysql

mysql5.7 修改root密码无法登陆原因

升级的mysql5.7修改完root账户密码后仍然无法登陆,查阅资料可能和user表的plugin字段为空有关。1、首先将my.ini中加入在\mysqld\节点上加skipgranttables主要作用是:跳过表中的验证,可以无密码登陆。2、登录之后查询plugin字段值:mysqlselectpluginf