一.SELINUX=enforcing后,用户无法登录服务器的问题
(原谅我为啥讲这么长一段废话,因为感觉这情况很普遍,怕好兄弟们遇到挖矿程序不知道该怎么办,也提醒一下记得注意服务器端口别全开、密码也别用弱口令,要想看标题解决办法直接跳下面:解决办法及步骤)首先讲我遇到的:我开启selinux(Security-Enhanced Linux)是为了解决服务器被kdevtmpfsi挖矿病毒入侵;起因,昨天在远程登录服务器时总是断开,而且项目访问过慢,于是top看了一下后台进程的资源占用,发现多了个kdevtmpfsi进程,而且占用近50%CPU,一搜索这是挖矿病毒,应该是通过我的redis注入进来的,我docker的redis密码没设,而且Nginx服务是默认用户,一般情况下,Nginx服务启动的用户是Nobody,而且我把腾讯云端口全开了。(这应该是主要原因,之前用阿里云没有全开端口,我说我怎么之前没遇到过这病毒)
还有说来真巧我朋友昨晚才跟我们聊“服务器部署的时候千万不要把端口全开,可能会被注入挖矿病毒,尤其是redis使用默认设置时”,当时我还说没事,我还没遇到过,结果晚上登录服务器部署项目就发现了,CPU占用100%的开始时间正好是前一天的早上6点过,好像那天在弄nginx的config,不知道是否是通过nginx注入进来的,一搜网上的人都遇到过这种类似的病毒,而且很多。
2021-4-15更新:经过详细了解,这个程序是通过我docker里面未设置密码的redis容器进来的,在生成的redis容器的根目录下,就是下图中的/var/lib/docker/overlay2/目录下,如果只是将病毒进程杀死,把根目录下的kdevtmpfsi文件删除,过一会还是会自启一个kdevtmpfsi进程,可能是这段程序有自动检测kdevtmpfsi是否被杀死,如果被杀死,就自动寻找kdevtmpfsi文件所在位置,如果找不到kdevtmpfsi文件,就重新生成一个,然后自动启动挖矿进程,经过搜索,网上的解决办法是删除kdevtmpfsi文件后在同目录下生成一个与kdevtmpfsi同名的空文件,这样病毒就启动不了挖矿进程,因为我的redis是在容器中的,所以这个病毒也没有更多的权限操作我的服务器,所以问题不大;我的redis基本上没咋用,所以可以采取更激进的做法:直接把这个容器删除,也就是图中的"b0143f699a45dccfcfac7.."文件夹,然后用docker stop 容器停止容器,docker rm 容器名删除redis容器,一劳永逸,然后再用命令生成一个redis容器:
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --requirepass "这写你的redis密码"
解析:“6379:6379”是端口映射,将容器内的6379端口映射到容器外;-v /mydata/redis/data:/data 代表将 /data目录挂载到/mydata/redis/data,后面的“-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf”同理;-d 后面的命令相当于启动项,在启动的时候执行的,--requirepass "这写你的redis密码" 就是启用密码。
被注入挖矿病毒的解决办法参考:(千万先别试着修改selinux设置,不然你会回来感谢我写这篇帖子的 :),等我把服务器病毒清除了,再写一篇解决办法)(2021-4-15:算了我太懒了,你们将就这3篇看吧,反正都差不多的) blog.csdn.net/daiyuhe/art… blog.csdn.net/yueaini1000… cloud.tencent.com/developer/a…
为啥SELINUX=enforcing就无法登录?
大概原因可能是:文件的selinux的扩展属性不对,由于你曾经关掉过selinux,在关掉selinux时创建和修改的文件不会有selinux的扩展属性,在你又打开selinux时,selinux会为这些文件赋予缺省的selinux属性,这样的文件,有些应用程序是不能访问的,selinux的安全保证。
参考:blog.csdn.net/daiyuhe/art… (但是touch ./autorelabel 命令对于我的服务器没用,因为我原本是修改了/etc/selinux/目录下的config文件才导致无法登录的)
解决办法及步骤
1.首先一定要备份服务器,如果是腾讯云,在云硬盘里面点创建快照就是做一次备份:
2.通过VNC方式登录服务器:
3.点发送远程命令,ctrl+alt+deleter让服务器重启:
4.进入系统选择界面,直接按e进入内核编辑界面:
5.如果是centos7(其他版本参考腾讯云帮助文档:cloud.tencent.com/document/pr… ):使用 ↑↓ 键定位至 linux16 开头行,将 ro 替换为 rw init=/bin/bash 或 /usr/bin/bash :
6.然后按 Ctrl+X,启动并进入单用户模式:
7.(如果你原本是修改的/etc/selinux/config这个文件导致无法登录的),就输入vim /etc/selinux/config更改config文件的SELINUX选项,然后按i进入修改模式,将SELINUX=enforcing恢复为SELINUX=disabled,然后按esc退出修改模式,再按:wq保存并退出,此时可以执行 exec /sbin/init 命令,退出单用户模式。然后将服务器重启一次,然后再试试正常登陆一下服务器,发现可以登陆了,perfect,完美解决。
参考腾讯云帮助文档:cloud.tencent.com/document/pr…
二.如果是服务器被频繁暴力破解导致 /var/log/btmp 日志容量过大
1.使用单用户模式,请参考上述步骤进入单用户模式。
2.然后用cd /var/log进入/var/log目录,用ls -s btmp查看日志文件btmp的容量。
3.若日志文件 /var/log/btmp 容量过大,则执行以下命令,对 btmp 日志内容进行清空。清空日志文件后,即可恢复登录:
cat /dev/null > /var/log/btmp
这里我的日志明显也很大,也会将其清空:
4.核实帐户锁定是由人为误操作还是暴力破解引起。若是由暴力破解引起,建议选择以下方案加固安全策略:
①. 修改云服务器密码,密码设置为由大写、小写、特殊字符、数字组成的12 - 16位的复杂随机密码。详情请参见 重置实例密码。
②. 删除云服务器中已不再使用的用户。
③. 将 sshd 的默认22端口改为1024 - 65525间的其他非常用端口。详情请参见 修改云服务器远程默认端口。
④. 管理云服务器已关联安全组中的规则,只需放通业务和协议所需端口,不建议放通所有协议及端口。详情请参见 添加安全组规则。
⑥. 不建议向公网开放核心应用服务端口访问。例如,mysql 及 redis 等。您可将相关端口修改为本地访问或禁止外网访问。
⑦. 安装云镜、云锁等防护软件,并添加实时告警,以便及时获取异常登录信息。
具体细节请参考腾讯云帮助文档:cloud.tencent.com/document/pr…
三.如果没有任何操作,突然就不能登陆了
可能的原因:使用 VNC 或 SSH 登录会调用 /etc/pam.d/login 这个 pam 模块进行校验,在 /etc/pam.d/login 配置中默认会引入 system-auth 模块进行认证,system-auth 模块默认会引入 pam_limits.so 模块进行认证。 具体细节及解决办法:
参考腾讯云帮助文档: cloud.tencent.com/document/pr… ①. 在单用户模式下,最后一步执行
sysctl -p的时候,会提示命令找不到,如果正常登录是可以使用这个命令的。②. 在文档步骤2中执行
sysctl -a 2>/dev/null | grep -Ei "file-max|nr_open"命令可能不会有输出,因为/etc/sysctl.conf里面没有对应的配置,可以不管它。
最后附上linux常用命令(来源见水印):