Linux中國

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

原則上,任何運行在 chroot 環境內的應用都不能訪問系統中其他信息(LCTT譯註:使用 chroot 把一個目錄變成根目錄,在裡面運行的應用只能訪問本目錄內的文件,無法訪問到目錄外的文件。然而,運行在 chroot 環境的應用可以通過 sysfs 文件系統訪問到環境外的信息,所以,這裡有個「原則上」的修飾語)。

Chroot 環境的用處

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

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

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

Debootstrap 和 Schroot

使用 chroot 環境需要安裝 debootstrapschroot,這兩個軟體都在 Ubuntu 的鏡像源中。其中 schroot 用於創建 chroot 環境。

Debootstrap 可以讓你通過鏡像源安裝任何 Debian(或基於 Debian 的)系統,裝好的系統會包含最基本的命令。

Schroot 命令允許用戶使用相同的機制去創建 chroot 環境,但在訪問 chroot 環境時會做些許可權檢查,並且會允許用戶做些額外的自動設置,比如掛載一些文件系統。

在 Ubuntu 14.04 LTS 上,我們可以通過兩步來實現這個功能:

1. 安裝軟體包

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

$ sudo apt-get install debootstrap 
$ sudo apt-get install schroot

2. 配置 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

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

3. 使用 debootstrap 安裝32位 Ubuntu 系統

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

你可以將 --arch 的參數換成 i386 或其他架構,只要存在這種架構的鏡像源。你也可以把鏡像源 http://archive.ubuntu.com/ubuntu/ 換成離你最近的鏡像源,具體可參考 Ubuntu 官方鏡像主頁

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

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

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

4. 完成 chroot 環境

安裝完系統後,我們需要做一些收尾工作,確保系統運行正常。首先,保證主機的 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

via: http://linoxide.com/ubuntu-how-to/configure-chroot-environment-ubuntu-14-04/

作者:Arun Pyasi 譯者:bazz2 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國