その場でユーザー環境を複製および分離する


8

このプロジェクトではUbuntu Linuxを使用します。

会議での特定のアプリケーションのトレーニングに必要なもの:

  1. 各生徒がサーバー上の同じユーザーアカウントにsshできるようにする
  2. ログインするたびに、ユーザーは自動的に個別の隔離された環境に置かれます
  3. 分離された各環境には、アプリケーション、サンプル設定ファイル、および標準のUNIXツールセット(grep、awk、sort、uniqなど)が含まれます。ただし、ユーザーが自分のファイルシステムにのみ損傷を与えることができる限り、Linuxファイルシステム全体へのアクセスも問題ありません。他の環境ではなく、隔離された環境。
  4. ユーザーのSSHセッションが終了すると、仮想環境が破棄されます

#1では、単一のユーザーアカウントを使用するので、各生徒のアカウントを作成してユーザー名とパスワードを渡す必要はありません。

私がこれらの目標を達成する方法を誰かが知っていますか?LXC、Chrootなどのどのテクノロジーがこれに最適ですか?私は.bash_profileと.bash_logoutを使用してこれらの環境の作成と破棄を処理するという考えをいじっていましたが、どのテクノロジーで必要な環境を作成できるかはわかりません。

回答:


8

ドッカーあなたは非常に簡単にこれを行うことができます。

docker pull ubuntu

docker run -t -i ubuntu /bin/bash
# make your changes and then log out
docker commit $(docker ps -a -q | head -n 1) sandbox

cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF
chmod a+x /usr/local/bin/sandbox

echo /usr/local/bin/sandbox >> /etc/shells

useradd testuser -g docker -s /usr/local/bin/sandbox
passwd testuser

たびtestuserログで、彼らはそれの外に何を見ることができない孤立した容器、他のユーザーのではないとしても、容器の中に配置されます。
コンテナはログアウトすると自動的に削除されます。


説明:

docker pull ubuntu

ここで、使用するベースイメージをフェッチします。Dockerは標準イメージを提供し、ubuntuはその1つです。
 

docker run -t -i ubuntu /bin/bash
# make your changes and then log out

ここでは、ubuntuイメージからシェルを起動します。行った変更はすべてユーザーに保持されます。Dockerfile
使用してイメージを構築することもできますが、一時的には、これはより簡単だと思います。
 

docker commit $(docker ps -a -q |  head -n 1) sandbox

ここでは、最後に実行されたコンテナをと呼ばれる新しいイメージに変換しsandboxます。
 

cat > /usr/local/bin/sandbox <<EOF
#!/bin/sh
exec docker run -t -i --rm=true sandbox /bin/bash
EOF

これは、ユーザーがログイン時に強制的に実行される偽のシェルになります。スクリプトはそれらをDockerコンテナーで起動し、ログアウトするとすぐに自動的にクリーンアップされます。
 

chmod a+x /usr/local/bin/sandbox

これが明白であることを願っています:-)
 

echo /usr/local/bin/sandbox >> /etc/shells

これはあなたのシステムでは必要ないかもしれませんが、私の場合、シェルがに存在しない限り、ログインシェルになることはできません/etc/shells
 

useradd testuser -g docker -s /usr/local/bin/sandbox

シェルをスクリプトに設定した新しいユーザーを作成します。スクリプトは、サンドボックスコンテナーにそれらを強制的に起動します。これらはdockerグループのメンバーであるため、ユーザーは新しいコンテナーを起動できます。
ユーザーをdockerグループに追加する代わりに、sudo権限を1つのコマンドに付与することもできます。
 

passwd testuser

これも明らかだと思います。
 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.