记一次root用户在本地登录及SSH连接均遭遇permission denied的问题排查经过
某日一位老师反映,机房的6号节点无法登录了。一开始以为是为节点防火墙配置IP白名单时忘记了加进去,但随后发现此节点并未进行白名单配置,密码也一直未有变更,于是在自己的电脑上连接,发现终端里很快显示出了Last login信息,说明这时应该已经成功与节点进行了连接,但随后就报出Connection closed,连接被关闭了。
都在一栋楼里,不大可能是网络问题,于是去机房里排查问题。将KVM控制平台连接到节点上后,发现屏幕上输出了一些类似设备调试中的报错信息,且已经完全卡死,不接受键盘的中断信号,于是只好长按强制关机,但再次开机后怪事发生了。
输入用户名root和密码后,Shell给出了这样的提示

(failed login是之前记错密码导致的)
显然不是密码问题,因为Last login信息已经显示就表明密码无误,但root用户在本地登录都会被拒绝,这个就有点吓人了,第一时间想到是不是遭遇黑客,赶紧到网上搜索相关问题,但回答大多都是针对SSH登录的情况,未见到本地登录也会被拒绝。有些文章提到可用普通用户登录,但此节点并未设置其他用户,无法尝试。
想要进行修复工作,首先必须想办法进入系统,于是尝试了一下单用户模式(关于单用户模式可参见 https://blog.51cto.com/hqq0000/2177280),发现可以进入!这下先松了一口气,至少实在没辙了可以把数据导出然后重装系统,要不然就得把整个集群断电拆硬盘了。
在单用户模式下,先修改了下密码,发现没用;然后又怀疑是不是bash出了问题,因为permission denied常见于执行某些没有执行权限的文件时,如果/bin/bash被恶意更改了权限,貌似是可能报这样错误的,但用ls -l看了下,也不是bash的事。
想到登录失败,日志中会有记录,于是查看/var/log/secure,发现末尾有如下一段记录

似乎登录失败的原因就出在这个pam上。PAM是Linux的一个动态验证模块,可能是它阻止了我们的登录行为。注意到最后几行,有提到nofile,这不是Linux最大打开文件数那个限制参数吗?于是进行调整(参见https://www.iteye.com/blog/jameswxx-2096461 总结的很不错),但仍未能解决问题。
继续分析日志,发现这样一行

确实,6号节点的所有用户,uid都小于1000,于是根据网上的解决方案(https://help.aliyun.com/knowledge_detail/41491.html?spm=a2c6h.13066369.0.0.2edd1479unyVgh),对/etc/pam.d下的文件进行修改,把system-auth中的相关语句注释掉了

但重启后发现还是没用!原来system-auth 会在重启后自动恢复配置,手工更改是无效的。
那么换个思路,既然禁止uid<1000的用户登录,我使用>1000的不就可以了?继续在单用户模式下,adduser创建了一个普通用户,passwd设置密码,并加入到root组里使其可以用sudo,重启,登录......
......还是不行......
难道就没有办法绕过pam了吗?突然想到ssh_config里好像有一个参数与PAM有关,叫use_PAM,马上打开一看,果然,被设置为了yes,赶紧改回no,然后回楼上ssh连接。
普通用户,root均成功!这回可算是解决了。
总结
经过一番排查,最终定位是PAM惹的祸,如果自己对PAM熟悉,应该会更快地定位问题。目前只是恢复了root用户的远程登录,对于root为什么在本地也会被拒绝,还未能找到答案。
但另一方面来讲,Linux设置PAM也必然有自己的考量,运行root远程登录,本身就存在一定安全风险,管理员还是应该只允许普通用户远程登录,而后使用su切换或sudo执行命令。
记一次root用户在本地登录及SSH连接均遭遇permission denied的问题排查经过的更多相关文章
- 【Hadoop系列】linux下 root用户免密码登录远程主机 ssh
SSH原理:[Hadoop系列]linux SSH原理解析 操作环境: CentOS 6.5 操作对象: 用户A主机和远程主机B 正文部分:斜体加粗代表linux指令. linux下 非root用户免 ...
- 记一次由selinux引起的使用cat查看文件报错Permission denied的问题排查
事件起因:如下 1.在服务器上root用户,定期会生成一个文件,到/tmp目录,如:qq_5201351.txt,给other加上了r读取 2.zabbix端会周期性取这台服务器/tmp/qq_520 ...
- MySQL普通用户无法本地登录的解决方法及MySQL的用户认证算法
在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用普通用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况. 例如,我的MySQL中的用户为: mysql> ...
- Linux设置以root用户开机自动登录桌面
目录 Ubuntu 18.04系统下设置 Redhat7.6系统下设置 Ubuntu 18.04系统下设置 1. 允许使用root用户登录桌面 Ubuntu默认不允许使用root用户登录桌面的, ...
- ESXI启用本地登录和SSH服务连接功能,使用Xshell连接
1.选中Troubleshoot Options进行SSH服务配置 2.开启本地登录功能 3.开启远程连接功能 4.本地登录修改SSH服务允许基于密码登录 默认无法用密码登录ssh服务,只支持基于ke ...
- 已知root用户密码并登录,修改mysql用户名密码方法
首先进入命令行下:以root用户登录,命令:mysql -uroot -p 回车 输入密码:mysql>use mysql:mysql>UPDATE user SET password=P ...
- MySQL 5.7免安装版设置编码格式、设置root用户密码 远程登录.
一.设置默认编码格式为utf-8 ... 由于免安装版并没有my.ini的配置文件.需要自行粘贴配置并创建一个my.ini 配置如下: [mysql] # 设置mysql客户端默认字符集 defaul ...
- 服务器ssh登录提示“Permission denied, please try
原因:不用怀疑,一般情况下,就是你密码输入错误了. 解决:找到正确的密码输入. 当然,也有可能是下面的情况: 在Windows中使用ssh客户端连接,提示"ssh服务器拒绝了密码,请再试一次 ...
- MySQL密码正确却无法本地登录,ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
MySQL密码正确却无法本地登录 报错如下: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password ...
随机推荐
- 解读Vue.use()源码
Vue.use() vue.use()的作用: 官方文档的解释: 安装 Vue.js 插件.如果插件是一个对象,必须提供 install 方法.如果插件是一个函数,它会被作为 install 方法.i ...
- IntelliJ IDEA入门之常用配置以及问题解决(持续更新中)
软件版本: IntelliJ IDEA 2019.1.1(Ultimate Edition) 运行环境: JDK1.8, Tomcat8.0, Maven3.6 我们在学习新的无论是jar包, 框架, ...
- Spring IoC的形象化理解
1.IoC(控制反转) 首先想说说IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象 ...
- 解析Health端点数据获取异常数据
问题: 由于健康节点响应类型是Health类,并且由于需要执行的健康状态类不固定,返回的类型数据的字段不是固定的,所以使用了@JsonAngGetter 注解,照成了解析这个JSON 结构非常不方便. ...
- 【图像算法OpenCV】几何不变矩--Hu矩
原文地址 http://blog.csdn.NET/daijucug/article/details/7535370 [图像算法OpenCV]几何不变矩--Hu矩 一 原理 几何矩是由Hu(Visu ...
- mysq的慢查询日志
MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能. 查看是否开启慢查询功能: mysql> show variables like 'slow_que ...
- [Comet OJ - Contest #7 D][52D 2417]机器学习题_斜率优化dp
机器学习题 题目大意: 数据范围: 题解: 学长说是决策单调性? 直接斜率优化就好了嘛 首先发现的是,$A$和$B$的值必定是某两个$x$值. 那么我们就把,$y$的正负分成两个序列,$val1_i$ ...
- 【Python】【基础知识】【内置函数】【print的使用方法】
原英文帮助文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text ...
- one:arguments对象伪数组
这是我的第一个博客 <script> //计算N个数字的和 //定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传入了几个参数,没办法计算, // 但是如果在函数中知道了参数的 ...
- Separate String
Separate String 时间限制: 1 Sec 内存限制: 128 MB提交: 50 解决: 16 题目描述 You are given a string t and a set S of ...