今天由于权限问题一般把/这个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误。然后上网找教程很多都要求在root权限下操作来修复,真是悔不当初,哭都哭不出来,只想剁手。幸好最好予以解决了,不然就真得重装系统了,在此把解决方案记录下来,希望能给踩到坑的朋友抢救一下。
step1
新建一个.c文件,在这里我命名为chmodfix.c,把如下内容写到这个.c文件中
1 |
|
然后在终端命令行下使用gcc编译得到可执行文件chmodfix.com
1 | gcc chmodfix.c -o chmodfix.com |
step2
新建一个.sh文件,在这里我命名为chmodfix.sh,把如下内容写到这个.sh文件中
1 |
|
step3
找到另一台装有centos7并且系统权限正常的电脑,利用step1中得到的chmodfix.com从这台电脑上获取被你损坏的目录下所有文件的正常权限
1 |
|
输出文件chmodfix.txt的内容形式如下
1 | /usr/bin 0755 /usr/bin/cp 0755 |
将得到的权限文件chmodfix.txt复制到权限受损的电脑上
step4
权限受损电脑进入单用户模式:
CentOS6.x版本
单用户模式,就是你现在站在这台机器面前能干的活,再通俗点就是你能够接触到这个物理设备。
一般干这个活的话,基本上是系统出现严重故障或者其他的root密码忘记等等,单用户模式就非常有用了;
1、在开机启动的时候能看到引导目录,用上下方向键选择你忘记密码的那个系统,然后按“e”;
2、接下来你可以看到如下图所示的画面,然后你再用上下键选择最新的内核,然后在按“e”;
3、执行完上步操作后 在rhgb quiet最后加“空格”,然后键入“single”,或者直接输入数字的“1”并回车确定;
4、按“b”键,重新引导系统;
5、然后就进入了单用户模式下,你就可以使用root功能的东西了,改完你要改的文件后reboot即可。
centos7版本采用的是grub2,和centos6.x进入单用户的方法不同。
init方法
1、centos7的grub2界面会有两个入口,正常系统入口和救援模式;
2、修改grub2引导
在正常系统入口上按下”e”,会进入edit模式,搜寻ro那一行,以linux16开头的;
把只读更改成可写
把ro更改成rw
指定shell环境
增加init=/sysroot/bin/sh
或init=/sysroot/bin/bash
按下ctrl+x来启动系统。
3、进入系统以后将/sysroot/设置为根
1 | chroot /sysroot/ |
4、做相应的系统维护工作
如:修改密码
1 | passwd |
5、系统启用了selinux,必须运行以下命令,否则将无法正常启动系统:
1 | touch /.autorelabel |
6、退出并重启系统
退出之前设置的根
1 | exit |
重启系统
1 | reboot |
另外还有一种rd.break方法
1、启动的时候,在启动界面,相应启动项,内核名称上按“e”;
2、进入后,找到linux16开头的地方,按“end”键到最后,输入rd.break,按ctrl+x进入;
3、进去后输入命令mount,发现根为/sysroot/,并且不能写,只有ro=readonly权限;
4、重新挂载,之后mount,发现有了r,w权限;
1 | mount -o remount,rw /sysroot/ |
5、改变根
1 | chroot /sysroot/ |
在/tmp/下创建一个aaa的目录
1 | mkdir /tmp/aaa |
6、系统启用了selinux,必须运行以下命令,否则将无法正常启动系统:
1 | touch /.autorelabel |
7、退出之前设置的根
1 | exit |
8、重启系统
1 | reboot |
以上结束后
然后进入到chmodfix.sh和chmodfix.txt所存放的文件夹下,执行chmodfix.sh以根据chmodfix.txt恢复受损文件的正确权限
1 | bash chmodfix.sh chmodfix.txt |