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