Golang 退出chroot环境的方法

chroot()是用linux的系统函数,能改变程序运行时参考的根目录。安装系统或者通过引导盘进入恢复系统时,可以通过chroot()修复GRUB,或者安装软件。

Golang的syscall包提供Chroot()方法。

但进入chroot环境后,如何退出呢?目前我就碰到这个需求。翻遍syscall包,也没看到直接的退出方式。Google后发现,不止我一个人想这么做。有篇文章 给出了python的hack方案。照猫画虎,我用go试着做了一遍:


    // hold our real root's file descriptor for switching back later
    oldRootF, err := os.Open("/")
    defer oldRootF.Close()
    if err != nil {
        glog.Warningf("fail to open root: %v\n", err)
    }

    // change working dir to old root
    err = syscall.Chroot("/mnt/install")
    if err != nil {
        glog.Warningf("fail to chroot %v\n", err)
    }

    // do some stuff in new root 

    // switch back
    err = oldRootF.Chdir()
    if err != nil {
        glog.Warningf("chdir() err: %v", err)
    }
    err = syscall.Chroot(".")
    if err != nil {
        glog.Warningf("chroot back err: %v", err)
    }

其中的把戏在于,切根之前先保存旧根的文件FD。等到要切回来时,先把当前工作目录切回旧的根目录,再chroot到当前目录。

时间: 2024-12-23 11:35:03

Golang 退出chroot环境的方法的相关文章

在Ubuntu系统中配置chroot环境的教程

  你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 linux 中,一个典型的方式就是 chroot 环境. 在这份教程中,我会一步一步指导你怎么使用 chroot 命令去配置一个与真实系统分离出来的独立环境.这个功能主要可以用于测试项目,以下这些步骤都在 Ubuntu 14.04 虚拟专用服务器(VPS)上执行. 学会快速搭建一个简单的 chroot 环境是一项非常实用的技能,绝大多数系统管理员都能从中受益. Chr

如何在 Ubuntu 14.04 里面配置 chroot 环境

如何在 Ubuntu 14.04 里面配置 chroot 环境 你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 linux 中,一个典型的方式就是 chroot 环境. 在这份教程中,我会一步一步指导你怎么使用 chroot 命令去配置一个与真实系统分离出来的独立环境.这个功能主要可以用于测试项目,以下这些步骤都在 Ubuntu 14.04 虚拟专用服务器(VPS)上执行. 学会快速搭建一个简单的 chroot 环境是

Docker 搭建 Tomcat 运行环境的方法_docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1 Docker与虚拟机   2 搭建过程 2.1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: # uname -r 2.2 安装Docker # yum install d

win7系统配置php+Apache+mysql环境的方法_php实例

B/S架构当下很流行,因为B/S架构有众多优点,例如:用户只需有浏览器就可使用,维护升级都比较方便,跨平台,等等.本文就讲讲Windows+Apache+PHP+Mysql的开发环境如何配置. 如何在win7系统下配置php环境呢,php+Apache+mysql都是在配置过程中必不可少的元素,php负责解析php代码,apache负责服务器端而mysql是数据交互的中转站. 那么如何将php+apache+mysql配置好呢,接下来我们看一下具体的方法,软件版本会改变所以需要自己因时制宜,随机

Android实现长按back键退出应用程序的方法

  本文实例讲述了Android实现长按back键退出应用程序的方法.分享给大家供大家参考.具体分析如下: 最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序.在网上查找了很多资料,发现几乎没有这样的实现,大部分在处理时是双击back键来退出应用程序.参考了一下双击back键退出应用程序的代码,网上主流的一种方法是下面这种方法,实现起来比较简单: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override

Office2007保存工作环境的方法

  今天,小编将为大家分享的是一篇与office2007保存工作环境有关的教程,可能网友要问了,office2007工作环境是什么意思?其实,office2007工作环境就是指我们在是office2007的过程中,设置的一些常用操作,比如说,保存地址.保存格式.导出文件的位置等.当您重装office2007的时候,这个操作就非常有用了,下面就一起来看看保存office2007工作环境的方法吧! 找到Office2007安装文件位置,并将地址进行复制; Office2007 打开"开始"

Linux安装配置php环境的方法_php技巧

本文实例讲述了Linux安装配置php环境的方法.分享给大家供大家参考,具体如下: 1.获取安装文件: http://www.php.net/downloads.php php-5.3.8.tar.gz 获取安装php需要的支持文件:http://download.csdn.net/download/netlong339/1351852 libxml2-2.6.32.tar.gz 2.安装libxml2 复制代码 代码如下: tar zxvf libxml2-2.6.32.tar.gz cd l

Apache服务之Chroot环境设置

现在要安装Chroot环境了,为什么要安装Chroot环境呢?因为它安全,chroot可以把进程的根目录变成不是"/"目录的其他目录.这就意味着该进程被锁定到一个http://www.aliyun.com/zixun/aggregation/18564.html">虚拟文件系统的根中.如果你再适当地配置你的chroot jail,Apache和它的子进程(比如CGI脚本)将除于chroot jail环境之外不能访问其他任何东西.同时,非根进程也不能离开chroot ja

Android实现长按back键退出应用程序的方法_Android

本文实例讲述了Android实现长按back键退出应用程序的方法.分享给大家供大家参考.具体分析如下: 最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序.在网上查找了很多资料,发现几乎没有这样的实现,大部分在处理时是双击back键来退出应用程序.参考了一下双击back键退出应用程序的代码,网上主流的一种方法是下面这种方法,实现起来比较简单: @Override public boolean onKeyDown(int keyCode, KeyEvent ev