1 | ⣿⣿⣿⣿⣿⣿⢟⣡⣴⣶⣶⣦⣌⡛⠟⣋⣩⣬⣭⣭⡛⢿⣿⣿⣿⣿ |
昨晚刚整好那个ubuntu,今天下午又一台centos6开机卡主起不来。开机进度条按esc取消进入字符输出如下
1 | Welcome to CentOS |
挂载iso,修改启动顺序,进rescue mode挂了chroot进去,排查到ck-log-system-start相关的目录丢失
1 | bash-4.1# cd /etc/init |
查看该文件内容
1 | bash-4.1# cat ck-log-system-stop.conf |
手动启动试试
1 | bash-4.1# /usr/sbin/ck-log-system-start |
居然不是文件
1 | bash-4.1# ls -l /var/log/ConsoleKit |
找了个系统对比下,操作下,权限755所以直接创建目录即可
1 | bash-4.1# mv /var/log/ConsoleKit{,.bak} |
重启后字符输出那里最下面没init那个错误了,但是还是依然卡主,看了下 https://blog.51cto.com/1992tao/1852322 的文章介绍了详细的启动顺序,所以应该从/etc/rc.d/rc.sysint
里debug入手,启动的字符输出就是这个脚本输出的。
rescue mode挂载进去发现/etc/rc.d/rc.sysint
里面的647行为
1 | action $"Enableing /etc/fstab swaps: " swapon -a -e |
如果对centos6的init熟悉的话可以知道function那个文件里有action的定义,就是启动过程中执行后面的命令,成功则字符 [ OK ]
这样
在脚本最后面加上
1 | action "Test" date |
然后启动,发现显示出Test xxxx
,说明该脚本正常执行完,这个时候不应该在该脚本后面紧接着的脚本排查,而应该隔段排查,既然最终没运行到登陆的tty,而在/bin/login
前面就是/etc/rc.d/rc.local
。该脚本里就只有一句(也就是默认的)
1 | touch /var/lock/subsys/local |
touch命令会修改文件的三个time,使用stat看了后发现时间是上次的启动时间,说明也未执行到这里,可以把范围缩小在rc相关联的文件这儿了
最后在/etc/init/rc.conf
里找到了异常
1 | bash-4.1# cat /etc/init/rc.conf |
可以发现该脚本会去运行/etc/rc.d/rc
,对比了下正常的机器最后两行多了,用rpm -qf查了下ttyload不属于任何包,应该是中毒了被添加的。看了下crontab多了个.ssh/ssh
的行,还多了个ROOT且uid为0有密码的用户。这个文件还被加了attr的各种权限防止修改,使用chattr去掉权限后把这两行注释了保存,计划任务注释后开机能正常启动。中毒剩下的让他们自己整吧。
这是头一次看见病毒的人改启动流程,一般ddos和肉鸡挖矿的都是crontab里藏在/var/spool/cron/x整个文件保持自己进程活跃和开机rc.d加文件自启动,这个居然还让用户强制无法正常开机