2023 年度 データベース II : Debian の基本セットアップ
はじめに
本演習では仮想化サーバ (Linux + KVM) 上で,Linux の仮想マシンを立ち上げることにする.
なお標準的な Linux コマンドの解説は, 例えば LPI-Japan「Linux 標準教科書」 を参照のこと.
仮想マシンのインストール
仮想化サーバ (10.176.0.201--203) にログインして作業する.具体的な割り振りは講義の際に指示をする.
演習室の Windows にインストールされている putty などを用いて仮想化サーバにログインする. ユーザ名とパスワードは学校の演習用 PC のそれと同じである (共に,LDAP という仕組みを使っている).
仮想化サーバにログイン後,以下のコマンドを用いて自分の仮想マシンを構築する.なお,XXXX の部分は 自分の学生番号に置き換えること(2 箇所あることに注意!).また,"\" は継続行を表す印であることに注意すること (以下のコマンドは 1 行で書くこと). 最初に "sudo -u stu -s" として stu ユーザ権限に切り替えているのは, この仮想化サーバで仮想マシンを構築できるのはユーザ stu に限定されているためである.
$ sudo -u stu -s stu$ virt-install \ --name XXXX \ --location http://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ \ --os-variant debian10 \ --disk size=32,path=/work/vm/XXXX.img \ --memory 3000 \ --graphics none \ --vcpus 1 \ --console pty,target_type=serial --extra-args "console=ttyS0"
virt-install のオプションは以下のような意味になっている.
--name XXXX : 仮想マシンの名前 --location http://deb.debian.org/debian/dists/buster/main/installer-amd64/ : インストーラーのイメージの URL --os-variant debian10 : OS の種類.今回は Debian を入れる. --disk size=32,path=/work/vm/XXXX.img : 仮想マシンのディスク容量 (GB 単位) と仮想マシンのイメージのパス --memory 4000 : 割り当てメモリ容量 (MB 単位) --graphics none : GPU の割り当て (割り当てない場合は none) --vcpus 1 : CPU の割り当て --console pty,target_type=serial --extra-args "console=ttyS0" : コンソール (入出力) 設定. 付けておかないとインストール時にキー操作できない.
途中で多くの選択肢があるが,以下のように選択していけばよい.
言語設定
ネットワーク設定
ミラーサーバの設定
パスワード設定
ディスクパーティション設定
インストールするソフトウェア (パッケージ) の関係
ブートローダー
インストール後
インストールが終わると自動的に仮想マシンが起動する.
Loading Linux 5.10.0-23-amd64 ... Loading initial ramdisk ... Debian GNU/Linux 10 iot-48 ttyS0 iot-47 login:
自分のユーザでログインする.ログインしたのち,SSH サーバが起動しているかの確認を行う. ps コマンドで sshd という行が存在すれば OK である.
$ ps aux | grep ssh root 382 0.0 0.1 13356 7620 ? Ss 11:36 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
もし,SSH サーバが起動していない場合は,インストール時に SSH サーバのインストールに チェックを入れなかったことが考えられる.以降の作業を行うためには SSH が必須であるため, 手動で SSH サーバをインストールする.
$ su # apt install openssh-server
インストールが終わったら再度確認を行う.
# ps aux | grep ssh root 382 0.0 0.1 13356 7620 ? Ss 11:36 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
SSH サーバの起動が確認できたらログアウトする.
# exit $ exit
その後に,
Ctrl-] (コントロールキーと ] キーを一緒に押す)
を押して,仮想マシンから抜け,さらにサーバ (10.176.0.20X) からログアウトする.
sugiymki@esx2:~$ exit ログアウト Connection to 10.176.0.206 closed.
仮想マシンの基本設定
ひとたび仮想マシンが立ち上がれば,仮想化サーバ (10.176.0.201-203) にいちいちアクセスする必要は無くなる. 演習室の PC などから,仮想マシン (10.176.0.1XX (XXは学生番号の末尾 2 桁)) に直接アクセスできる.
演習室の Windows から putty で仮想マシンにアクセスしてみよ. 管理者 (root) ではリモートアクセスできないので,ログインには自分のアカウント (学生番号) を使うこと.
一般ユーザから管理者への切り替え
putty などから仮想マシンにアクセスするのは一般ユーザ (学生番号) 権限となるが, 設定作業をする場合は管理者権限に移行することが必要となる.
- 管理者 (root) が 1 人のみで,root のパスワードを把握している場合は,su コマンドを使って一般ユーザから管理者への切り替えができる.
- 管理者が複数いる場合は,sudo コマンドを使って管理者権限へ切り替える.管理者パスワードを複数人で共有してはいけない.
本演習では,まずは su コマンドで管理者権限への切り替えを行い,sudo コマンドのインストールといったいくつかの設定を行うことにする. その後,sudo コマンドの設定を行い,以後は sudo を使って管理者権限への切り替えを行うことにする.
$ su Password: <-- root のパスワードを入力. パスワードを入れてもコンソールには何も表示されないことに注意 #
なお,一般ユーザと管理者ではコマンドプロンプトが異なり,一般ユーザは "$", 管理者は "#" である.
su で管理者 (root) に切り替えた時,コマンドサーチパスに /sbin, /usr/sbin が 含まれないことがある (一般ユーザの環境変数がそのまま引き継がれる). そのため,環境変数 PATH を設定しておく. 以下のように書くと,現在の PATH に /sbin と /usr/sbin を追加することができる. /sbin, /usr/sbin は管理者用のコマンドが置かれているディレクトリである.
# echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games # export PATH=/usr/sbin:/sbin:$PATH # echo $PATH /usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
ロケール (日本語) 環境の設定
# dpkg-reconfigure locales (1) 頑張って,ja_JP.UTF-8 を探して,スペースで * を付ける. (2) default locale の選択画面では,ja_JP.UTF-8 を選ぶ
設定を有効にするために,一度ログアウトしてからログインしてみる. ログインした後に環境変数 LANG を確認すると,ja_JP.UTF8 に切り替わったことが分かる (なお,locales を設定する前は LANG は C (英語)となっていた).
$ echo $LANG ja_JP.UTF-8
ソフトウェア (パッケージ) のインストール
Debian ではソフトウェアは「パッケージ」という単位で管理される. パッケージを最新版に更新するためには, apt-get update で最新パッケージ情報を取得し, apt-get upgrade で更新されたパッケージのみをダウンロード・インストールする.
apt-get update でパッケージ情報を更新する.
$ su # export PATH=/usr/sbin:/sbin:$PATH # 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 install sudo build-essential net-tools dnsutils emacs lv ruby
ここでインストールしたパッケージは以下の通り.
sudo : 一般ユーザが管理者権限を用いる場合に使うコマンド build-essential : C コンパイラなど基本的なコンパイラが提供される. net-tools, dnsutils : ネットワーク系の便利なコマンドが提供される emacs : エディタ lv : 便利なページャー ruby : スクリプト言語
ユーザの追加
インストール時に自分のユーザアカウントを作ったので, ここでは教員のユーザアカウントの作成を行う.
教員のユーザアカウントとして,adduser コマンドで sugiyama を作成する. ここではパスワードを設定しないので, --disabled-password オプションを付けて adduser コマンドを実行する. フルネームには SUGIYAMA Ko-ichiro と入れること.
# /sbin/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 コマンドの設定ファイル (/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 をグループ sudo に加える.
# /sbin/usermod -aG sudo hogehoge # /sbin/usermod -aG sudo sugiyama
確認として, /etc/group の中身を確認する.
# grep sudo /etc/group sudo:x:27:hogehoge,sugiyama
ユーザ hogehoge で sudo できることを確認する. まずはユーザの切り替えをする.
# whoami root (現在は root であることがわかる) # exit $ whoami hogehoge (現在は hogehoge であることがわかる) $ su hogehoge (自分自身でログインし直す. usermod の設定が反映されるのがログインした時なので) $ groups hogehoge sudo (グループとして, hogehoge と sudo に入っていることがわかる) $ cd (ホームディレクトリに移動)
次に,管理者権限を使う場合は sudo -s コマンドを実行する. プロンプトが $ から # へ変わることを確認する. sudo コマンドを初めて実行するときは, 管理者権限を使う心得が表示されるので, 心に刻むこと.
$ sudo -s (hogehoge から管理者に移行) あなたはシステム管理者から通常の講習を受けたはずです。 これは通常、以下の3点に要約されます: #1) 他人のプライバシーを尊重すること。 #2) タイプする前に考えること。 #3) 大いなる力には大いなる責任が伴うこと。 [sudo] hogehoge のパスワード: <-- 「自分」のパスワードを入力. # (管理者権限となったのでプロンプトが # に変わる)
教員アカウントでログイン可能とするための設定
教員が各 VM にログインできるようにするために, 公開鍵をしかるべき場所に設定する. ファイル/ディレクトリの所有者とパーミッションを適切に設定すること.
# 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
再起動
# reboot
再起動後は, ユーザ hogehoge (自分の学生番号に読み替え) でログインすること.