情報工学徹底攻略実験とレポートの私的学習ガイド

レポート課題11日目・180分T3情報工学1_[学生番号]_[氏名].pdf

1日目 仮想マシンとOSの準備

学校のProxmoxに自分専用の仮想マシンを作り、Ubuntu Serverを入れて、ネットワーク・時刻・更新・管理者権限を整えます。残りの6日間の作業は、すべてこの日の成果の上に積み上がります。

この日のゴール

1日目が終わったとき、次の状態になっていれば成功です。

  • Proxmoxに、自分の仮想マシン(VM ID 1XX、名前 t3lab-XX)がある
  • その中でUbuntu Server 24.04が動き、t3admin でログインできる
  • インストール直後の状態がスナップショット day1-initial として保存されている
  • 時刻が 192.168.100.1 と同期し、ソフトウェアが最新になっている
  • IPアドレスが 192.168.100.xxx に固定され、インターネットに ping が届く

この日に出てくる主な言葉:

全体の流れ

指導書の手順は14個あります。前半はブラウザでProxmoxを操作し、後半はProxmoxのコンソールに映るUbuntuの画面でコマンドを打ちます。2日目まではSSHが使えないので、Ubuntuの操作はすべてコンソールで行います。

表11日目の手順と操作する場所
手順場所内容
1Webブラウザ(Proxmox)Proxmoxにログインする
2Webブラウザ(Proxmox)仮想マシンを作る
3Webブラウザ(Proxmox)Ubuntu Serverをインストールし、ISOを取り出す
4Webブラウザ(Proxmox)スナップショットを取る
5Webブラウザ(Proxmox)起動と停止のしかたを覚える
6Ubuntuサーバー ターミナル動いているサービスを確認する
7Ubuntuサーバー ターミナルログを読む
8Ubuntuサーバー ターミナル時刻合わせ(NTP)を設定する
9Ubuntuサーバー ターミナルソフトウェアを最新にする
10Ubuntuサーバー ターミナルsudo の設定を確認する
11Webブラウザ(Proxmox)QEMU Guest Agentを有効にする
12Ubuntuサーバー ターミナルQEMU Guest Agentを入れる
13Ubuntuサーバー ターミナル今のネットワーク状態を見る
14Ubuntuサーバー ターミナルIPアドレスを固定する

手順の解説

スクリーンショット(エビデンス)を撮るところ。マウスを乗せると撮るタイミングが表示され、押すとページ下のエビデンス一覧の該当項目へ移動します。考察を書くときに知っておきたいこと。マウスを乗せる(スマホでは押す)とヒントが表示されます。

手順 1Webブラウザ(Proxmox)

Proxmoxにログインする

WindowsのChromeで、授業で指定されたURLを開き、Proxmoxの管理画面にログインします。

User name
指定されたユーザー名
Password
指定されたパスワード(他人に教えない、画面に映さない)
Realm
「Proxmox VE authentication server」を選ぶ。Realm(レルム)は「どの名簿でユーザーを確かめるか」の選択肢で、これはProxmoxが独自に持っている利用者名簿のこと
Language
「日本語」を選ぶ。以降の画面が日本語になる

「この接続ではプライバシーが保護されません」と出たら

Proxmoxの管理画面は、学内向けの証明書を使っていることが多く、ブラウザが警告を出すことがあります。そのまま進んでよいかは、教員の指示に従ってください。自己判断で、ほかのサイトの同じような警告を無視する習慣はつけないようにしましょう。

手順 2Webブラウザ(Proxmox)

仮想マシンを作る

画面右上の「VMを作成」を押し、タブを順に進めながら設定します。設定の一つひとつは「どんなパソコンを組み立てるか」を決めている、と考えると分かりやすくなります。

表2VM作成の設定値と、その意味
タブ項目設定意味
全般ノード可能なノードどの物理サーバー(ノード)の上に作るか
VM ID1XX100+学生番号の下2桁。全員の番号がぶつからないように決めてある
名前t3lab-XX一覧に表示される名前
HAに追加オフHA(高可用性)は、物理サーバーが故障したとき別のノードで自動的に起動し直す機能。今回は不要
リソースプール空欄VMをグループ分けするための入れ物。今回は使わない
OSメディアCD/DVDイメージファイル(iso)を使用仮想DVDドライブにインストール用ディスクを入れる
ストレージgennai-nfs-01ISOファイルが置いてある保管場所。NFSはネットワーク越しに共有するファイル置き場の方式
ISOイメージubuntu-24.04.4-live-server-amd64.iso24.04の4回目の改訂版の、サーバー用インストーラー。amd64 は一般的な64ビットのCPU向けという意味
ゲストOSLinux / 6.x - 2.6 Kernel中に入れるOSの種類を教えると、Proxmoxがそれに合った仮想の部品を用意する
システム—デフォルト起動の方式など。変更しない
ディスクストレージlocal-lvmそのノードの内蔵ディスク上の保管場所。仮想ディスクをここに作る。ほかはデフォルト
CPUソケット1CPUの個数
コア2CPUの中で計算を担当する単位の数
種別host(いちばん下)本物のCPUの機能をそのまま仮想マシンに見せる。性能が出やすい
メモリ—1024単位はMiB。約1 GB
ネットワークブリッジvmbr0学校のLANにつながる仮想のスイッチ(ブリッジ)につなぐ。ほかはデフォルト

「確認」タブで「完了」を押すと作成が始まり、しばらくすると左のツリーにVMが現れます。

ほかの人のVMに触らない

Proxmoxはクラス全員で共有しています。VM IDと名前を間違えると、ほかの人の番号とぶつかります。また、左のツリーにはほかの人のVMも並ぶことがあるので、操作する前に必ず自分のVM(1XX)を選んでいるか確かめてください。

手順 3Webブラウザ(Proxmox)

Ubuntu Serverをインストールする

作ったVMを選んで右上の「開始」を押し、VMのメニューの「コンソール」を開きます。仮想DVDに入れたISOから起動し、インストーラーの画面が出ます。

インストーラーの操作方法

マウスは使えません。↑↓ と Tab で項目を移動し、Space でチェックを付け外しし、Enter で決定します。画面下の [ Done ] が「次へ」です。

表3インストーラーの画面と選ぶもの
画面選ぶもの意味・理由
LanguageEnglish画面の言語。コンソールは日本語をうまく表示できないことがあるため英語にする
Installer updateContinue without updatingインストーラー自体の更新はしない
Keyboard configurationLayout: Japanese / Variant: Japanese日本語キーボードの配列にする。英語配列のままだと : @ " などの記号の位置がずれる
Type of installationUbuntu Server標準のサーバー構成
Network configurationそのまま(デフォルト)今はDHCPで仮のIPアドレスをもらう。手順14で固定する
Proxy configuration空欄中継サーバーは使わない
Ubuntu archive mirrorそのまま(デフォルト)ソフトのダウンロード元
Guided storage configurationUse an entire disk を選び、Set up this disk as an LVM group のチェックを外す仮想ディスク全体を使う。LVMは後から容量を柔軟に変えられる仕組みだが、今回は単純な構成にする
Storage configurationそのまま(デフォルト)ディスクの分け方の確認画面
Confirm destructive action問題なければ [Continue]「ディスクの中身を消します」という確認。消えるのは作ったばかりの空の仮想ディスクだけ
Profile configurationYour name: t3admin
Your servers name: t3lab-XX
Pick a username: t3admin
パスワード:指定されたもの(2回)
ログインするユーザーとサーバーの名前(ホスト名)を決める
Upgrade to Ubuntu ProSkip for now有料の拡張サポートは使わない
SSH configurationInstall OpenSSH server にチェックSSHで遠隔操作するためのサーバー(2日目に使う)を入れておく
Featured server snaps何も選ばず [Done]追加のソフトは入れない

「Installing system」でログが流れ、しばらくすると [ Reboot Now ] が出るので選びます。Please remove the installation medium, then press ENTER: のような表示が出たら Enter を押します。

再起動後、t3lab-XX login: と出たら、ユーザー名 t3admin とパスワードでログインします(パスワードは画面に表示されません)。ログインできたら、いったん電源を切ります。考察のヒントこのUbuntu Serverには、マウスで操作する画面(GUI)がありません。それでもこの日の設定をすべてコマンドと設定ファイルだけで終えられたことは、課題1「サーバーにLinux系が使われる理由」を、自分の体験から説明する材料になります。

Ubuntuサーバー ターミナルbash
sudo shutdown -h now
sudo管理者の権限で
shutdownシャットダウンする
-h停止する(halt)
now今すぐ

最後に、Proxmoxで仮想DVDからISOを取り出します。VMの「ハードウェア」を開き、「CD/DVDドライブ」を選んで「編集」から「メディアを使用しない」(英語表示では Do not use any media)にします。入れたままだと、次に起動したときにまたインストーラーが立ち上がることがあります。

ホスト名の表記ゆれ

指導書のREADMEではホスト名を pc[学生番号2桁](あなたなら pcXX)としていますが、この手順では t3lab-[学生番号下2桁](t3lab-XX)を指定しています。このガイドは手順の記載に合わせていますが、どちらを使うかは授業で確認してください。

手順 4Webブラウザ(Proxmox)

スナップショットを取る

インストールしたばかりのきれいな状態を、スナップショットとして保存します。VMを選んで「スナップショット」(Snapshots)タブを開き、「スナップショット作成」から名前 day1-initial と説明を入れて作成します。

作成後、一覧に day1-initial が表示され、自分のVMに付いていることを確かめます。この画面がエビデンス1になります。エビデンス1の撮影ポイント撮影ポイント エビデンス1手順4でスナップショットを作成した直後。Proxmoxの「スナップショット」タブを開き、一覧に day1-initial が表示され、自分のVM(1XX)に付いていることが分かる画面を撮る。エビデンス一覧の項目へ移動 ↓

スナップショットは「セーブポイント」です。あとで設定を壊してしまっても、「ロールバック」を選べばこの時点に戻れます(その代わり、それ以降の変更はすべて消えます)。名前には英数字と - _ を使い、空白や日本語は使わないようにします。考察のヒント更新や設定変更には「うまく動かなくなる」危険もあります。課題2で更新の利点を書くとき、「作業の前にスナップショットを取れば、失敗してもすぐ戻せる」という運用の工夫まで触れると、利点とリスクの両面を論じられます。

節目ごとにセーブする

指導書は「大きな作業を完了するたびにスナップショットを取る」ことを求めています。たとえば day1-network(固定IPの設定後)、day2-ssh(鍵認証の設定後)、day3-docker のように、その日の作業が終わったら取っておくと安心です。

スナップショットは同じ機械の中に保存されるので、機械そのものの故障には備えられません。別の場所に保管する「バックアップ」とは役割が違います。

手順 5Webブラウザ(Proxmox)

起動と停止のしかた

これ以降、VMを動かすときは「開始」、止めるときはUbuntuの中で sudo shutdown -h now を打つか、Proxmoxの「シャットダウン」を押します。操作はVMの「コンソール」で行います。

表4Proxmoxの電源操作の違い
ボタン何が起きるか使いどころ
開始電源を入れるいつでも
シャットダウンOSに「終了してください」と頼み、OSが片付けてから電源が切れる普段の停止はこれ
停止電源コードを抜くのと同じ。OSは片付けができない固まって反応しないときの最終手段

再起動したいときは、Ubuntuの中で sudo reboot を打ちます。

手順 6Ubuntuサーバー ターミナル

動いているサービスを確認する

VMを起動してコンソールでログインし、裏で動いているサービスの一覧と、その管理方法を確かめます。時刻合わせのサービス systemd-timesyncd を例にします。

Ubuntuサーバー ターミナルbash
systemctl list-units --type=service --state=running
systemctl status systemd-timesyncd
sudo systemctl restart systemd-timesyncd
systemctl is-enabled systemd-timesyncd
表5手順6のコマンドの意味
コマンド意味
systemctl list-units --type=service --state=running種類がサービスで、今動いているものを一覧表示するエビデンス3の撮影ポイント撮影ポイント エビデンス3手順6で systemctl list-units --type=service --state=running を実行した直後。一覧は1画面ずつの表示になるので、q を押す前に、見出しの行(UNIT、LOAD、ACTIVE…)と running の行が並んでいる状態で撮る。エビデンス一覧の項目へ移動 ↓
systemctl status systemd-timesyncdそのサービスの状態を表示する
sudo systemctl restart systemd-timesyncdそのサービスを再起動する(管理者の操作なので sudo)
systemctl is-enabled systemd-timesyncd起動時に自動で動く設定か確かめる。enabled なら自動起動する

systemctl status の表示は、次の3か所を読みます。

画面の表示例打ち込むものではなく、表示の例
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-09-28 01:23:45 UTC; 5min ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 612 (systemd-timesyn)
     Status: "Contacted time server …"
先頭の ●
緑なら正常。赤や白抜きなら止まっているか失敗している
Loaded の enabled
起動時に自動で動く設定になっている
Active: active (running)
今まさに動いている。inactive (dead) なら止まっている、failed なら失敗

プロンプトが戻ってこないとき

表示が長いと1画面ずつの表示(ページャ(less))になり、左下に lines 1-20 などと出たまま止まります。q を押すと抜けられます。

手順 7Ubuntuサーバー ターミナル

ログを読む

トラブルの原因を調べる基本はログを読むことです。システム全体の最近のログ、特定のサービスのログ、警告だけのログ、起動時のカーネルのメッセージを順に見ます。

Ubuntuサーバー ターミナルbash
journalctl -n 30
journalctl -u systemd-timesyncd -n 30
journalctl -p warning -n 30
dmesg | tail -n 30
表6手順7のコマンドの意味
コマンド意味
journalctl -n 30システム全体のログの最新30行
journalctl -u systemd-timesyncd -n 30時刻合わせのサービスのログだけの最新30行(-u は unit=サービス)
journalctl -p warning -n 30重要度(priority)が「警告」以上のものだけ
dmesg | tail -n 30カーネルのメッセージのうち最後の30行。| はパイプ(|)エビデンス5の撮影ポイント撮影ポイント エビデンス5手順7で dmesg | tail -n 30 を実行した直後。Operation not permitted と出た場合は、sudo dmesg | tail -n 30 で実行し直してから撮る。コマンドの行も写るようにする。エビデンス一覧の項目へ移動 ↓

ログの1行は「いつ・どの機械の・どのプログラムが・何を言ったか」でできています。考察のヒント考察で「なぜその結果になったか」を説明するとき、推測だけでなく、ログの1行(日時とメッセージ)を根拠として示すと説得力が増します。ログはレポートでは必要な行だけを抜き出して載せます。

画面の表示例打ち込むものではなく、表示の例
Sep 28 01:24:10 t3lab-07 systemd-timesyncd[612]: Contacted time server 192.168.100.1:123 (192.168.100.1).
Sep 28 01:24:10いつ(日時)
t3lab-07どの機械で
systemd-timesyncd[612]どのプログラムが([ ]内はプロセスの番号)
Contacted time server …何が起きたか

dmesg で「Operation not permitted」と出たら

Ubuntuでは、カーネルのメッセージを一般ユーザーが読めない設定になっていることがあります。dmesg: read kernel buffer failed: Operation not permitted と出たら、sudo dmesg | tail -n 30 のように sudo をつけて実行します。

手順 8Ubuntuサーバー ターミナル

時刻合わせ(NTP)を設定する

サーバーの時計を学内のNTPサーバー 192.168.100.1 に合わせ続けるよう、設定ファイルを書き換えます(なぜ大事かは予備知識を参照)。

Ubuntuサーバー ターミナルbash
sudo nano /etc/systemd/timesyncd.conf

開くと、次のような行が並んでいます。行頭の # は「この行は無効(コメント)」という印です。このファイルはINI形式で、[Time] がセクション名です。

画面の表示例変更前(抜粋)打ち込むものではなく、表示の例
[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com

#NTP= の行の # を消して有効にし、NTPサーバーを書き込みます。

ファイルの中身/etc/systemd/timesyncd.confiniエディタで書く内容(ターミナルに打ち込まない)
[Time]
NTP=192.168.100.1

保存(Ctrl+O → Enter)して終了(Ctrl+X)したら、時刻合わせを有効にし、サービスを再起動して設定を読み込ませます。

Ubuntuサーバー ターミナルbash
sudo timedatectl set-ntp true
sudo systemctl restart systemd-timesyncd
systemctl status systemd-timesyncd
timedatectl show-timesync --all

設定が終わったら、手順7の journalctl -u systemd-timesyncd -n 30 をもう一度実行し、192.168.100.1 と通信した記録を確かめておきます。エビデンス4の撮影ポイント撮影ポイント エビデンス4手順8で時刻合わせを設定し、サービスを再起動したあとで journalctl -u systemd-timesyncd -n 30 を実行した直後。Contacted time server 192.168.100.1:123 のような行が写っていると、設定が効いた証拠として説明しやすい(手順7の時点で撮ってもよい)。エビデンス一覧の項目へ移動 ↓

設定は、サービスを再起動したときに読み込まれます。ファイルを書き換えただけでは反映されないことを覚えておきましょう(ほかのサービスでも同じです)。確認には timedatectl status も使います。

画面の表示例timedatectl status の表示例打ち込むものではなく、表示の例
               Local time: Mon 2026-09-28 01:30:00 UTC
           Universal time: Mon 2026-09-28 01:30:00 UTC
                 RTC time: Mon 2026-09-28 01:30:00
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

こうなればOK

System clock synchronized: yes と NTP service: active になっていれば同期できています。エビデンス6の撮影ポイント撮影ポイント エビデンス6手順8の設定のあと timedatectl status を実行し、System clock synchronized: yes と NTP service: active が表示された時点で撮る。同期には少し時間がかかるので、no のときは数十秒待って実行し直す。エビデンス一覧の項目へ移動 ↓timedatectl show-timesync --all の ServerName= や ServerAddress= が 192.168.100.1 なら、指定したサーバーを使っています。

時刻が9時間ずれて見える

Time zone: Etc/UTC と表示されている場合、画面の時刻は世界の基準時刻(UTC)です。日本時間より9時間遅れて見えますが、時計そのものは正しく合っています。タイムゾーンを変えるかどうかは授業の指示に従ってください。考察のヒント時刻合わせの意義は、「時計がずれていたら何が困るか」から考えると書きやすくなります(ログの順番、証明書の有効期限、時刻を使う認証)。表示のずれ(タイムゾーン)と、時計そのものの正しさ(同期)は別の話である点も押さえておきましょう。

手順 9Ubuntuサーバー ターミナル

ソフトウェアを最新にする

カタログを取り寄せ、入っているソフトを新しい版に入れ替え、不要になった部品を片付けます(update と upgrade の違い)。

Ubuntuサーバー ターミナルbash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
sudo管理者の権限で
aptパッケージ管理ツールに
upgrade新しい版への入れ替えを頼む
-y「続けますか?」に自動で yes と答える

更新の数によっては数分かかります。最後に X upgraded, Y newly installed のような集計が出るので、何個が更新されたかをメモしておくと、レポートの結果や課題2の材料になります。エビデンス2の撮影ポイント撮影ポイント エビデンス2手順9の sudo apt upgrade -y が終わった直後。最後の X upgraded, Y newly installed … の集計行が画面に残っているうちに撮る。撮り逃したら、あとで sudo apt update を実行し、All packages are up to date. と表示された画面でもよい。エビデンス一覧の項目へ移動 ↓考察のヒント更新された件数は、インストール直後でも更新がたまっていたことを示す「結果」です。課題2では、この数を結果として示したうえで、その中に安全のための修正(脆弱性の修正)が含まれうることを「考察」で論じると、結果と考察がつながります。

途中で出てくるかもしれない表示

  • Could not get lock /var/lib/dpkg/lock-frontend:起動直後は、Ubuntuが裏で自動更新をしていることがあります。数分待ってからやり直します
  • 「Which services should be restarted?」という色つきの画面:更新したソフトを使っているサービスを再起動するかの確認です。基本はそのまま Enter(OK)で進めます
  • *** System restart required ***:カーネルなどが更新され、再起動が必要という意味です。区切りのよいところで sudo reboot します
手順 10Ubuntuサーバー ターミナル

sudo の設定を確認する

自分のユーザーがsudoで管理者の操作をできることと、その設定がどこに書いてあるかを確かめます。

Ubuntuサーバー ターミナルbash
sudo -l
id
sudo visudo
画面の表示例sudo -l の表示例打ち込むものではなく、表示の例
User t3admin may run the following commands on t3lab-07:
    (ALL : ALL) ALL

sudo -l は「自分が sudo で何をしてよいか」の一覧です。エビデンス7の撮影ポイント撮影ポイント エビデンス7手順10で sudo -l を実行した直後。(ALL : ALL) ALL の行が見えるように撮る。続けて開く sudo visudo のエディタの画面ではない。エビデンス一覧の項目へ移動 ↓id は自分のユーザー番号と、所属しているグループを表示します。グループの中に 27(sudo) があれば、sudoグループの一員です。考察のヒント課題3で root と比べるときは、①打ち間違えたときの被害の大きさ、②アカウントが乗っ取られたときの被害、③あとから「誰が・いつ・何をしたか」を追えるか、の3点で比べると整理しやすくなります(最小権限の原則)。

sudo visudo を実行すると、sudoを誰に許すかの設定ファイル(sudoers と visudo)がエディタで開きます。次の行を探して読んでください。

%sudosudoグループの人は
ALL=どの機械の上でも
(ALL:ALL)どのユーザー・グループとしても
ALLどのコマンドでも実行してよい

読むだけで、書き換えない

このファイルを壊すと、sudo が使えなくなり、自分では直せなくなります。確認したら何も変更せずに Ctrl+X で閉じます。うっかり文字を打ってしまったら、「Save modified buffer?」に N と答えます。

手順 11Webブラウザ(Proxmox)

QEMU Guest Agentを有効にする

QEMU Guest Agentは、仮想マシンの中からProxmoxへ情報を伝える小さな連絡係です。これがあると、ProxmoxのVMの「概要」画面にIPアドレスが表示されたり、Proxmoxからの「シャットダウン」が確実に伝わったりします。まずProxmox側で受け入れる準備をします。

VMの「オプション」(Options)を開き、「QEMU Guest Agent」を選んで「編集」から有効にします。

この設定は、VMの電源を一度完全に切ってから入れ直したときに反映されます(Ubuntuの中での再起動では反映されないことがあります)。手順12のあとにうまく動かなければ、sudo shutdown -h now で止めてから「開始」してください。

手順 12Ubuntuサーバー ターミナル

QEMU Guest Agentを入れる

Ubuntu側に連絡係のプログラムを入れて起動します。

Ubuntuサーバー ターミナルbash
sudo apt install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
systemctl status qemu-guest-agent

enable --now は「自動起動を有効にし、今すぐ起動もする」という意味です。このサービスでは、enable のときに「The unit files have no installation config」のような説明が出ることがありますが、仮想の部品が見つかったときに自動で起動する仕組みのサービスなので、気にしなくてかまいません。

こうなればOK

Active: active (running) になり、ProxmoxのVMの「概要」画面にIPアドレスが表示されます。failed やタイムアウトになる場合は、手順11の設定がまだ反映されていないので、いったん電源を切ってから入れ直します。

手順 13Ubuntuサーバー ターミナル

今のネットワーク状態を見る

インストール時にDHCPでもらったIPアドレスを確かめます。

Ubuntuサーバー ターミナルbash
ip a
画面の表示例表示例(固定する前)打ち込むものではなく、表示の例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.57/24 metric 100 brd 192.168.100.255 scope global dynamic ens18
lo
自分自身を指す特別な出入口(127.0.0.1)
ens18
ネットワークにつながる部品(NIC)の名前。手順14の設定ファイルで使う
inet …/24
今のIPv4アドレスとプレフィックス長
dynamic
DHCPで配られた一時的なアドレスであることを示す。固定すると消える
link/ether
部品そのものに付いた番号(MACアドレス)

表示例の 192.168.100.57 は仮の値です。実際にはDHCPで配られた番号が出ます。

手順 14Ubuntuサーバー ターミナル

IPアドレスを固定する

Netplanの設定ファイルを作り、IPアドレス・ゲートウェイ・DNSサーバーを手で決めて固定します。考察のヒントDHCPで配られる番号は変わることがありますが、サーバーは利用者がいつも同じ住所で見つけられる必要があります。固定IPにする理由と、同じ番号を2台が使うと通信できなくなることは、ネットワーク設定を考察するときの軸になります。

1. 元の設定ファイルをコピーする

Ubuntuサーバー ターミナルbash
cd /etc/netplan
ls
sudo cp 50-cloud-init.yaml 99-custom.yaml

まず ls で、元のファイルの名前が 50-cloud-init.yaml であることを確かめます(環境によっては別の名前のこともあります)。元のファイルは書き換えずに残し、コピーした 99-custom.yaml のほうを編集します。Netplanは /etc/netplan のファイルを名前の順に読み、同じ項目は後から読んだファイルの内容が勝ちます。99 で始まる名前にしたのは、最後に読まれて確実に優先されるようにするためです。

2. 設定ファイルを編集する

Ubuntuサーバー ターミナルbash
sudo nano /etc/netplan/99-custom.yaml

中身を次のように書き換えます。IPアドレスの xxx は100+学生番号の下2桁です(設定済みなら、あなたの値で表示されています)。

ファイルの中身/etc/netplan/99-custom.yamlyamlエディタで書く内容(ターミナルに打ち込まない)
network:
  renderer: networkd
  ethernets:
    ens18:  # NIC device name.
      addresses:
        - 192.168.100.xxx/24 # IP Address
      dhcp4: false           # Disable DHCP
      routes:                # Gateway configuration
        - to: default        # Any address should go to this gateway.
          via: 192.168.100.1 # Gateway server address
      nameservers:
        addresses: [192.168.100.1] # List of nameservers.

YAMLの読み方

このファイルはYAMLという書式で、行頭のスペースの数で「どの項目の中にあるか」を表します。字下げがずれると意味が変わったり、エラーになったりします。

表7Netplan設定ファイルの各行の意味
行意味
network:ここからネットワークの設定
renderer: networkd設定を実際に反映する係として systemd-networkd を使う
ethernets: → ens18:有線の部品のうち、ens18 についての設定(手順13で確かめた名前)
addresses: - 192.168.100.xxx/24このIPアドレスを使う。- は「一覧の1項目」の印
dhcp4: falseIPv4のアドレスをDHCPでもらわない
routes: - to: default via: 192.168.100.1行き先が決まっていない通信(=外の世界宛て)は、すべてデフォルトゲートウェイ 192.168.100.1 へ渡す
nameservers: addresses: [192.168.100.1]名前の問い合わせ(DNS)は 192.168.100.1 にする。[ ] も一覧の書き方
# …コメント。書かなくても動作は変わらない

字下げはスペースで、数をそろえる

  • タブ文字は使えません。スペースで字下げします
  • 同じ階層の行は、同じ数のスペースで始めます(この例では2つずつ深くなる)
  • 名前: 値 のコロンの後ろには半角スペースが要ります
  • コピー元の中身に手を加えるより、いったん全部消して打ち直すほうが字下げが混ざりません(nanoでは Ctrl+K で1行ずつ消せます)。コピー元に version: 2 という行があれば、renderer と同じ深さで残しておいてかまいません

3. 反映して確かめる

指導書では、反映のコマンドは「結果と考察」の確認コマンドの中に入っています。

Ubuntuサーバー ターミナルbash
sudo netplan apply
ip a
ping -c 3 www.google.co.jp

こうなればOK

ip a の ens18 に 192.168.100.xxx/24 が表示され、dynamic の文字が消えています。エビデンス8の撮影ポイント撮影ポイント エビデンス8手順14で sudo netplan apply のあとに ip a を実行した直後。ens18 に 192.168.100.xxx/24 が表示され、dynamic の文字がないことが分かるように、ターミナルの画面全体を撮る。エビデンス一覧の項目へ移動 ↓ping で3回とも応答(64 bytes from …)が返れば、ゲートウェイの先のインターネットまで届き、名前の問い合わせもできています。

よくある表示と対処

  • Permissions for /etc/netplan/99-custom.yaml are too open:ファイルをほかの人も読める状態になっているという警告です。sudo chmod 600 /etc/netplan/99-custom.yaml で所有者だけが読めるようにします
  • Error in network definition や行番号つきのエラー:字下げやコロンのミスです。表示された行の周りを見直します
  • ping: www.google.co.jp: Temporary failure in name resolution:名前の問い合わせができていません。nameservers の行を見直します
  • Network is unreachable:外への道が分かっていません。routes の行と、ip route の表示に default via 192.168.100.1 があるかを確かめます

反映を試してうまくいかなかったときに自動で元に戻してほしい場合は、sudo netplan apply の代わりに sudo netplan try も使えます。確認のメッセージに Enter を押さなければ、約2分で元の設定に戻ります。

hostsファイルについて(手順に書かれていない項目)

目的にはあるが、手順がない

指導書の1日目の目的には「hostsファイル設定」がありますが、具体的な手順は書かれていません。また付録2には「1日目で設定した hosts を前提に」とあります。何をどこに書くかは授業の指示に従ってください。ここでは、指示を理解するための予備知識をまとめます。

hostsファイルは、名前とIPアドレスの対応を、そのコンピュータの中だけで書いておくメモ帳のようなファイルです。DNSに問い合わせるより先に読まれます。書いた内容はそのファイルがある機械にだけ効き、ほかの機械には影響しません。

表82つのhostsファイル
場所効く範囲編集のしかた
Ubuntu:/etc/hostsUbuntuのサーバーの中だけsudo nano /etc/hosts
Windows:C:\Windows\System32\drivers\etc\hostsそのWindows PCの中だけ(ブラウザで名前を使って開くときなど)管理者として起動したメモ帳などで開く

書き方は「IPアドレス 名前 別名…」を1行に並べるだけです。Ubuntuの /etc/hosts には、最初から次のような行があります。

画面の表示例Ubuntu の /etc/hosts(初期状態の例)打ち込むものではなく、表示の例
127.0.0.1 localhost
127.0.1.1 t3lab-07

たとえば、4日目にWindowsのブラウザで http://www.t3.metro-cit.internal を開けるようにするには、Windows側がこの名前を自分のサーバーのIPアドレスに結びつけられる必要があります。その方法の1つが、Windowsのhostsファイルに次のような1行を書くことです(もう1つの方法が、付録2で作るDNSです)。

ファイルの中身hostsファイルに書く行の例textエディタで書く内容(ターミナルに打ち込まない)
192.168.100.xxx  www.t3.metro-cit.internal

結果と考察のための確認コマンド

指導書では、設定が終わったら次のコマンドをまとめて実行し、正しく反映されていることを確かめます。それぞれが何を確かめているのかを押さえておくと、レポートの「結果」を書きやすくなります。

Ubuntuサーバー ターミナルbash
sudo apt update
journalctl -u systemd-timesyncd -n 30
dmesg | tail -n 30
timedatectl status
systemctl status systemd-timesyncd
sudo -l
ip a
systemctl status qemu-guest-agent
sudo netplan apply
ping -c 3 www.google.co.jp
表9確認コマンドで分かること
コマンド確かめていること
sudo apt updateネットワーク経由でパッケージの配布元に届き、更新が済んでいる(All packages are up to date. なら最新)
journalctl -u systemd-timesyncd -n 30時刻合わせのサービスの記録
dmesg | tail -n 30起動時のカーネルのメッセージ(必要なら sudo)
timedatectl status、systemctl status systemd-timesyncd時刻が同期している
sudo -lsudo の権限がある
ip a固定したIPアドレスになっている
systemctl status qemu-guest-agentGuest Agentが動いている
sudo netplan apply、ping -c 3 www.google.co.jpネットワーク設定が反映され、外まで通信できる

エビデンス(スクリーンショット8点)

次の8点を撮影し、図としてレポートに入れて説明します。撮れたものにチェックを付けておくと、このブラウザに記録が残ります。撮り方のコツは作図とスクリーンショットを参照してください。

  • ↑ 手順4で撮る
  • ↑ 手順9で撮る
  • ↑ 手順6で撮る
  • ↑ 手順8で撮る
  • ↑ 手順7で撮る
  • ↑ 手順8で撮る
  • ↑ 手順10で撮る
  • ↑ 手順14で撮る

課題を考えるための材料

ここに載せているのは、考えるための知識と観点です。答えの文章ではありません。自分の実験結果と結びつけ、自分の言葉で書いてください。事実を書くときは、書籍などで確かめて参考文献に挙げます。

課題1サーバー用OSとしてLinux系(Unix系)が多く使われる理由を、歴史的背景やネットワーク機能との親和性から説明せよ。

問いの分解

「歴史的背景」と「ネットワーク機能との親和性」の2つの観点が指定されています。どちらか一方だけで終わらないようにします。

知っておくとよい事実

  • Unixは1969年にアメリカのAT&Tベル研究所で開発が始まり、1970年代にC言語で書き直されたことで、別の種類のコンピュータへ移しやすくなった
  • カリフォルニア大学バークレー校で作られたUnix(BSD)は、インターネットの通信方式であるTCP/IPをOSに組み込み(1983年の4.2BSD)、ネットワークのプログラムを書くための共通の手段を広めた
  • メール・Web・DNSなど、インターネットの基本的なサーバーソフトの多くがUnixの上で生まれ、育った(付録2で使うBINDもその1つ)
  • Linuxは1991年に開発が始まったUnix系のOSで、ソースコードが公開され、無料で使い、改良できる
  • Unix系のOSは、もともと多くの人が同時に使う前提で作られており、ユーザーごとの権限の仕組みや、文字だけで遠隔から操作する仕組みを持っている

考える観点

  • サーバーに求められる条件(長く止まらない、遠隔から管理できる、安い、安全、自動化しやすい、など)は何か
  • その条件を、Unix系のOSの生まれ方や設計思想がどう満たしてきたか
  • 今日の実験で、GUIなしで、コマンドと設定ファイルだけで管理できたことは何を示しているか
課題2OSやソフトウェアのアップデートを実施することには、どのような利点があるか。セキュリティと保守運用の観点から説明せよ。

問いの分解

「セキュリティ」と「保守運用」の2つの観点で、それぞれ利点を挙げます。

知っておくとよい事実

  • 更新には、脆弱性(悪用されうる欠陥)の修正、不具合の修正、機能の追加や改善が含まれる
  • 脆弱性の情報は公表されるため、修正版が出たあとも更新しないでいると、攻撃者に知られた弱点を抱えたままになる
  • UbuntuのLTS版は、決まった期間、安全のための更新が提供される。その期間中に更新を当て続けることが前提になっている
  • インストール直後でも、ISOが作られた後に出た更新がたまっている(手順9の集計がその証拠になる)

考える観点

  • 更新しないと、どんな危険が時間とともに増えていくか
  • 運用する側にとって、不具合の修正や、サポートされる版を使い続けることの意味は何か
  • 更新そのものにも「動かなくなる」などの危険はあるか。あるなら、スナップショットや事前の確認はどんな役に立つか(利点だけでなく、この点まで書くと考察に深みが出る)
課題3sudo を用いた権限管理が、常時rootで作業する方法と比べて安全である理由を説明せよ。

問いの分解

「常にrootで作業する」場合と比べる形で書くことが求められています。比べる相手を明確にします。

知っておくとよい事実

  • rootはシステムのあらゆる操作ができ、制限がかからない
  • sudoは、一般ユーザーが、コマンド単位で一時的に管理者の権限を使う仕組みで、使うときに本人のパスワードを求める
  • sudoの利用は、誰が・いつ・何を実行したかが記録に残る
  • sudoersの設定で、誰にどこまでの操作を許すかを細かく決められる(手順10で見た %sudo ALL=(ALL:ALL) ALL はその一例)
  • Ubuntuでは、rootで直接ログインできないように初期設定されている

考える観点

  • 打ち間違いや勘違いのとき、被害の大きさはどう違うか(最小権限の原則)
  • ユーザーのアカウントが乗っ取られた場合、または複数人で管理する場合に、どちらが安全か
  • 記録が残ることは、問題が起きたあとの調査にどう役立つか

あなたの番号を設定

学生番号の下2桁を入れると、このサイトのコマンド例に出てくるIPアドレスやVM IDが、あなた用の値に置き換わります。値はこのブラウザの中だけに保存され、どこにも送信されません。