このプロジェクトではUbuntuLinuxを使用します。
会議で特定のアプリケーションをトレーニングするには、次のものが必要です。
#1では、シングルユーザーアカウントを作成したいので、学生ごとにアカウントを作成したり、ユーザー名とパスワードを配布したりする必要はありません。
誰かが私がこれらの目標を達成する方法を知っていますか?どのテクノロジー(例: LXC、Chrootなどがこれに最適ですか?私は、.bash_profileと.bash_logoutを使用してこれらの環境の作成と破棄を処理するというアイデアをいじっていますが、どのテクノロジーが必要な環境を作成できるかわかりません。
Docker を使用すると、これを非常に簡単に行うことができます。
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権限をユーザーに付与することもできます。
passwd testuser
これも明らかだと思います。
Firejail 制限付きシェルを使用できます。基本的に、マウント、PID、IPC、およびネットワーク名前空間をSSHまたはtelnet経由で開かれる通常のbashセッションにアタッチします。仮想環境はログアウト時に自動的に破棄されます。これは小さなハウツーです。