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 のバージョンアップを行う. バージョンアップの手順は以下の通りである.

  1. 現在のバージョンにおいて, パッケージを最新の状態へ更新する. (apt-get update; apt-get upgrade)
  2. apt リストの書き換え. /etc/apt/sources.list 内の stretch を buster に書き換える.
  3. パッケージを入れ替えとバージョンアップ (apt-get update; apt-get upgrade; apt-get dist-upgrade)
  4. 再起動

パッケージを最新状態へ

インストールされているパッケージ (ソフトウェア) の更新を行う. パッケージの更新の際に使うリポジトリは既に /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 ができるかを確認してもらうこと.