$ rootfs
$ (docker export $(docker create busybox) | -C rootfs -xvf -)
$ rootfs
$ rootfs /bin/
$ rootfs /bin/
$ rootfs
$ rootfs /bin/
$ pid=$( -s - /proc/$pid/root
#include
main(<span style="color: #0000ff">int argc,<span style="color: #0000ff">char *<span style="color: #000000">argv[])
{
<span style="color: #0000ff">if(argc<<span style="color: #800080">2<span style="color: #000000">){
printf(<span style="color: #800000">"<span style="color: #800000">Usage: chroot NEWROOT [COMMAND...] \n<span style="color: #800000">"<span style="color: #000000">);
return <span style="color: #800080">1<span style="color: #000000">;
}
<span style="color: #0000ff">int
{
<span style="color: #0000ff">if(argc<<span style="color: #800080">2<span style="color: #000000">){
printf(<span style="color: #800000">"<span style="color: #800000">Usage: chroot NEWROOT [COMMAND...] \n<span style="color: #800000">"<span style="color: #000000">);
return <span style="color: #800080">1<span style="color: #000000">;
}
</span><span style="color: #0000ff">if</span>(<span style="color: #0000ff">chroot</span>(argv[<span style="color: #800080">1</span><span style="color: #000000">])) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">chroot</span><span style="color: #800000">"</span><span style="color: #000000">);
return </span><span style="color: #800080">1</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">if</span>(chdir(<span style="color: #800000">"</span><span style="color: #800000">/</span><span style="color: #800000">"</span><span style="color: #000000">)) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">chdir</span><span style="color: #800000">"</span><span style="color: #000000">);
return </span><span style="color: #800080">1</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">if</span>(argc == <span style="color: #800080">2</span><span style="color: #000000">) {
</span><span style="color: #008000">//</span><span style="color: #008000"> hardcode /bin/sh for my busybox tools.</span>
argv[<span style="color: #800080">0</span>] = (<span style="color: #0000ff">char</span> *)<span style="color: #800000">"</span><span style="color: #800000">/bin/sh</span><span style="color: #800000">"</span><span style="color: #000000">;
argv[</span><span style="color: #800080">1</span>] = (<span style="color: #0000ff">char</span> *) <span style="color: #800000">"</span><span style="color: #800000">-i</span><span style="color: #800000">"</span><span style="color: #000000">;
argv[</span><span style="color: #800080">2</span>] =<span style="color: #000000"> NULL;
} </span><span style="color: #0000ff">else</span><span style="color: #000000"> {
argv </span>+= <span style="color: #800080">2</span><span style="color: #000000">;
}
execvp (argv[</span><span style="color: #800080">0</span><span style="color: #000000">],argv);
printf(</span><span style="color: #800000">"</span><span style="color: #800000">chroot: cannot run command `%s`\n</span><span style="color: #800000">"</span>,*<span style="color: #000000">argv);
return </span><span style="color: #800080">0</span><span style="color: #000000">;
}
$ -Wall mychroot.c -o mychroot
$ ./mychroot ./rootfs
argv[] = ( *);
找到以 "linux16 /vmlinuz-" 开头的行。如果默认没有看到该行,需要按向下键把它滚动出来。然后定位到该行结尾处,输入一个空格和字符串 "rd.break",如下图所示:
接着按下 ctrl + x 以该设置继续启动,启动过程中操作系统会停下来,这是系统启动过程中的一个非常早的时间点:
/dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on / type xfs (rw,seclabel,noquota)
switch_root:/# -o remount,rw /sysroot
switch_root:/# /sysroot
用下面的命令为 root 用户设置新的密码:
-# | --stdin root
接下来还要处理 SELinux 相关的问题。由于当前的环境中 SELinux 并未启动,所以我们对文件的修改可能造成文件的 context 不正确。为了确保开机时重新设定 SELinux context,必須在根目录下添加隐藏文件 .autorelabel:
-# /.autorelabel
-/# reboot
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。