天天看點

如何在 Ubuntu 14.04 裡面配置 chroot 環境如何在 Ubuntu 14.04 裡面配置 chroot 環境

你可能會有很多理由想要把一個應用、一個使用者或者一個環境與你的 linux 系統隔離開來。不同的作業系統有不同的實作方式,而在 linux 中,一個典型的方式就是 chroot 環境。

在這份教程中,我會一步一步指導你怎麼使用 chroot 指令去配置一個與真實系統分離出來的獨立環境。這個功能主要可以用于測試項目,以下這些步驟都在 ubuntu 14.04 虛拟專用伺服器(vps)上執行。

學會快速搭建一個簡單的 chroot 環境是一項非常實用的技能,絕大多數系統管理者都能從中受益。

<a target="_blank"></a>

一個 chroot 環境就是通過系統調用,将一個本地目錄臨時變成根目錄。一般所說的系統根目錄就是挂載點"/",然而使用 chroot 指令後,你可以使用其它目錄作為根目錄。

如何在 Ubuntu 14.04 裡面配置 chroot 環境如何在 Ubuntu 14.04 裡面配置 chroot 環境

原則上,任何運作在 chroot 環境内的應用都不能通路系統中其他資訊(lctt譯注:使用 chroot 把一個目錄變成根目錄,在裡面運作的應用隻能通路本目錄内的檔案,無法通路到目錄外的檔案。然而,運作在 chroot 環境的應用可以通過 sysfs 檔案系統通路到環境外的資訊,是以,這裡有個“原則上”的修飾語)。

測試一個不穩定的應用服務不會影響到整個主機系統。 就算使用 root 權限做了些不當的操作,把 chroot 環境搞得一塌糊塗,也不會影響到主機系統。 可以在你的系統中運作另外一個作業系統。

舉個例子,你可以在 chroot 環境中編譯、安裝、測試軟體,而不去動真實的系統。你也可以在64位環境下使用 chroot 建立一個32位環境,然後運作一個32位的程式(lctt澤注:如果你的真實環境是32位的,那就不能 chroot 一個64位的環境了)。

但是為了安全考慮,chroot 環境為非特權使用者設立了非常嚴格的限制,而不是提供完整的安全政策。如果你需要的是有完善的安全政策的隔離方案,可以考慮下 lxc、docker、vservers等等。

使用 chroot 環境需要安裝 debootstrap 和 schroot,這兩個軟體都在 ubuntu 的鏡像源中。其中 schroot 用于建立 chroot 環境。

debootstrap 可以讓你通過鏡像源安裝任何 debian(或基于 debian 的)系統,裝好的系統會包含最基本的指令。

schroot 指令允許使用者使用相同的機制去建立 chroot 環境,但在通路 chroot 環境時會做些權限檢查,并且會允許使用者做些額外的自動設定,比如挂載一些檔案系統。

在 ubuntu 14.04 lts 上,我們可以通過兩步來實作這個功能:

第一步,在ubuntu 14.04 lts 主機系統上安裝 debootstrap 和 schroot:

$ sudo apt-get install debootstrap

$ sudo apt-get install schroot

現在我們有工具在手,需要指定一個目錄作為我們的 chroot 環境。這裡建立一個目錄先:

sudo mkdir /linoxide

編輯 schroot 的配置檔案:

sudo nano /etc/schroot/schroot.conf

再提醒一下,我們現在是在 ubuntu 14.04 lts 系統上。如果我們想測試一個軟體包能不能在 ubuntu 13.10(代号是“saucy salamander”) 上運作,就可以在配置檔案中添加下面的内容:

[saucy]

description=ubuntu saucy

location=/linoxide

priority=3

users=arun

root-groups=root

如何在 Ubuntu 14.04 裡面配置 chroot 環境如何在 Ubuntu 14.04 裡面配置 chroot 環境

根據你的系統要求,調整上面的配置資訊。

debootstrap 指令會在你的 chroot 環境裡面下載下傳安裝一個最小系統。隻要你能通路鏡像源,你就可以安裝任何基于 debian 的系統版本。

前面我們已經建立了 /linoxide 目錄用于放置 chroot 環境,現在我們可以在這個目錄裡面運作 debootstrap 了:

cd /linoxide

sudo debootstrap --variant=buildd --arch amd64 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/

sudo chroot /linoxide /debootstrap/debootstrap --second-stage

注意:如果你是在64位系統中建立32位系統,你需要在上面第3行指令中加入 --foreign 選項,就像下面的指令:

sudo debootstrap --variant=buildd --foreign --arch i386 saucy /linoxide/ http://archive.ubuntu.com/ubuntu/

下載下傳需要一段時間,看你網絡帶寬性能。最小系統大概有500m。

安裝完系統後,我們需要做一些收尾工作,確定系統運作正常。首先,保證主機的 fstab 程式能意識到 chroot 環境的存在:

sudo nano /etc/fstab

在檔案最後面添加下面的配置:

proc /linoxide/proc proc defaults 0 0

sysfs /linoxide/sys sysfs defaults 0 0

儲存并關閉檔案。

挂載一些檔案系統到 chroot 環境:

$ sudo mount proc /linoxide/proc -t proc

$ sudo mount sysfs /linoxide/sys -t sysfs

複制 /etc/hosts 檔案到 chroot 環境,這樣 chroot 環境就可以使用網絡了:

$ sudo cp /etc/hosts /linoxide/etc/hosts

最後使用 schroot -l 指令列出系統上所有的 chroot 環境:

$ schroot -l

使用下面的指令進入 chroot 環境:

$ sudo chroot /linoxide/ /bin/bash

測試安裝的版本:

# lsb_release -a

# uname -a

為了在 chroot 環境中使用圖形界面,你需要設定 display 環境變量:

$ display=:0.0 ./apps

目前為止,我已經成功地在 ubuntu 14.04 lts 上安裝了 ubuntu 13.10。

退出 chroot 環境:

# exit

清理一下,解除安裝檔案系統:

$ sudo umount /test/proc

$ sudo umount /test/sys

----------------------------------------------------------------------------------------------------------------------------

原文釋出時間:2015-02-25

本文來自雲栖合作夥伴“linux中國”