金子邦彦研究室インストールchroot,lxc コンテナ,QEMU エミュレータchroot で隔離された環境を作る(Ubuntu 上)

chroot で隔離された環境を作る(Ubuntu 上)

chroot の隔離された環境は,chroot により,ファイルシステムが分離された環境.

ユースケース: Ubuntu で,新規ユーザと,隔離された環境(chroot 環境)を作りたい.そして,その新規ユーザのユーザ名とパスワードを用いて SSH でリモートログインし,その隔離された環境(chroot 環境)を自由に使いたい

目次

  1. 前準備
  2. Ubuntu の隔離された環境(chroot 環境)の作成(debootstrap を使用)
  3. schroot の設定
  4. 隔離された環境(chroot 環境)を使ってみる
  5. リモートログインできるようにする

1. 前準備

Ubuntu のシステム更新

UbuntuUbuntu で OS のシステム更新を行うときは, 次のコマンドを実行.

UbuntuUbuntu のインストールは別ページ »で説明

sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

2. Ubuntu の隔離された環境(chroot 環境)の作成(debootstrap を使用)

次のように設定する.

次のページの記載による https://wiki.ubuntulinux.jp/UbuntuPackagingGuideJa/appendix-chroot

  1. 前準備として,debootstrap, schroot のインストール
    sudo apt -y install debootstrap schroot
    

    [image]
  2. Ubuntu の隔離された環境(chroot 環境)の作成

    ここでの設定

    終了まで,しばらく待つ

    sudo rm -rf /var/ubuntu2204
    sudo mkdir /var/ubuntu2204
    sudo debootstrap --arch amd64 --variant buildd --include=ca-certificates,apt,wget,sudo jammy /var/ubuntu2204 http://jp.archive.ubuntu.com/ubuntu
    

    [image]
  3. 終了の確認

    [image]
  4. 確認のため,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -a」で確認.

    確認が終わったら chroot 環境を終える.

    sudo chroot /var/ubuntu2204 bash
    uname -a
    exit
    

    [image]
  5. /etc/fstab の設定

    これは,隔離された環境(chroot 環境)の中で,procfs などを使うためのもの

    /tmp            /var/ubuntu2204/tmp         none    bind            0       0 
    proc-chroot     /var/ubuntu2204/proc        proc    defaults        0       0 
    devpts-chroot   /var/ubuntu2204/dev/pts     devpts  defaults        0       0 
    

    [image]
  6. いまの /etc/fstab の設定を反映させる操作
    sudo mount -a
    

    [image]
  7. 確認のため,Ubuntu の隔離された環境(chroot 環境)を有効にし,ps コマンドで, procfs が使えることを確認

    次の操作を行い,プロセス情報が表示されれば OK

    確認が終わったら chroot 環境を終える.

    sudo chroot /var/ubuntu2204 bash
    ps
    exit
    

    [image]

    ※ このとき「ps -augx」を実行すると,すべてのプロセス情報が表示される.

  8. /var/ubuntu2204/etc/apt/sources.list の設定
    echo "deb http://jp.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse" | sudo tee -a /var/ubuntu2204/etc/apt/sources.list
    echo "deb-src http://jp.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse" | sudo tee -a /var/ubuntu2204/etc/apt/sources.list
    

    [image]
  9. Ubuntu の隔離された環境(chroot 環境)を有効にし, build-essentials などをインストール.

    終わったら chroot 環境を終える.

    sudo chroot /var/ubuntu2204 bash
    apt update
    apt -y install dialog  build-essential dh-make automake pbuilder gnupg lintian wget debconf devscripts gnupg sudo language-pack-ja
    apt -y install 
    

3. schroot の設定

schroot を設定し,一般ユーザでも chroot が実行できるようにする

  1. /etc/schroot/chroot.d/ubuntu2204 を次のように設定

    「directory=/var/ubuntu2204」のところは,実際に作成したディレクトリに書き換えること

    kaneko」のところは,使用させたいユーザのユーザ名に書き換えること(複数のときは,カンマで区切る)

    [ubuntu2204]
    description=Ubuntu 22.04 (Jammy)
    type=directory
    directory=/var/ubuntu2204
    root-users=kaneko
    users=kaneko
    

    [image]
  2. schroot の設定の確認.
    schroot -l 
    schroot -i -c ubuntu2204
    

    [image]
  3. schroot の動作確認

    schroot を動作させるとき「ubuntu2204」のところに何を書けば良いのか分からなくなったときは,「schroot -l」で確認できる.

    これで確認できる通り,ホームディレクトリが入ったドライブはマウントされる.

    schroot -c ubuntu2204 -p bash
    uname -a
    pwd
    exit
    

    [image]

4. 隔離された環境(chroot 環境)を使ってみる

ここでは,nano のインストール, C プログラムの編集とビルドと実行を行ってみる.

  1. まず,管理者の権限で,Ubuntu の隔離された環境(chroot 環境)を有効にし,「uname -a」で確認
    schroot -c ubuntu2204 -p bash
    

    [image]
  2. nanoエディタをインストールしてみる

    chroot 環境でも使用感は変わらない.

    sudo apt -y install nano
    

    [image]
  3. 今度は,C コンパイラを確認してみる.

    エディタを使って次のプログラムファイルを作成。「/tmp/hello.c」のようなファイル名で保存.

    #include<stdio.h>
    int main() {
        printf("Hello,World!\n");
        printf("sizeof(size_t)=%ld\n", sizeof(size_t));
        return 0;
    }
    

    [image]

    [image]
  4. コンパイルして実行
    cd /tmp
    gcc -o a.out hello.c
    ./a.out
    

    [image]
  5. exit で終了
    exit
    

    [image]

5. リモートログインできるようにする

新規ユーザの作成とパスワードの設定

sudo adduser --uid 1234 --home /home/ai ai

[image]

※ やり直すときは「sudo deluser ai」を実行して,アカウントを削除してからやり直す.

[image]

隔離された環境(chroot 環境)の中にホームディレクトリを作成.隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)の追加

これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときなどのため,隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)を追加する.

※ 上で設定したパスワードと同じパスワードにする必要はない.ユーザID,ホームディレクトリ,ユーザ名は同じにすること.

sudo chroot /var/ubuntu2204 bash
rm -rf /home/ai
deluser ai
adduser --uid 1234 --ingroup sudo --home /home/ai ai
exit

/var/ubuntu2204/etc/sudoers の設定

これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときのため.(必要がなければ,この操作は省略すること).

/var/ubuntu2204/etc/sudoers に「Defaults visiblepw」を書き加える.

[image]

権限を変えておく

sudo chmod 444 /var/ubuntu2204/etc/sudoers
sudo chmod 444 /var/ubuntu2204/etc/sudoers.d/*

ディレクトリの権限の設定

ssh を使ってのリモートログインを受け付けたい. ssh の定めにより所有者を root に,権限を「755」に設定する.

sudo chown root:root /home
sudo chmod 755 /home
sudo chown root:root /var/ubuntu2204
sudo chmod 755 /var/ubuntu2204
sudo chown root:root /var/ubuntu2204/home
sudo chmod 755 /var/ubuntu2204/home
sudo chown root:root /var/ubuntu2204/home/ai
sudo chmod 755 /var/ubuntu2204/home/ai

/etc/ssh/sshd_config の設定

SSH によるリモートログイン時に chroot が実行されるように,/etc/ssh/sshd_config に次の記述を追加

「ChrootDirectory=/var/ubuntu2204」の「/var/ubuntu2204」のところは,実際に作成したディレクトリに書き換えること

Match User ai
        X11Forwarding yes
        AllowTcpForwarding yes
        ChrootDirectory /var/ubuntu2204

※ もし,sshd_configの中で「AllowUser xxxx」のように,ログインできるユーザ名の指定を行っているときは,そこに「ai」を付け加える

/etc/ssh/sshd_config を変更したので sshd を再起動

sudo service sshd reload

[image]

試しに SSH を用いてログインしてみる

ssh ai@localhost

※ エラーメッセージが出てログインできない場合には,/etc/ssh/sshd_config の設定,そして,「ディレクトリの権限の設定」を確認する

[image]