Linux 管理のラボ:ユーザー、権限、cron、systemd をブラウザーで

このラボでは、各生徒が自分専用の Ubuntu サーバーを管理します。システム管理者が最初の週に行う、小さな仕事が4つあります。ユーザーとグループを追加する、共有フォルダーの権限を設定する、cron でジョブを予約する、systemd のサービスを書いて有効にする、です。生徒のパソコンには何もインストールせず、結果はスクリプトが採点するので、一台ずつ読む必要はありません。

生徒が学ぶこと

ユーザーとグループ:ホームフォルダーとログインシェルを持つ通常のグループと通常のユーザーを作り、管理者の権限を与えずにユーザーをグループに入れます。ファイルの権限:所有者、グループ、それ以外の全員、そして共有フォルダーの中で作られたファイルをフォルダーのグループのものにする setgid ビット。スケジュール:システムの cron フォルダーに置くジョブは、個人の crontab にはないユーザー欄を持ち、書き方を誤ったファイルは cron が何も言わずに無視します。サービス:systemd のユニットファイル、失敗したときに再起動し起動時に始めるために必要なこと、そしてサービスを有効にすると作られるリンク。

4つのタスク

タスク1は、devs というグループと、その中の maria というユーザーです。タスク2は、グループのメンバーだけが使える /srv/projects フォルダーです。タスク3は、ラボが用意したバックアップスクリプトを毎日 02:30 に root で実行するジョブです。タスク4は、ラボが用意したスクリプトのための heartbeat というサービスです。ラボがホームフォルダーに置く README には、それぞれで何をするかが書かれていて、コマンドも権限もユニットファイルも書かれていません。

ブラウザーで動かす

VM ラボはモジュールのラボ課題として設定し、サンプルはラボのページにあります。マシンは小さく、CPU 1つ、メモリ 1 GB、ディスク 10 GB です。

  1. ラボを追加する. 自分が教えるモジュールで課題を追加し、「Ubuntu VM ラボ」のカードを選びます。ページにはcompose ファイルの代わりにマシンの短い記述が表示されます。
  2. サンプルから始める. ページには、そこから始められるサンプルのラボが用意されています。Linux administration を選びます。サンプルを使うとテキストが置き換わりますが、「元に戻す」で自分のテキストに戻せます。
  3. 公開して自分のコピーを起動する. 「公開」してから「起動」を押します。VM の初回起動時に、ラボ自身の setup スクリプトが Ubuntu のアーカイブから cron をインストールし、2つの小さなスクリプトと README を書きます。所要時間は数秒です。
  4. ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。やることが4つ書かれていて、答えは書かれていません。

このラボの基本レッスン

Linux Administration Basics は、Ubuntu VM であるこのラボで行う小さなレッスンです。各ステップに説明と「実行」ボタンがあり、コマンドをマシンのターミナルに入力して、出力を表示します。生徒は、自分が誰かを調べ、チームのグループがまだないことを確かめ、プロジェクトのフォルダーを誰が使えるかを権限から読み取り、どんなスケジュールされたジョブがあるかを見ます。

レッスンは見て回るだけで、4つの仕事というラボ自身の課題は生徒に任せるので、答えは示しません。レッスンはわざと小さくしてあります。ラボで行うレッスンがどういうものかを教師に見せるためのもので、残りはラボが担います。変更したいときは、自分のモジュールにコピーしてください。

採点の仕組み

このラボにはチェックがあります。保存されたマシンのコピーを再起動したあとに実行するので、生徒が保存したものだけが見えます。4つのタスクを順に調べ、正しくない最初のところで止まります。実際の状態を読みます。ユーザーとグループ、フォルダーの所有者とモード、新しいユーザーとグループ外の人がそこで作ったファイル、/etc/cron.d の cron ファイル、そしてユニットファイルとサービスを有効にすると作られるリンクです。ユーザーの crontab、全員に開いたフォルダー、起動しただけで有効にしていないサービス、リンクの代わりにしたユニットファイルのコピーは合格せず、チェックが出力した最初の行に、どのタスクがなぜかが書かれます。

  1. 配布する. ほかの課題と同じようにラボを配布します。期限を付けることもできます。各生徒には専用の VM が渡され、セッションをまたいで保持されます。
  2. チェックを実行する. クラス一覧の生徒の行で「チェックを実行」を押します。保存されたマシンのコピーが(元には保存されない形で)起動し、ラボのチェックスクリプトが root で実行されて、合格したか、何を出力したか、いつかが表示されます。結果は生徒には知らされません。
  3. 採点する. チェックが出力した最初の行を読みます。正しくない最初のタスクとその理由が書かれています。足りない場合は理由を書いて差し戻します。

GitHub の定義ファイル

このファイルはラボの定義のすべてで、プラットフォームが実行するものと同じテキストです。サイズ、setup スクリプト、README、チェックが入っています。コピーして、ディスクやファイアウォールのルールなど自分のタスクを足せば、もっと長いラボになります。

よくある質問

チェックは cron のジョブを実行したり、サービスを起動したりしますか?
いいえ。保存されたものを読みます。cron ファイルの所有者、末尾、1行のジョブ、そしてユニットファイルと、有効にすると作られるリンクです。ファイルが正しければ、02:30 にジョブが動くかどうかは cron の仕事です。
生徒は本物の管理コマンドを使えますか?
はい、それが目的です。生徒は本物の Ubuntu マシンで sudo を使えるので、useradd、chmod、systemctl はそのまま動きます。マシンが届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけで、インターネットのほかには届きません。
Linux 管理のラボは自動で採点されますか?
はい。スクリプトが、新しく起動した後の保存済みマシンのコピーを調べ、4つの課題を順に確認して、最初に誤っているところで止まります。出力の1行目にどの課題がなぜ通らなかったかが書かれるので、1台ずつ読む必要はありません。