通过 chroot 重新设置 root 密码
实例:通过 chroot 重新设置 root 密码
忘记了 root 密码该怎么办?接下来的 demo 将演示如何通过 chroot 命令重新设置 centos7 中被忘记了的 root 密码。
systemd 的管理机制中,rescure 模式和 emeryency 模式是无法直接取得 root 权限的,需要使用 root 密码才能进入 rescure 和 emeryency 环境。所以我们需要通过其他方式来设置 root 密码。我们可以为内核的启动指定 "rd.break" 参数,从而让系统在启动的早期停下来,此时我们可以通过使用 root 权限并结合 chroot 命令完成设置 root 密码的操作。下面我们一起来看具体的操作过程。
在系统启动过程中进入开机菜单时按下字母键 e 进程开机菜单的编辑模式:

这就是系统的开机菜单,按下 e 后进入编辑界面:

找到以 "linux16 /vmlinuz-" 开头的行。如果默认没有看到该行,需要按向下键把它滚动出来。
然后定位到该行结尾处,输入一个空格和字符串 "rd.break",如下图所示:

接着按下 ctrl + x 以该设置继续启动,启动过程中操作系统会停下来,这是系统启动过程中的一个非常早的时间点:

所以系统的根目录还挂载在 RAM disk 上(就是内存中的一个文件系统),我们可以通过 mount 命令检查系统当前挂载的文件系统,下面是我们比较关心的两条:

上图中 mount 命令输出的第一行说明此时的根目录在一个 RAM disk 中, 即 rootfs。
图中输出的第二行说明我们的文件系统此时被挂载到了 /sysroot 目录,并且是只读的模式:
而在我们正常登陆系统的情况下,系统根目录的挂载情况如下:
该时间点的最大优势是我们具有 root 权限!所以让我们开始设置新的 root 密码吧。
先通过下面的命令把 /sysroot 重新挂载为可读写的模式:
|
1
|
switch_root:/# mount -o remount,rw /sysroot |
然后用下面 chroot 命令把根目录切换到我们原来的环境中:
|
1
|
switch_root:/# chroot /sysroot |
此时可以理解为:我们以 root 权限登录了原来的系统,修改密码就很容易了!用下面的命令为 root 用户设置新的密码:
|
1
|
sh-4.2# echo "new_root_pw" | passwd --stdin root |
接下来还要处理 SELinux 相关的问题。由于当前的环境中 SELinux 并未启动,所以我们对文件的修改可能造成文件的 context 不正确。为了确保开机时重新设定 SELinux context,必須在根目录下添加隐藏文件 .autorelabel:
|
1
|
sh-4.2# touch /.autorelabel |
最后从 chroot 中退出,并重启系统:
|
1
2
|
sh-4.2# exitswitch_root:/# reboot |
重新进入登陆界面时就可以使用刚才设置的密码以 root 登陆了!
通过 chroot 重新设置 root 密码的更多相关文章
- Ubuntu安装完后设置root密码
安装完Ubuntu 14.04后默认是没有主动设置root密码的,也就无法进入根用户. 相关阅读: Ubuntu 14.04 下载.安装.配置 整理汇总 页面 http://www.linuxidc. ...
- MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed
MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed 1.安装完MySQL设置root密码报错如下 [root@vm ...
- LINUX | 谷歌云开启SSH及设置root密码
一.设置root密码 1.先选择从浏览器打开ssh连接服务器 2.切换到root账号 sudo -i 3.设置root密码 passwd 然后会要求输入新密码,然后再重复一次密码,输入密码的时候不会显 ...
- Ubuntu安装完成后设置root密码
安装完ubuntu后没有默认的root密码,如果要设置root密码需要进行如下步骤: 1 sudo passwd 2 连续输入两次新密码
- ubuntu14.04开启root用户 设置root密码 配置国内镜像源 设置分辨率
一.Ubuntu 默认是不允许 root 通过 ssh 直接登录的,可以修改 /etc/ssh/sshd_config,设置 1 PermitRootLogin yes 然后重启 ssh 服务即可 1 ...
- Ubuntu设置root密码
最初使用系统时,只有当前管理员的密码,root密码为随机生成的. 通过 sudo passwd 设置root密码,然后su获得root,也就是最高权限
- centos7 mariadb 设置root密码
centos7 mariadb 设置root密码 修改root密码1.以root身份在终端登陆,必须2.输入 mysqladmin -u root -p password root后面的 root ...
- Mac设置Root密码
[Mac设置Root密码] Mac系统重新设置root用户密码 如果不知道root用户密码,需要重设. 命令[sudo passwd root ] 然后提示你输入当前登录用户密码,通过以后, ...
- 【260】centos设置root密码
怎么进Linux单用户模式 http://tieba.baidu.com/p/2216642385 http://jingyan.baidu.com/article/c1a3101ea68dafde6 ...
随机推荐
- vue里面模板解析数据的时候
页面中新建信息的时候值之间有多个空格的时候 可以使用pre标签,你写了多少个空格,页面就会渲染出来 html解析 什么是pre标签
- mongodb 的 curd
增: db.表名.insert({name:'lisi',age:24}); ...
- 与 JSON 相关的一些操作 (项目中用到一部分,后续逐渐完善)
1.JSON 打印 console.log(JSON.stringify(data, null, 4)); 2.JSON 格式判断 var isjson = typeof(obj) == " ...
- BOOST_CLASS_EXPORT
用基类的指针去转存派生类时除了上一篇boost::serialization 用基类指针转存派生类(错误多多,一波三折)之外.还有还有一种更简单的方法: 用BOOST_CLASS_EXPORT宏. 以 ...
- vue25---vue2.0变化
组件模版: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- hdoj--1034--Hidden String(dfs)
Hidden String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- 4.graph.h
#pragma once #include <stdio.h> #include <graphics.h> #include <mmsystem.h> #pragm ...
- C++中explicit关键字作用
explicit是c++中不太常用的一个关键字,其作用是用于修饰构造函数,告诉编译器定义对象时不做隐式转换. 举例说明: include <iostream> include <st ...
- Coderfroces 864 E. Fire(01背包+路径标记)
E. Fire http://codeforces.com/problemset/problem/864/E Polycarp is in really serious trouble — his h ...
- CentOS 源设置
安装完CentOS后,系统默认的源可能有限满,这时我们需要添加国内比较好的源. 一.国内比较好的源https://opsx.alibaba.com/mirror #阿 ...