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 (自分の学生番号に読み替え) でログインすること.