• su: su故障,出现问题的原因是我将/usr目录的权限改为777 了. 洲际导弹


    centos7下误执行chmod -R 777 /后的权限修复方法

    今天由于权限问题zz一般把/usr/bin和/usr/lib两个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误。然后上网找教程很多都要求在root权限下操作来修复,真是悔不当初,哭都哭不出来,只想剁手。幸好最好予以解决了,不然就真得重装系统了(那估计又是摸鱼几天来恢复系统),在此把解决方案记录下来,希望能给踩到坑的朋友抢救一下。

    step1

    新建一个.c文件,在这里我命名为chmodfix.c,把如下内容写到这个.c文件中

    1.  
      #include <stdio.h> #include <stdlib.h>
    2.  
      #include <string.h>
    3.  
      #include <sys/stat.h>
    4.  
      #include <ftw.h>
    5.  
      int list(const char *name, const struct stat *status, int type)
    6.  
      {
    7.  
      if(type == FTW_NS)
    8.  
      return 0;
    9.  
      printf("%s 0%3o\n", name, status->st_mode & 07777);
    10.  
      return 0;
    11.  
      }
    12.  
      int main(int argc, char *argv[])
    13.  
      {
    14.  
      if(argc == 1)
    15.  
      ftw(".", list, 1);
    16.  
      else
    17.  
      ftw(argv[1], list, 2);
    18.  
      exit(0);
    19.  
      }

    然后在终端命令行下使用gcc编译得到可执行文件chmodfix.com

    gcc chmodfix.c -o chmodfix.com

    step2

    新建一个.sh文件,在这里我命名为chmodfix.sh,把如下内容写到这个.sh文件中

    1.  
      #!/bin/sh if [ $# != 1 ]
    2.  
      then
    3.  
      echo Usage : $0 \<filename\>
    4.  
      exit
    5.  
      fi
    6.  
      PERMFILE=$1
    7.  
      cat $PERMFILE | while read LINE
    8.  
      do
    9.  
      FILE=`echo $LINE | awk '{print $1}'`
    10.  
      PERM=`echo $LINE | awk '{print $2}'`
    11.  
      chmod $PERM $FILE
    12.  
      #echo "chmod $PERM $FILE"
    13.  
      done
    14.  
      echo "change perm finished! "

    step3

    找到另一台装有centos7并且系统权限正常的电脑,利用step1中得到的chmodfix.com从这台电脑上获取被你损坏的目录下所有文件的正常权限

    1.  
      # 假设原电脑上权限损坏的目录为/usr/bin
    2.  
      ./chmodfix.com /usr/bin >> chmodfix.txt

    输出文件chmodfix.txt的内容形式如下

    /usr/bin 0755 /usr/bin/cp 0755
    /usr/bin/lua 0755
    /usr/bin/captoinfo 0755
    /usr/bin/csplit 0755
    /usr/bin/clear 0755
    /usr/bin/cut 0755

    将得到的权限文件chmodfix.txt复制到权限受损的电脑上

    step4

    这时候由于电脑权限损坏无法切换到root用户从而无法直接修改根目录下被损坏文件的权限,需要切换到centos的emergency mode(ubuntu的用户对应进入到recovery mode)。那么如何进入到emergency mode呢?开机启动的grub界面处对对应系统按下e键,就进入到如下画面

    然后将上图中红圈标示的ro替换成rw init=/sysroot/bin/sh,然后根据底下提示按下ctrl+x启动系统则进入到emergency mode,首先执行命令chroot /sysroot以获取直接访问真实系统文件的权限,然后进入到chmodfix.sh和chmodfix.txt所存放的文件夹下,执行chmodfix.sh以根据chmodfix.txt恢复受损文件的正确权限

    bash chmodfix.sh chmodfix.txt

    由于涉及的文件可能很多,这个过程可能比较长,耐心等待一下,执行结束后在命令行下输入以下命令来重启系统

    1.  
      exit
    2.  
      reboot

    结束

    重启之后在终端下执行su root若能成功切换到root用户而没有提示su:鉴定故障的错误则表明文件修复成功,也可以通过ls -l file来查看文件权限

    1.  
      >ls -l /usr/bin/python
    2.  
      lrwxrwxrwx. 1 root root 7 2月 22 11:25 /usr/bin/python -> python2

    血淋淋的教训(一怒之下险些要重装系统了),通过这篇日志把此次重大事故记录下来,希望能帮助到同我一样踩到雷的朋友顺利解决。同时,吃一堑长一智以后可不能再随便使用chmod -R 777修改大批量系统文件的权限,也望各位引以为鉴。

    转载于:https://www.cnblogs.com/brooksj/p/10425513.html

  • 相关阅读:
    《天才源自刻意练习》读书笔记
    IDEA报错,启动失败解决
    Go的定时器之Time.Ticker
    Windows设置硬盘类型
    windows端口转发
    SpringBoot 引入第三方 jar
    【Element】调整 elselect 高度之后 箭头错位问题解决
    AspNetCore&JWT认证授权
    我的微信公众号开通了
    Redis(二):redis持久化
  • 原文地址:https://www.cnblogs.com/HuangLiming/p/16660801.html
Copyright © 2020-2023  润新知