码迷,mamicode.com
首页 > 系统相关 > 详细

从一次生产事故说起——linux的单用户模式,救援模式等等

时间:2014-09-30 20:23:50      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:linux   rpm   bash   

伴随着今年linux上面最大一个安全漏洞bash漏洞的出现,我们公司也开始了风风火火的漏洞修复工作,机器一多,也就容易出问题,有台64位的linux服务器一不小心就升级了32位 bash 的rpm,由于root,oracle这些用户默认都是通过/bin/bash来登陆的,这就造成了用户不能登陆服务器造成了极大的困扰,下面就是应对的办法,由于在生产环境解决的时候没法截图,通过虚拟机的环境来模拟当时的情况:

我们通过删除bash的rpm包的方式来模拟生产商bash包装错的情况:

在这个以前,我们先来看看linux几个常用的shell之间的关系

[09:18:56 root()@kiwi ~]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Sep 15 07:59 /bin/sh -> bash
[09:19:02 root()@kiwi ~]# ll /bin/ksh
-rwxr-xr-x. 1 root root 168016 Jul 21  1999 /bin/ksh
[09:19:09 root()@kiwi ~]# ll /bin/csh
lrwxrwxrwx. 1 root root 4 Sep 15 08:03 /bin/csh -> tcsh
[09:19:21 root()@kiwi ~]# ll /bin/tcsh
-rwxr-xr-x. 1 root root 387328 Dec 18  2012 /bin/tcsh

可以看到,现在sh只是bash的软连接,如果bash损坏了,sh也就损坏了,也就无法登陆系统了

现在进行模拟

[09:19:29 root()@kiwi ~]# rpm -qa bash
bash-4.1.2-15.el6_4.x86_64
[09:21:46 root()@kiwi ~]# rpm -e bash --nodeps
warning: %postun(bash-4.1.2-15.el6_4.x86_64) scriptlet failed, exit status 127
[09:22:05 root()@kiwi ~]# rpm -qa bash
[09:22:13 root()@kiwi ~]# 

现在已经把bash的rpm给强制删除掉了,看到各个用户的登陆方式

[09:22:13 root()@kiwi ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
oracle:x:500:500::/home/oracle:/bin/bash

重启服务器

就发现系统就卡在这儿,一直无法进入登陆界面


bubuko.com,布布扣

通常的,linux系统一出问题,我们就想到了linux的救援模式,好,现在就进入救援模式看看能不能解决这样的问题

bubuko.com,布布扣

一步一步我们都选择默认的

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣bubuko.com,布布扣
bubuko.com,布布扣

看到这儿,很多人肯定很高兴,现在直接安装bash的rpm 包,这个问题不就能轻松解决了嘛

bubuko.com,布布扣

其实,现在bash只是有光盘的提供的一个虚拟的linux系统,此刻我们现在还没有真正的进入我们的服务器的系统中,按照上面的 提示输入:

chroot /mnt/sysimage

可以看到报了如下的错误,应为sh只是bash的软连接,现在bash已经没了,sh自然就无法进行连接第一次尝试失败了

bubuko.com,布布扣

linux其实还有一种其他的登陆方式,叫做跨越控制台的登陆方式:

跨越控制台登录是不需要输入root密码的,如果您把root密码丢失,就要想到跨越控制台登录;我们前面所说的救援模式从本质上来说,就是跨越控制台登录,因为无需要密码验证就能登录系统;
跨越控制台登录主要包括:借grub和lilo 跨越控制台登录; linux rescue 模式;第三方livecd 系统和第三方Linux系统;
1)如果您用的是grub进行系统引导;
在grub 启动后,移动键盘到Linux的启动项;

bubuko.com,布布扣

按e键;

bubuko.com,布布扣

继续按e

bubuko.com,布布扣

然后再移动键盘到类似下面的一行,也就是kernel的那行:
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet
把光标移动这行后,再按一下e键,进入编辑这行;在行尾条一个空格 ,然后输入如下的:

kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/1 rhgb quiet linux init=/bin/ksh

结束编辑,按回车返回;
接着我们要启动系统,按一下b键启动;

这样我们就可以通过另外一种shell来启动linux系统

bubuko.com,布布扣
可能系统是只读的;

bubuko.com,布布扣

要运行下面的命令;

#mount -o remount,rw /

然后我们可以通过 df -h 来查看文件系统的加载情况;既然都把文件系统挂载了,有什么活干不了的呢?重设root密码,备份文件... ...

bubuko.com,布布扣

可以看到我们已经把光盘挂载到/media下面了,就可以直接安装bash的rpm镜像来进行修复了
bubuko.com,布布扣

重启服务器,发现远程可以顺利的连上服务器了,问题解决!!
 

 

从一次生产事故说起——linux的单用户模式,救援模式等等

标签:linux   rpm   bash   

原文地址:http://blog.csdn.net/kiwi_kid/article/details/39698267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!