Contents
1.Debian12 概要とインストール方法
今回はユーザーフレンドリーなLinuxディストリビューションのUBUNTUの基になっているDebianでサーバー構築する方法を説明します。最新はDebian 12(コードネーム「bookworm」) (2023年 6 月 10 日 にリリース)のバグ修正とセキュリティーアップデートされたポイントリリース版 Debian12.5(2024年 2月 10 日 にリリース)です。
1.1 Debian12.5 インストールイメージのダウンロード
Debianのarchiveダウンロードサイト https://cdimage.debian.org/cdimage/archive/ にアクセスし、amd64/iso-dvdからisoファイルをダウンロードする
上記で保存したisoイメージをお好きなライティングソフトでCD、USBに起動ディスクとして書き込む。
1.2 Debian12.5 インストール
以降のインストール方法についてはDebian12.1と同様ですので割愛します。下記ページを参照してください。
2. 初期設定
2.1 vimエディターのインストールと設定
Debianではデフォルトのエディターとして「nano」が設定されています。nanoはやや使いにくいことや、利用されている環境が少ないためエディタを「vim」に変更する手順を紹介します。
vimパッケージの確認
Debian にはデフォルトでvimがインストールされていますが「vim-tiny」というパッケージになり、機能が少ないバージョンになります。インストールされ ているvimパッケージを確認してみます。Debianではパッケージの確認に"dpkg"コマンドを利用します。"-l"オプションを付けるとパッケー ジリストが表示されます。
"dpkg"コマンドをそのまま実行するとシステムにインストールされている全てのパッケージが表示されるため、文字列「vim」を含むパッケージのみを"grep"コマンドで抽出します。以下のように実行します。
1 2 3 |
huong@debian:~$ dpkg -l | grep vim ii vim-common 2:9.0.1378-2 all Vi IMproved - Common files ii vim-tiny 2:9.0.1378-2 amd64 Vi IMproved - enhanced vi editor - compact version |
上記のように「vim-tiny」パッケージのみがインストールされていることが確認できます。
以降 「huong@debian:~$」は「$」,「root@debian:~#」は「#」に省略して記載します。また、ルートユーザー権限で作業を進めます。
①vimパッケージのインストール
apt installコマンドの"-y"オプションはインストール時の確認を自動的に行うオプションです。
1 2 3 4 5 6 7 8 9 |
$ su - Password : ←Debian12のインストール過程で作成したルートユーザーパスワード # apt install -y vim インストール後に再度、dpkgコマンドでvimパッケージを確認してみます # dpkg -l | grep vim ii vim 2:9.0.1378-2 amd64 Vi IMproved - enhanced vi editor ii vim-common 2:9.0.1378-2 all Vi IMproved - Common files ii vim-runtime 2:9.0.1378-2 all Vi IMproved - Runtime files ii vim-tiny 2:9.0.1378-2 amd64 Vi IMproved - enhanced vi editor - compact version |
上記のようにVimがインストールされています。
➁デフォルトで利用されるエディタの変更
デフォルトのエディタをnanoからインストールした「vim」に変更します。デフォルトエディタの変更には"update-alternatives --set editor"コマンドを実行します。vimに変更する場合には以下のように実行します。
1 2 |
# update-alternatives --set editor /usr/bin/vim.basic update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode |
上記のように出力されれば、エディタは変更されています。
➂vimの設定変更
全てのユーザーに許可する場合は"/root/"に「.vimrc」ファイルを作成
各ユーザーごとにvimの環境を作る場合は「.vimrc」ファイルをユーザーのホームディレクトリに作成することでvimの環境を設定できます。
今回はrootユーザーのホームディレクトリ"/root/"に「.vimrc」ファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# vi ~/.vimrc "テキストの貼り付けやコピーを有効 set clipboard+=autoselect " vim の独自拡張機能を使う(viとの互換性無し) set nocompatible " 文字コードを指定する set encoding=utf-8 " ファイルエンコードを指定する set fileencodings=utf-8,iso-2022-jp,sjis,euc-jp " 自動認識させる改行コードを指定する set fileformats=unix,dos " バックアップを取得する set backup " バックアップを取得するディレクトリを指定する set backupdir=~/backup " 検索履歴を残す世代数 set history=50 " 検索時に大文字小文字を区別しない set ignorecase " 検索語に大文字を混ぜると検索時に大文字を区別する set smartcase " 検索語にマッチした単語をハイライトする set hlsearch " インクリメンタルサーチを使用する (検索語の入力最中から随時マッチする文字列の検索を開始) set incsearch " 行番号を表示する set number " 改行 ( $ ) やタブ ( ^I ) を可視化する set list " 括弧入力時に対応する括弧を強調する set showmatch " ファイルの末尾に改行を入れない set binary noeol " 自動インデントを有効にする set autoindent " 構文ごとに色分け表示する syntax on " [ syntax on ] の場合のコメント文の色を変更する highlight Comment ctermfg=LightCyan " ウィンドウ幅で行を折り返す set wrap |
上記の中で不必要なものはコメントアウトして下さい
④vimの設定変更内容の有効化
設定した内容を有効にするために、システムからログアウトして下さい。再度、システムへログインすると上記内容が反映されます。
2.2 ネットワークの設定
①ホスト名の設定
Debian のインストール時にホスト名を設定していますが、何らかの理由でホスト名を変更する場合について説明します。
ホスト名の設定には"hostnamectl set-hostname"コマンドを利用します。以下のように実行します。ここではホスト名として「Lepard」を設定します。
1 |
# hostnamectl set-hostname Lepard |
設定の結果は "/etc/hostname"ファイルを参照することで確認できます。
"cat"コマンドで"/etc/hostname"ファイルを参照して、以下のように設定値の「Lepard」が表示されればホスト名の確認は完了です。
1 2 |
# cat /etc/hostname Lepard |
➁ネットワークインターフェイスへのIPアドレス設定
Debian 12インストール時のIPアドレスはDHCP(動的IPアドレス)に設定されていますので、固定のIPアドレスを設定します。IPアドレスの設定には"/etc/network/interfaces"ファイルを変更してから、ネットワークインターフェース(今回はens33)を再起動します。
ネットワークインターフェース名はセットアップを行った環境によって変わりますので、まずはインターフェイス名を確認します。
ネットワーク情報を確認するためのコマンドは"ip addr(もしくはip a)"になります。実行することでネットワークインターフェース名やIPアドレスの情報が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:f9:86:e2 brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.11.27/24 brd 192.168.11.255 scope global dynamic ens33 valid_lft 166581sec preferred_lft 166581sec inet6 fe80::20c:29ff:fef9:86e2/64 scope link valid_lft forever preferred_lft forever |
連番の次に表示されているものが「ネットワークインターフェース名」になります。「lo」は「ローカルループバックインターフェイス」になりますので、通常は利用されません。上記の場合は「ens33」がネットワークインターフェース名です。
➂固定IPアドレスの設定
ネットワークインターフェース名が分かったところで、ネットワークの設定を行います。ネットワークの設定に必要な情報と、今回設定を行うパラメータを以下のように仮定して進めます。
・IPアドレス 192.168.11.83
・サブネットマスク 255.255.255.0(24ビット)
・デフォルトゲートウェイ 192.168.11.1
・DNSサーバー 192.168.11.1
IPアドレスの設定は"/etc/network/interfaces"ファイルを変更することで行います。viコマンドでinterfacesファイルを開きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# vi /etc/network/interfaces 初期値は以下のようになっています # The primary network interface allow-hotplug ens33 iface ens33 inet dhcp 次のように変更します # The primary network interface allow-hotplug ens33 #iface ens33 inet dhcp ←コメントアウト # network interface settings iface ens33 inet static ←追加 address 192.168.11.83 ←追加 netmask 255.255.255.0 ←追加 gateway 192.168.11.1 ←追加 dns-nameservers 192.168.11.1 ←追加 |
④固定IPアドレスの有効化
1 |
# systemctl restart networking ifup@ens33 |
2.3 サーバーの時刻同期を設定
こではサーバーの時刻を自動的に合わせるサービスである「timesyncd」を設定していきます。
①timesyncdサービスの設定
timesyncdサービスの設定は"/etc/systemd/timesyncd.conf"ファイルで行います。ファイルの変更前に、元のファイルをバックアップとしてコピーしておきます。
1 |
# cp -p /etc/systemd/timesyncd.conf /etc/systemd/timesyncd.conf.org |
設定ファイルを編集していきます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# vi /etc/systemd/timesyncd.conf 初期値は以下のようになっています [Time] #NTP= #FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048 これを次のように日本国内のタイムサーバーに変更します。 NTP=ntp.jst.mfeed.ad.jp FallbackNTP=ntp.nict.jp #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048 |
➁timesyncdサービスの設定の反映
1 |
# systemctl restart systemd-timesyncd |
エラーが出力されなければ、サービスは再起動しています。時刻同期の確認をおこないます。時刻同期の確認は"timedatectl status"コマンドで行います。以下のように実行します。
1 2 3 4 5 6 7 8 |
# timedatectl status Local time: Mon 2024-02-12 09:07:39 JST Universal time: Mon 2024-02-12 00:07:39 UTC RTC time: Mon 2024-02-12 00:07:39 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no |
「System clock synchronized: yes」と表示されていれば時刻同期は行われています。
2.4 suできるユーザーを制限する
Debianではデフォルト設定の場合"su"コマンドでどのユーザーでもrootユーザーに移行することができます。
複数のユーザーがサーバーに作成されている場合、どれか一つでもユーザーのログイン情報が分かってしまうと不正アクセス後にsuコマンドでrootユーザー権限を奪取されてしまうため、できる限りsuコマンドを実行できるユーザーを制限します。
wheelグループに属するユーザーのみにsuを実行できる権限を与えることができるようにします。
①wheelグループへのユーザー追加
まず、次のコマンドでwheelグループを作成する
1 |
# groupadd wheel |
usermodコマンドを実行してwheelグループへユーザーを追加します。例として追加したいユーザーを「lan」とします。
1 2 |
# useradd lan # usermod -g wheel lan |
idコマンドを利用してwheelグループへ追加されていることを確認。
1 2 |
# id lan uid=1001(lan) gid=1001(wheel) groups=1001(wheel) |
➁suコマンドの設定ファイルを編集
suコマンドの設定ファイルは/etc/pam.d/suになります。(15行目あたり)
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/pam.d/su # Uncomment this to force users to be a member of group wheel # before they can use `su'. You can also add "group=foo" # to the end of this line if you want to use a group other # than the default "wheel" (but this may have side effect of # denying "root" user, unless she's a member of "foo" or explicitly # permitted earlier by e.g. "sufficient pam_rootok.so"). # (Replaces the `SU_WHEEL_ONLY' option from login.defs) auth required pam_wheel.so ← コメントを外す |
これで、lanユーザーは「su -」コマンドを利用してroot権限に移行できます。
2.5 Debian リポジトリ ミラー設定編集
リポジトリ ミラー 設定ファイルは/etc/apt/sources.listです、コピーをとってから編集します。
1 2 3 |
# cd /etc/apt/ # cp sources.list sources.list_back # vi /etc/apt/sources.list |
ファイル内容は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#deb cdrom:[Debian GNU/Linux 12.4.0 _Bookworm_ - Official amd64 NETINST with firmware 20231210-17:56]/ bookworm main non-free-firmware deb http://ftp.jp.debian.org/debian/ bookworm main non-free-firmware deb-src http://ftp.jp.debian.org/debian/ bookworm main non-free-firmware deb http://security.debian.org/debian-security bookworm-security main non-free-firmware deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware # bookworm-updates, to get updates before a point release is made; # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports deb http://ftp.jp.debian.org/debian/ bookworm-updates main non-free-firmware deb-src http://ftp.jp.debian.org/debian/ bookworm-updates main non-free-firmware # This system was installed using small removable media # (e.g. netinst, live or single CD). The matching "deb cdrom" # entries were disabled at the end of the installation process. # For information about how to configure apt package sources, # see the sources.list(5) manual. |
一番上のは、インストール時に使ったメディアです。もう使わないので、コメントアウトしています。
Backports リポジトリを追加(最終行に下記を追記)
1 |
deb http://deb.debian.org/debian/ bookworm-backports main non-free-firmware |
ソースリストをアップデート
1 |
# apt update |
2.6 locateコマンドを利用できるようにする
Linuxシステム全体を対象として、特定のファイルを検索するにはfindコマンドを利用しますが、findはオプションの指定がやや分かりにくいところがあります。
locateコマンドは指定したファイル名をもつファイルを全て抽出することが可能です。
事前にファイルとフォルダ名のデータベースを作成しなければなりませんが、高速にファイルが検索出来て、使い勝手が良いというメリットがあります。ここでは"locate"コマンドを利用できるようにします。
①locateパッケージのインストール
1 2 3 |
# apt install -y locate # dpkg -l | grep locate ii locate 4.9.0-4 amd64 maintain and query an index of a directory tree |
上記のように実行結果にlocateパッケージ名が表示されれば、インストールの確認は完了です
➁データベースを作成
1 |
# updatedb |
➂locateコマンドの実行
例として「sshd」という名前のファイルを全て検索します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# locate sshd /etc/pam.d/sshd /etc/ssh/sshd_config /etc/systemd/system/sshd.service /run/sshd /run/sshd.pid /usr/sbin/sshd /usr/share/man/man5/sshd_config.5.gz /usr/share/man/man8/sshd.8.gz /usr/share/openssh/sshd_config /usr/share/openssh/sshd_config.md5sum /usr/share/vim/vim81/syntax/sshdconfig.vim /var/lib/systemd/deb-systemd-helper-enabled/sshd.service /var/lib/ucf/cache/:etc:ssh:sshd_config |
sshdを含むファイル名のリストが表示されました。
2.7 ロケールの設定
Linuxシステムの言語設定です。Debianのインストール時にロケールとして日本語を選択している場合には、元々が日本語環境になっていますので、変更する必要はありません。
もしご利用の環境で「英語ロケール」で、尚且つ、日本語ロケールの方が良いという場合には実施してください。
①現在のロケール確認
システムで設定されているロケールを確認します。ロケールを確認するには"localectl status"コマンドを利用します。
現在はLANG=en_US.UTF-8で英語になっています
1 2 3 4 5 6 |
# localectl status System Locale: LANG=en_US.UTF-8 LANGUAGE=en_US:en VC Keymap: (unset) X11 Layout: jp X11 Model: pc105 |
➁日本語ロケールへ変更
dpkg-reconfigureコマンドで、ロケールを設定します
1 |
# dpkg-reconfigure locales |
"en_US.UTF-8 UTF-8" の"*"を削除し、OKをクリック
"ja_JP,UTF-8"を選択し、OK クリック
再度確認する
1 2 3 4 5 |
# localectl status System Locale: LANG=ja_JP.UTF-8 VC Keymap: (unset) X11 Layout: jp X11 Model: pc105 |
上記のように「ja_JP.UTF-8」ロケールが設定されていることが確認できました。
2.8 タイムゾーンの設定
Debian のタイムゾーンはインストール時に設定されている場合がほとんどですが、もし日本のタイムゾーンである「JST」が指定されていない場合には"timedatectl"コマンドで変更できます。
①現在のタイムゾーンの表示
サーバーに設定されているタイムゾーンを確認するには"timedatectl status"コマンドを実行します
1 2 3 4 5 6 7 8 |
# timedatectl status Local time: Fri 2023-12-29 15:47:10 JST Universal time: Fri 2023-12-29 06:47:10 UTC RTC time: Fri 2023-12-29 06:47:10 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no |
上記のようにタイムゾーンが「Asia/Tokyo (JST)」に設定されています。
➁タイムゾーンを日本に変更
もし、「Asia/Tokyo (JST)」になっていない場合は、"timedatectl set-timezone"コマンドでタイムゾーンを変更できます。
1 |
# timedatectl set-timezone Asia/Tokyo |
2.9 システムパッケージのアップデート
メディアからインストールされたDebianシステムは含まれているパッケージが古いことがあります。基本的な設定が完了した時点でシステムに含まれている パッケージを全て、新しいものに更新します。Debianでは全てのパッケージを更新するためにも"apt"を利用します。
パッケージの更新を実行しないで、更新されるパッケージのリストだけを確認するには"apt update"コマンドを実行します。以下のように実行します。
1 2 3 4 5 6 7 8 9 10 11 12 |
# apt update Hit:1 http://deb.debian.org/debian bookworm InRelease Get:2 http://deb.debian.org/debian bookworm-updates InRelease [52.1 kB] Get:3 http://security.debian.org/debian-security bookworm-security InRelease [48.0 kB] Get:4 http://security.debian.org/debian-security bookworm-security/main Sources [10.2 kB] Get:5 http://security.debian.org/debian-security bookworm-security/main amd64 Packages [21.8 kB] Get:6 http://security.debian.org/debian-security bookworm-security/main Translation-en [9,624 B] Fetched 142 kB in 0s (297 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. |
今回はすべてアップデート済みですが、もしアップデートするパッケージあれば"apt upgrade"コマンドを実行します。
1 2 3 4 5 6 |
# apt upgrade -y Reading package lists... Done Building dependency tree... Done Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. |