2015-03-23

Ubuntu 用一般使用者建立與使用 LXC Container

阿舍對於用 sudo 來啟動和使用 LXC Container 這件事就一直都覺得不是很 OK 的事,所以,因為用 sudo 來啟動 LXC Container 的話,基本上,Container 的 root 就和 Host 的 root 是相等的,因此,Container 的使用者只要取到 root 權限就有機會可以取到 Host 的 root 權限哩 ! ...




所以,當阿舍知道 LXC 1.0 ( Linux Kernal 3.13 ) 開始支援 Unprivilged User 功能的時候,就很想來找時間來試看看,後來,有一天就試了大半天,然後,沒有試成功,因此,阿舍就把它晾著好一陣子,而這二天又在試 LXC 的東西,就順手來試試用 Unprivilged User 啟動 LXC Container,然後,就成功了哩 ! .... 呵呵 !

Unprivileged User 啟動 Container 不需使用 sudo 指令

所謂的 Unprivilged User 指的就是沒有 sudo 或是 root 權限的一般使用者,用這種使用者來啟動和操作 Container 的話,會比用 root 來執行 Container 來的安全些,不過,真的要讓 Container 更安全些的話,還是要再多一些些的設定,這個部份,阿舍改天有空研究後,再來介紹囉 !

接下來,就開始來說明如何設定,首先,先說明一下,阿舍是在Ubuntu 14.04 Server 版上測試的,所以,不確定較早版本的情況是否相容,然後,阿舍是新增一個叫做 ayubiz 的普通使用者來給他可以跑 LXC Container,這個 ayubiz 使用者不是 sudoer,無法修改系統檔案,所以,下面的前二個步驟需要使用 sudoer 來設定,第三個步驟之後,就可切回要跑 Container 的使用者哩 !


  • 安裝相關套件 (sudoer)

阿舍如果沒記錯的話,阿舍實際上只有安裝過 LXC 套件,後面那二個好像 Ubuntu 已經有預載了,不過,以防萬一,還是跑一遍看看囉 !

$ sudo apt-get install lxc systemd-services uidmap


  • 調整 /etc/lxc/lxc-usernet 檔案 (sudoer)

為了讓這個使用者可以在 LXC Contaner 使用網卡,所以,需要在 /etc/lxc/lxc-usernet 這個檔案加入下面這一行,請把 ayubiz 換成你的使用者名稱,而最後面那個數字是這個使用者可附掛的網卡數,用 2 應該就夠了哩 ! 如果有多個使用者時,就再往下每一個使用者加一行就可以了...

ayubiz veth lxcbr0 2


  • 尋找 subuid 和 subgid

所有使用者的 subuid 和 subgid 可以在 /etc/subuid 和 /etc/subgid] 這二個檔案裡找到,而會用到的東西,是使用者帳號後面的那二個數字,可以用下面這行指令來查比較快 ...

$ grep 'ayubiz' /etc/sub?id
/etc/subgid:ayubiz:231072:65536
/etc/subuid:ayubiz:231072:65536


  • 建立預設的 config 檔

在使用者的家目錄下建立 .config/lxc 資料夾,然後,把 /etc/lxc/default.conf 設定檔複製過來修改。

$ mkdir -p ~/.config/lxc
$ cp /etc/lxc/default.conf ~/.config/lxc

接著,請打開複製過來的 default.conf 檔,加入下面這二行,然後,請把這二行後面的數字換成上一個步驟查到的數字,完成之後就存檔離開。

lxc.id_map = u 0 231072 65536
lxc.id_map = g 0 231072 65536


  • 建立 Container 

完成上面的三個步驟後,就可以使用這個帳號來建立、啟動和操作這個使用者自己建立的 Container 了,建立 Container 方式請參考阿舍寫的 這一篇這一篇文,要注意的是,使用者這個帳號來建立和操作 Container 時,都不需要用到 sudo 指令哩 !

另外,阿舍要提醒的是,使用此方式建立的 Container 只有使用者自己看的到,而且,也只看的到自己的 Container 哩 ! 而且,建立的 Container 也不是放在 /var/lib/lxc 裡,而是在使用者家目錄下的 .local/share/lxc 資料夾哩 !

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁