记一次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 ...
随机推荐
- HashMap、Hashtable 以及HashSet
关于多线程的问题大多会涉及到Collection框架,涉及到Collection框架就不得不谈HashSet和HashMap.HashMap和HashSet都是collection框架的一部分,它们让 ...
- docker部署jar、war包方法
一.将war包放入容器 1.# docker imagesREPOSITORY TAG IMAGE ID ...
- 【神经网络与深度学习】转-caffe安装吐血总结
这周安装了caffe的windows版本和Linux版本,依赖关系太多,如果系统选对了,安装起来很easy,选错了,就会遇见各种坑. 1.操作系统最好使用ubuntu desktop 14.04 64 ...
- 关于JavaScript的词法作用域及变量提升的个人理解
关于JavaScript的作用域,最近听到一个名词:“词法作用域”:以前没有听说过(读书少),记录一下对此的理解,加深印象. 词法作用域:在JavaScript中,一个函数的作用域,在这个函数定义好的 ...
- history 命令
history 命令用来显示执行过的命令,也可以根据显示的命令重新执行需要的命令. 用法: n 显示n个最近的记录 -a 添加记录到history文件中 -c 将目前shell中的所有history命 ...
- Spring4学习回顾之路06- IOC容器中Bean的生命周期方法
SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...
- PAT A1019 General Palindromic Number (20 分)
AC代码 #include <cstdio> const int max_n = 1000; long long ans[max_n]; int num = 0; void change( ...
- PAT B1012.数字分类
全部AC #include <cstdio> int valid[5] = {0}; int count[5] = {0}; int p1(int i) { printf("%d ...
- python虚拟环境的的使用
基于创建虚拟环境 virtualenv 安装 pip3 install virtualenv 通过virtulaenv创建虚拟环境 virtualenv luffycity --python=C:\P ...
- Linux操作系统文档
一 Linux操作系统概述 l为什么要学习Linux操作系统: 1. 大部分服务端都是使用Linux操作系统(Django,爬虫,科学运算等项目是部署到服务器中的) 2. 一些企业和学校(国外学校 ...