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


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

    我们通过删除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

    重新启动server

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


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

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


    看到这儿。非常多人肯定非常高兴,如今直接安装bash的rpm 包,这个问题不就能轻松攻克了嘛

    事实上。如今bash仅仅是有光盘的提供的一个虚拟的linux系统,此刻我们如今还没有真正的进入我们的server的系统中,依照上面的 提示输入:

    chroot /mnt/sysimage

    能够看到报了例如以下的错误,应为sh仅仅是bash的软连接。如今bash已经没了,sh自然就无法进行连接第一次尝试失败了

    linux事实上另一种其它的登陆方式,叫做跨越控制台的登陆方式:

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

    按e键;

    继续按e

    然后再移动键盘到类似以下的一行,也就是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系统


    可能系统是仅仅读的;

    要执行以下的命令;

    #mount -o remount,rw /

    然后我们能够通过 df -h 来查看文件系统的载入情况。既然都把文件系统挂载了,有什么活干不了的呢?重设rootpassword。备份文件... ...

    能够看到我们已经把光盘挂载到/media以下了,就能够直接安装bash的rpm镜像来进行修复了

    重新启动server,发现远程能够顺利的连上server了。问题解决!!
     

     

  • 相关阅读:
    Java并发基础知识点总结
    Java中的可重入锁(2)
    Java中的可重入锁
    多线程的共享变量的内存不可见性
    JavaWeb 案例3— Cookie案例
    JavaWeb 案例2—response案例
    JavaWeb 之 三层架构(MVC架构):软件设计架构
    JavaWeb 之 备用9
    JavaWeb 之 备用6
    JavaWeb 之 备用7
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7199003.html
Copyright © 2020-2023  润新知