2025 年度 OSS リテラシ 3 : Debian の基本セットアップ

はじめに

本演習では仮想化サーバ (Linux + KVM) 上で立ち上げた Linux の仮想マシン(vm)を 1 人 1 台使ってもらうことにする.仮想マシン(vm) の IP は講義中に連絡する.

なお,標準的な Linux コマンドの解説は, 例えば LPI-Japan「Linux 標準教科書」 を参照のこと.

以下,一般ユーザ権限で実行するコマンドと,管理者権限で実行するコマンドは 先頭の記号で区別する.

$    <-- 一般ユーザ
#    <-- 管理者

仮想マシンの基本設定

自分の担当する仮想マシンに SSH で接続してもらいたい. 演習室の Windows からは,putty や Windows Terminal で仮想マシンにアクセスできる.

一般ユーザから管理者への切り替え

putty などから仮想マシンにアクセスするのは一般ユーザ (学生番号) 権限となるが, 設定作業をする場合は管理者権限に移行することが必要となる.

  • 管理者 (root) が 1 人のみで,root のパスワードを把握している場合は,su コマンドを使って一般ユーザから管理者への切り替えができる.
  • 管理者が複数いる場合は,sudo コマンドを使って管理者権限へ切り替える.管理者パスワードを複数人で共有してはいけない.

本演習では,まずは su コマンドで管理者権限への切り替えを行い,その後に sudo コマンドの設定を行いうことにする.sudo コマンドの設定以降は su コマンドを利用せず,sudo を使って管理者権限への切り替えを行うことにする.

$  su

  Password:    <-- root のパスワードを入力. パスワードを入れてもコンソールには何も表示されないことに注意

# 

なお,一般ユーザと管理者ではコマンドプロンプトが異なり,一般ユーザは "$", 管理者は "#" である.

su コマンドで管理者 (root) へ移行しても,PATH として一般ユーザのそれが引き継がれてしまうので, 管理用コマンドが置かれている /sbin, /usr/sbin にパスを通す.

# export PATH=/sbin:/user/sbin:$PATH

ロケール (日本語) 環境の設定

デフォルトでは言語環境が英語 (C) なので,日本語 (ja_JP.UTF-8) に変更する.

# dpkg-reconfigure locales

    (1) 頑張って,ja_JP.UTF-8 を探して,スペースで * を付ける.
    (2) default locale の選択画面では,ja_JP.UTF-8 を選ぶ

設定を有効になったかを確認するためには,ログインし直す必要がある.そのため確認は後ほど行う.

基本的なソフトウェア (パッケージ) のインストール

Debian ではソフトウェアは「パッケージ」という単位で管理される. パッケージを最新版に更新するためには, apt-get update で最新パッケージ情報を取得し, apt-get upgrade で更新されたパッケージのみをダウンロード・インストールする.

apt-get update でパッケージ情報を更新する.

# apt 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 install sudo build-essential net-tools dnsutils emacs lv ruby

ここでインストールしたパッケージは以下の通り.

sudo : 一般ユーザが管理者権限を用いる場合に使うコマンド
build-essential : C コンパイラなど基本的なコンパイラが提供される.
net-tools, dnsutils  : ネットワーク系の便利なコマンドが提供される
emacs : エディタ
lv : 便利なページャー 
ruby : スクリプト言語

ホスト名 (/etc/hostname) の設定

ホスト名は,iot-XX とする.XX は「IP アドレスの最終オクテッドの数字 - 100」とする.

# hostnamectl set-hostname iot-XX

例えば,IP アドレスが,xx.xx.xx.100 の場合は以下のようにホスト名を設定する.

# hostnamectl set-hostname iot-00

なお,IP アドレスの確認は ifconfig コマンドで実行できる.

# ifconfig

自ホストの名前引き (/etc/hosts) の設定

自ホストの名前引きの設定をする.

# vi /etc/hosts    

  例) 10.100.111.100  iot-00.matsue-ct.ac.jp  iot-00  <-- 自分の IP とホスト名を「追記」

ユーザ関連の設定

ユーザの追加

adduser コマンドで自分のユーザアカウントを作ることにする.以下の例はアカウント名を hogehoge として作成する例である.hogehoge を適宜自分のユーザ名に読み替えること.

# adduser hogehoge

  ユーザ `hogehoge' を追加しています...
  新しいグループ `hogehoge' (1002) を追加しています...
  新しいユーザ `hogehoge' (1002) をグループ `hogehoge' として追加しています...
  ホームディレクトリ `/home/hogehoge' を作成しています...
  `/etc/skel' からファイルをコピーしています...
  hogehoge のユーザ情報を変更中
  新しい値を入力してください。標準設定値を使うならリターンを押してください
      フルネーム []: SUGIYAMA Ko-ichiro
      部屋番号 []: 
      職場電話番号 []: 
      自宅電話番号 []: 
      その他 []: 
  以上で正しいですか? [Y/n] Y    <-- 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 (自分のアカウントに読み替えること) をグループ sudo に加える.

# usermod -aG sudo hogehoge

確認として, /etc/group の中身を確認する.

# grep sudo /etc/group

  sudo:x:27:hogehoge,sugiyama

デフォルトユーザのパスワードロック

デフォルトのユーザ (user) はもう使わないのでパスワードロックしてログインできなくしておく.

# passwd -l <初期ユーザ名>

  passwd: パスワード期限切れ情報を変更しました

root のパスワードを変更

管理者のパスワードを自分のものに必ず変更しておく.

# passwd root

  新しい パスワード:
  新しい パスワードを再入力してください:
  passwd: パスワードは正しく更新されました

再起動と sudo の確認

# reboot

再起動後は, ユーザ hogehoge (自分の学生番号に読み替え) でログインすること.

ログインしなおしたら,管理者権限を使えるか確認する. sudo -s コマンドを実行し,プロンプトが $ から # へ変わることを確認する.

$ whoami

  hogehoge   (現在は hogehoge であることがわかる)

$ sudo -s    (hogehoge から管理者に移行) 

    [sudo] hogehoge のパスワード:      <-- 「自分」のパスワードを入力. 

#                (管理者権限となったのでプロンプトが # に変わる)

# exit     (一般権限に戻るのは exit )

$

パスワードの保管方法の確認

登録されたユーザ情報は, /etc/passwd と /etc/shadow に登録される. /etc/shadow に暗号化されたパスワードが, それ以外の情報は /etc/passwd に 書かれる.

これらのファイルを確認してみよう. grep コマンドを使うことで, 第一引数に 与えた文字列が含まれている行だけを抜き出すことができる.

なお,ユーザ名 hogehoge は自分のアカウント名 (学生番号) に読み替えること.

$ sudo -s 

# less /etc/passwd

  ...(略)...

# grep hogehoge /etc/passwd

  hogehoge:x:1001:1001:SUGIYAMA Ko-ichiro,,,:/home/hogehoge:/bin/bash

# less /etc/shadow

  ...(略)...

# grep hogehoge /etc/shadow

  hogehoge:$6$AAAAAA$XXXXXXXXXXXXXXXXXXXXXXXXX:17439:0:99999:7:::

# less /etc/group

  ...(略)...

# grep hogehoge /etc/group

  hogehoge:x:1001:

/etc/shadow はパスワード情報が含まれているので, 一般ユーザには読めない ファイルパーミッションになっている. /etc/passwd や /etc/group は一般ユー ザでも読める.

# ls -l /etc/passwd /etc/group /etc/shadow

  -rw-r--r-- 1 root root    814 10月 19 09:33 /etc/group
  -rw-r--r-- 1 root root   1718 10月 19 09:34 /etc/passwd
  -rw-r----- 1 root shadow 1097 10月 19 09:33 /etc/shadow