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

京东云开发者
• 阅读 470

前言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作者:马寅初

点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
2年前
Linux修改MySQL数据库密码
我使用的是centos7.91.修改数据库配置文件,使之登录不需要密码此操作需要具备服务器root账户权限1.1切换Linux系统的root用户注:如果当前使用的是root账户,即不需要再切换su1.2定位配置文件位置
芝士年糕 芝士年糕
2年前
Linux修改MySQL数据库密码
我使用远程3A服务器进行操作1.修改数据库配置文件,使之登录不需要密码此操作需要具备服务器root账户权限1.1切换Linux系统的root用户注:如果当前使用的是root账户,即不需要再切换su1.2定位配置文件位置
Stella981 Stella981
3年前
MariaDB常用命令
1\.设置root账户其一:mysql_secure_installation回车即可,因为还没有root密码。下来根据提示输入y表示新建root。然后是连续输入两次root密码。接下来就是一路输入y后回车就可以了。其二:mysqlmysqladminurootpassword所要设
Wesley13 Wesley13
3年前
ubuntu 18.04使用root用户登录ssh
ubuntu系统默认root用户是不能登录的,密码也是空的。如果要使用root用户登录,必须先为root用户设置密码打开终端,输入:sudopasswdroot然后按回车此时会提示你输入密码,在password:后输入你现在登录的用户的密码在ubuntu系统中,默认是不开启ssh使用root用户登陆的,在/etc/ssh/sshd\_c
Wesley13 Wesley13
3年前
MySQL远端连接设置
下面是步骤:0、新安装完后是没有密码的,为root添加密码:mysqladminurootpasswordroot'spassword1、登陆本地的mysqlServer:mysql uroot p输入密码后进入mysql。参数u是输入用户名,这里是用root登陆,p是要输入密码。2、使用并查看mysql
Wesley13 Wesley13
3年前
mysql5.7 修改root密码无法登陆原因
升级的mysql5.7修改完root账户密码后仍然无法登陆,查阅资料可能和user表的plugin字段为空有关。1、首先将my.ini中加入在\mysqld\节点上加skipgranttables主要作用是:跳过表中的验证,可以无密码登陆。2、登录之后查询plugin字段值:mysqlselectpluginf
Stella981 Stella981
3年前
Linux 通过ssh连接服务器、服务器之间传文件命令
ssh连接服务器命令:使用指定的账户和端口连接服务器(输入命令后再输入密码)sshadmin@10.4.135.102p6800使用默认root和22端口连接服务器sshroot@10.4.135.102传输文件命令:上传文件命令通过指定端口传输文件scpP680
Wesley13 Wesley13
3年前
mysql 开启远程授权
1,确定/etc/sysconfig/iptables文件里面开放了3306端口2,允许root用户可以在任何地方登录//登录 Mysql mysql u root p   // 设置 root 账户用 admin123 的密码可以在任何地方登录 GRANT ALL PRIVILEGE
Stella981 Stella981
3年前
SecureCRT连接Linux关键的
很多时候我们需要连接很多台Linux操作系统,现在我演示怎么用SecureCRT去连接我们现在先设置root帐号的密码 sudo passwd root然后设置自己的密码切换到 root帐号su输入密码现在我们需要ssh免登陆操作aptget
胖大海 胖大海
2年前
Debian 启用root账户远程登录并删除多余用户
1开启远程登录执行下方命令后开启root用户的远程登录sudoecho"Port22"/etc/ssh/sshdconfig sudoecho"PermitRootLoginyes"/etc/ssh/sshdconfig sudoservicesshdrestart2删除多余登陆用户删除用户deluser 用户名删除用户及