2019 年度 OSS リテラシ 3 : Debian の基本セットアップ
はじめに
本演習ではサーバとして VMware 上の仮想マシンを用いる. 仮想マシンは既に Debian GNU/Linux 9 の基本インストールが終了している.
なお, 初期状態での仮想マシンの IP, ユーザ名などは演習時間中に周知する.
仮想マシンへのログイン
演習で周知された IP, ユーザ名 (jxxxx), パスワードを用いて仮想マシンへログインせよ. 演習室の Windows の putty を用いること.
基本セットアップ
sudo コマンドをインストールする前に root 権限を使う場合は,
$ su
として, root ユーザに切り替えること. 途中でパスワードが聞かれるが, そこでは自分のパスワードでなく root のパスワードを入力すること.
ホスト名の変更
まずは現在のホスト名を表示する.
# hostname jxxxx
以下のように変更する. ここで<学生生番号>は適宜修正すること.
# hostnamectl set-hostname <学生番号> # hostname <学生番号>
このままでは後にワーニングが出ることがある. /etc/hosts 内の jxxxx を学生番号に修正すること.
# vi /etc/hosts 127.0.0.1 localhost 127.0.0.1 <学生番号>.epi.it.matsue-ct.jp <学生番号> (この行を修正)
ネットワークの設定: 固定 IP の利用
設定ファイル /etc/network/interfaces を設定する. 利用する IP は 10.176.0.0/24 とする. IP の最後の 8 byte は自分の機材の番号 (iot-YY の YY) + 100 とする.
# cd /etc/network # cp interfaces interfaces.bk (バックアップ作成) # vi interfaces # The primary network interface allow-hotplug ens192 #iface ens192 inet dhcp iface ens192 inet static address 10.176.0.xxx (xxx は自分の機材の番号 + 100) netmask 255.255.255.0 gateway 10.176.0.254 dns-nameservers 10.0.0.7 10.0.0.1
設定が終わったら再起動して設定を有効にする.
# /sbin/reboot
再起動後の確認
再起動後に再度 VM へ ssh でログインする. その際に使う IP アドレスは /etc/network/interfaces に設定した IP アドレス (10.176.0.xxx, xxx は自分の機材の番号 +100) にすること.
IP アドレスの設定を間違えてしまった場合は, 接続ができなくなる. 万が一, 接続できなくなった場合は, 教員へ申し出ること.
Debian のバージョンアップ (Debian の9 -> Debian 10)
2019/07/06 に Debian のメジャーバージョンが上がっている. ここでは Debian のバージョンアップを行う. バージョンアップの手順は以下の通りである.
- 現在のバージョンにおいて, パッケージを最新の状態へ更新する. (apt-get update; apt-get upgrade)
- apt リストの書き換え. /etc/apt/sources.list 内の stretch を buster に書き換える.
- パッケージを入れ替えとバージョンアップ (apt-get update; apt-get upgrade; apt-get dist-upgrade)
- 再起動
パッケージを最新状態へ
インストールされているパッケージ (ソフトウェア) の更新を行う. パッケージの更新の際に使うリポジトリは既に /etc/apt/sources.list に記述されている.
# apt-get update 無視:1 http://ftp.jp.debian.org/debian stretch InRelease 取得:2 http://ftp.jp.debian.org/debian stretch-updates InRelease [91.0 kB] ヒット:3 http://ftp.jp.debian.org/debian stretch Release ヒット:4 http://security.debian.org/debian-security stretch/updates InRelease 91.0 kB を 0秒 で取得しました (175 kB/s) パッケージリストを読み込んでいます... 完了
2019/10/01 現在, 以下のような apt-get update を行なった時に以下のようなエラーが 発生することがある.
エラー:5 http://ftp.jp.debian.org/debian stretch InRelease 'ftp.jp.debian.org' が一時的に解決できません
エラーが出た場合は, 利用するリポジトリを変更すると良い. ftp.jp.debian.org は国内のミラーサーバの別名であるが, その実態でなんらかの問題が発生すると繋がらなくなる. 以下では, 国内のミラーサイト www.gfd-dennou.org を使うように 陽に指定する (ftp.jp.debian.org を www.gfd-dennou.org で書き換える).
# vi /etc/apt/sources.list #deb http://ftp.jp.debian.org/debian/ stretch main #deb-src http://ftp.jp.debian.org/debian/ stretch main deb http://www.gfd-dennou.org/debian/ stretch main deb-src http://www.gfd-dennou.org/debian/ stretch main #deb http://ftp.jp.debian.org/debian/ stretch-updates main #deb-src http://ftp.jp.debian.org/debian/ stretch-updates main deb http://www.gfd-dennou.org/debian/ stretch-updates main deb-src http://www.gfd-dennou.org/debian/ stretch-updates main
再度, apt-get update でパッケージ情報を更新する.
# apt-get update 無視:1 http://www.gfd-dennou.org/debian stretch InRelease ヒット:2 http://www.gfd-dennou.org/debian stretch-updates InRelease ヒット:3 http://www.gfd-dennou.org/debian stretch Release ヒット:5 http://security.debian.org/debian-security stretch/updates InRelease パッケージリストを読み込んでいます... 完了
パッケージを更新する.
# apt-get upgrade パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 アップグレードパッケージを検出しています... 完了 以下のパッケージは保留されます: linux-image-amd64 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
apt リストの書き換え.
/etc/apt/sources.list 内の stretch を buster に書き換える.
# vi /etc/apt/sources.list (以下のように書き換える) deb http://www.gfd-dennou.org/debian/ buster main deb-src http://www.gfd-dennou.org/debian/ buster main deb http://security.debian.org/debian-security buster/updates main deb-src http://security.debian.org/debian-security buster/updates main deb http://www.gfd-dennou.org/debian/ buster-updates main deb-src http://www.gfd-dennou.org/debian/ buster-updates main
パッケージを入れ替えとバージョンアップ
以下の順序でコマンドを実行.
# apt-get update ... (略)... # apt-get upgrade ... (中略)... 「apt-listchanges: ニュース」は "q" で終了させる. いくつか質問が表示されるが, 全てデフォルトの値のままで良い. # apt-get dist-upgrade ... (中略)... 「apt-listchanges: ニュース」は "q" で終了させる. いくつか質問が表示されるが, 全てデフォルトの値のままで良い.
再起動
# /sbin/reboot
確認
ログインしたときのメッセージをよく見ると, 以下のように Debian 10 であることが表示されている.
Linux sugiyama 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20) x86_64 ^^^^^^^^^^^^^^^^^^^^^^^^^
ユーザ管理
ここでは自分自身と教員のユーザアカウントを作成し, 両名を sudo コマンドで管理者権限を使えるように設定する. Linux では管理者権限を用いる場合に sudo コマンドを使うのが一般的である. 複数人でシステムを管理するのが普通であり, root のパスワードを皆で共有することは推奨されない.
以下の例では自分自身のアカウント名を hogehoge としているが, 適宜希望アカウント名で置き換えること.
なお標準的な Linux コマンドの解説は, 例えば LPI-Japan「Linux 標準教科書」 を参照のこと.
自分のユーザアカウントの作成
まずは root のパスワードを変更する.
$ su # passwd 新しい UNIX パスワードを入力してください: (キーボード入力しても何も表示されない) 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました # exit $
現在のアカウント名を確認してみよう. 現在のユーザが jxxxx であることが確認できる.
$ whoami jxxxx
su で root になる際, 環境変数の設定がうまくいかず, 管理者コマンドへの PATH が通っていないことがある. その場合は export コマンドで環境変数 PATH を設定しなおす.
$ su # export PATH=$PATH:/sbin:/usr/sbin
自分のユーザアカウントを adduser コマンドで作成する. 以下ではアカウント名を hogehoge としているが, 各自の好きな文字列で置き換えること (学籍番号は使わない). ターミナルを起動し, adduser コマンドでユーザを作成する. 途中で名前や部屋番号など 聞かれるが, フルネームのみ真面目に入力すれば良い.
# adduser hogehoge (hogehoge の部分は適宜変更すること) ユーザ `hogehoge' を追加しています... 新しいグループ `hogehoge' (1001) を追加しています... 新しいユーザ `hogehoge' (1001) をグループ `hogehoge' として追加しています... ホームディレクトリ `/home/hogehoge' を作成しています... `/etc/skel' からファイルをコピーしています... 新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました hogehoge のユーザ情報を変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください フルネーム []: SUGIYAMA Ko-ichiro (自分の名前を入れる) 部屋番号 []: 職場電話番号 []: 自宅電話番号 []: その他 []: 以上で正しいですか? [Y/n]
教員のユーザアカウントの作成
教員のユーザアカウント (sugiyama) を作成する. ここではパスワードを設定しないので, --disabled-password オプションを付けて adduser コマンドを実行する. フルネームには SUGIYAMA Ko-ichiro と入れること.
# adduser --disabled-password sugiyama ユーザ `sugiyama' を追加しています... 新しいグループ `sugiyama' (1002) を追加しています... 新しいユーザ `sugiyama' (1002) をグループ `sugiyama' として追加しています... ホームディレクトリ `/home/sugiyama' を作成しています... `/etc/skel' からファイルをコピーしています... sugiyama のユーザ情報を変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください フルネーム []: SUGIYAMA Ko-ichiro 部屋番号 []: 職場電話番号 []: 自宅電話番号 []: その他 []: 以上で正しいですか? [Y/n] Y
管理者権限の設定 (sudo)
Linux で管理者権限を用いる時は, root でログインするのではなく, sudo コマンドを用いるのが一般的である. ラズパイと同様に sudo を使って管理者権限を使えるようにする.
まずは sudo をインストールする.
# apt-get update ...略... # apt-get install sudo ...略...
今回は新たに作成した自分のアカウントと教員のユーザアカウントについて sudo の設定を行う. sudo コマンドの設定ファイル (/etc/sudoers) を確認すると, sudo グループに属するユーザは管理者権限を行使できるようになっていることがわかる. 先頭の "%" はグループを意味するので, 以下の例の "%sudo" は "sudo グループに属するユーザ" という意味である. すなわち, デフォルトで sudo グループに属するユーザは管理者権限を使えるようになっている.
# cat /etc/sudoers (...中略...) # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL (...後略...)
そこで, 新規作成したユーザ hogehoge と sugiyama をグループ netdev と sudo に加える.
# usermod -G netdev,sudo hogehoge # usermod -G netdev,sudo sugiyama
確認として, /etc/group の中身を確認する.
# grep netdev /etc/group netdev:x:108:jxxxx,hogehoge,sugiyama # grep sudo /etc/group sudo:x:27:sugiyama,hogehoge
ユーザ hogehoge で sudo できることを確認する. まずはユーザの切り替えをする.
# whoami root (現在は root であることがわかる) # exit $ whoami jxxxx (現在は jxxxx であることがわかる) $ su hogehoge $ whoami hogehoge (新しく作成したユーザ hogehoge であることがわかる) $ cd (ホームディレクトリに移動)
管理者権限を使う場合は sudo -s コマンドを実行する. プロンプトが $ から # へ変わることを確認する. sudo コマンドを初めて実行するときは, 管理者権限を使う心得が表示されるので, 心に刻むこと.
$ sudo -s (hogehoge から管理者に移行) あなたはシステム管理者から通常の講習を受けたはずです。 これは通常、以下の3点に要約されます: #1) 他人のプライバシーを尊重すること。 #2) タイプする前に考えること。 #3) 大いなる力には大いなる責任が伴うこと。 [sudo] hogehoge のパスワード: # (管理者権限となったのでプロンプトが # に変わる) # exit (管理者から hogehoge へ移行) $
教員アカウントでログイン可能とするための設定
教員が各 VM にログインできるようにするために, 公開鍵をしかるべき場所に設定する. ファイル/ディレクトリの所有者とパーミッションを適切に設定すること.
$ sudo -s # cd /home/sugiyama # mkdir .ssh # chmod 700 .ssh/ (パーミッション変更) # chown sugiyama.sugiyama .ssh/ (所有者・所有グループ変更) # ls -ld .ssh/ (確認) drwx------ 2 sugiyama sugiyama 4096 11月 1 00:23 .ssh/ # vi .ssh/authorized_keys wbt 上に置かれている教員の公開鍵をコピペする. # chmod 600 .ssh/authorized_keys # chown sugiyama.sugiyama .ssh/authorized_keys # ls -l .ssh/authorized_keys -rw------- 1 sugiyama sugiyama 394 12月 4 10:09 .ssh/authorized_keys
教員がパスワードなしで sudo -s できるための設定.
教員が管理のために VM で管理者権限を使えるようにする. 以下のように /etc/sudoers.d 以下にファイルを置き, その中で "NOPASSWD: ALL" としておくと, パスワードなしで sudo -s ができるようになる.
# vi /etc/sudoers.d/010_sugiyama sugiyama ALL=(ALL) NOPASSWD: ALL
デフォルトユーザのパスワードロック
デフォルトのユーザはもう使わないのでパスワードロックする.
# passwd -l jxxxx passwd: パスワード期限切れ情報を変更しました
課題
- 教員にログインと sudo ができるかを確認してもらうこと.