Linux サーバー構築

Debian 10 busterをインストールして最初に行う設定と確認 10項目

2019年11月2日

debian10-first-settings

前回の記事でDebian 10インストールする手順を紹介しました。しかしDebian 10のインストール後に、実際の設定や運用など、どこから手を付けてよいか分からない場合も多いと思います。本記事ではDebian 10を利用するうえで必要だと思われる設定と作業について紹介していきます。

今回はDebian 10のインストール後に、設定や確認をおすすめする基本的なポイントについて10点をまとめてみました。まずはLinuxの設定について慣れる意味でも実際に設定を行ってみて、ある程度理解を深めたうえで、ご自身のベストな設定手順や構成を探していく形が良いと思います。

記事で利用しているOSのバージョンはDebian 10ですが、Debian 9系も利用できます。

参考 Debian 10のインストール手順については以下の記事で紹介しています。

Linux
debian10-buster-install-top
Debian 10 buster をインストールしてサーバー環境を構築する手順

Linuxディストリビューションのひとつ「Debian」が2019年7月にメジャーバージョンアップしました。(2019年10月時点で10.1が最新バージョン)これまでは9系がstable(安定版)最新 ...

まだDebian 10のインストールを行っていない場合に参考にしてみてください。

1. 設定を行うDebian の環境とユーザーの操作

本記事は「Debianを使ってサーバーを構築するための基本的な環境を作成する」という観点で書かれています。紹介する手順は一例となり、記載した手順以外にもサーバーを構築するためには利用する目的や運用に沿った多くの手順が必要になります。

また、OS自体に用意されたセキュリティ機能を無効にする設定も一部含まれますが、ここでは利便性を天秤にかけて運用面から、より有用だと思われる手順を記載しています。
今回、設定を行うDebian 10の環境は以下のようになります。

Debian 10 インストール後の環境

  • Debianのバージョンは 10.1 64bit
  • Debianのへの接続用として「SSHサービス」が有効
  • OSインストール時に一般ユーザー(testuser01)を作成済み
  • IPアドレスは、初期セットアップ用で設定したDHCP(IPアドレスの動的設定)で自動取得
  • インターネットへ接続できるネットワーク環境

注意ポイント

本記事の設定を行うにあたって、OSのインストール時に「SSHサービス」を選択していない場合は、追加でソフトウェアパッケージ(以下、パッケージ)のインストールが必要になります。不足分については"apt install -y openssh-server"コマンドでインストールを行って下さい。

1-1. 一般ユーザーと管理ユーザーについて

Linux全般ではユーザーの権限として、操作が限定されている一般ユーザーとシステムに対して全ての操作権限をもつ管理ユーザーの(rootユーザーと呼ばれます。)2つがあります。

一般ユーザーはシステムに対して変更を行う権限を持たないため、システムの設定変更を行う場合には管理ユーザーに切り替える必要があります。通常の操作では操作ミスによるシステム障害を防止するために一般ユーザーを利用して、システムの設定変更を行うときだけrootユーザーへ切り替えを行います。

1-2. rootユーザーへの切り替え

一般ユーザーからrootユーザーへの切り替えは「su」(Super User)コマンドを利用します。(sudoコマンドを利用する方法もありますが、本記事ではsuコマンドを利用します。)権限を切り替えたい場合には

 command
$ su -

と実行します。最後の「-」ハイフンは切り替えるユーザーの操作環境を引き継ぐ場合に付与します。基本的には付けて実行したほうがトラブルが少ないと思います。
suコマンドを実行すると、パスワードの入力プロンプトが表示されます。

 command
Password:

OSのセットアップ時に指定したrootユーザーのパスワードを入力します。パスワードが認証されるとプロンプトが「$」から「#」に変わります。これで管理権限もつrootユーザーへの切り替えは完了です。
切り替え後には、ディレクトリがrootユーザーのホームディレクトリになります。

1-3. rootユーザーから一般ユーザーへの切り替え

rootユーザーはシステム全ての操作権限を持つため、利用が終わったら一般ユーザーへ切り替えを行うことをお勧めします。
一般ユーザーへの切り替えは"exit"コマンドを入力します。

 command
# exit

実行するとプロンプトが「$」に変わります。

ポイント

本記事では一般ユーザーでの実行が可能なコマンドについてはプロンプトとして「$」、rootユーザーでの実行が必要なコマンドについては「#」を記載しています。

2. vimエディターのインストールと設定

Debianではデフォルトのエディターとして「nano」が設定されています。nanoはやや使いにくいことや、利用されている環境が少ないためエディタを「vim」に変更する手順を紹介します。

nanoやvim以外のエディタを使い慣れている場合には変更する必要はありませんので、本章は飛ばして先へ進めて下さい。

2-1. vimパッケージの確認

Debianにはデフォルトでvimがインストールされていますが「vim-tiny」というパッケージになり、機能が少ないバージョンになります。インストールされているvimパッケージを確認してみます。Debianではパッケージの確認に"dpkg"コマンドを利用します。"-l"オプションを付けるとパッケージリストが表示されます。

"dpkg"コマンドをそのまま実行するとシステムにインストールされている全てのパッケージが表示されるため、文字列「vim」を含むパッケージのみを"grep"コマンドで抽出します。以下のように実行します。

 command
$ dpkg -l | grep vim
ii vim-common 2:8.1.0875-5 all Vi IMproved - Common files
ii vim-tiny 2:8.1.0875-5 amd64 Vi IMproved - enhanced vi ed version

上記のように「vim-tiny」パッケージのみがインストールされていることが確認できます。

2-2. vimパッケージのインストール

Debianでは機能が拡張された「vimパッケージ」が用意されています。デフォルトの状態ではインストールされていないため、追加でパッケージをインストールします。パッケージのインストールには"apt install"コマンドを実行します。以下のように実行します。

apt installコマンドの"-y"オプションはインストール時の確認を自動的に行うオプションです。

 command
# apt install -y vim
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
ctags vim-doc vim-scripts
以下のパッケージが新たにインストールされます:
vim
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
1,280 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,867 kB のディスク容量が消費されます。
取得:1 http://deb.debian.org/debian buster/main amd64 vim amd64 2:8.1.0875-5 [1,280 kB]
1,280 kB を 1秒 で取得しました (1,947 kB/s)
以前に未選択のパッケージ vim を選択しています。
(データベースを読み込んでいます ... 現在 32712 個のファイルとディレクトリがインストールされています。)
.../vim_2%3a8.1.0875-5_amd64.deb を展開する準備をしています ...
vim (2:8.1.0875-5) を展開しています...
vim (2:8.1.0875-5) を設定しています ...
update-alternatives: /usr/bin/vim (vim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vimdiff (vimdiff) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rvim (rvim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rview (rview) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vi (vi) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/view (view) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/ex (ex) を提供するために自動モードで /usr/bin/vim.basic を使います

エラーが表示されなければvimパッケージはインストールされています。インストール後に再度、dpkgコマンドでvimパッケージを確認してみます。

 command
$ dpkg -l | grep vim
ii vim 2:8.1.0875-5 amd64 Vi IMproved - enhanced vi editor
ii vim-common 2:8.1.0875-5 all Vi IMproved - Common files
ii vim-runtime 2:8.1.0875-5 all Vi IMproved - Runtime files
ii vim-tiny 2:8.1.0875-5 amd64 Vi IMproved - enhanced vi editor - compact version

新しく「vim」パッケージが追加されていることが確認できました。これでvimのインストールは完了です。

2-3. デフォルトで利用されるエディタの変更

デフォルトのエディタをnanoからインストールした「vim」に変更します。デフォルトエディタの変更には"update-alternatives --set editor"コマンドを実行します。vimに変更する場合には以下のように実行します。

 command
# update-alternatives --set editor /usr/bin/vim.basic
update-alternatives: /usr/bin/editor (editor) を提供するためにマニュアルモードで /usr/bin/vim.basic を使います

上記のように出力されれば、エディタは変更されています。

2-4. vimの設定変更

インストールされた「vim」はテキストの貼り付けやコピーが無効になっています。これは不便なので、貼り付けとコピーを有効にします。vimの機能は"vim --version"で確認できます。出力結果が多いため"grep"で貼り付けとコピー機能の"clipboard"文字列を抽出します。以下のように実行します。

 command
# vim --version | grep clipboard
-clipboard +jumplist +persistent_undo +vartabs
+eval +mouse_gpm +syntax -xterm_clipboard

表示された内容で"-"が付いている機能は無効になっています。貼り付けとコピー機能の"clipboard"は"-clipboard"になっており、無効化されていることがわかります。

2-4-1. 貼り付けとコピーの有効化設定

貼り付けとコピーを、全てのユーザーに許可したくない場合もあるかと思います。そのような場合には各ユーザーごとにvimの環境を変更できる「.vimrc」ファイルをユーザーのホームディレクトリに作成することでvimの環境を設定できます。
本記事ではrootユーザーのホームディレクトリ"/root/"に「.vimrc」ファイルを作成します。

 command
# vi ~/.vimrc

別のユーザー用のファイルを作成するときは、ログインしているユーザーで"vi ~/.vimrc"を実行します。

ファイルの内容として以下を追記します。

 command
set clipboard+=autoselect

追記後に作成した「.vimrc」ファイルを保存します。

ESCキーを押して編集モードを抜けた後、「Shiftキー」を押しながら「Zキー」を2回、連続で押すことでファイルを保存できます。

2-4-2. 貼り付けとコピー有効化の反映

設定した内容を有効にするために、システムからログアウトして下さい。再度、システムへログインすると設定が反映されてvimで「貼り付けとコピー」が利用できるようになります。

"vim --version | grep clipboard"の結果は「-clipboard」のままですが、貼り付けとコピーは有効になっています。

3. ネットワークの設定

Debianでは、ネットワーク管理をネットワークマネージャーで行いますがサーバー用途では、これまでと同じくネットワーク関連ファイルを直接編集する方法での設定が推奨されています。本章ではホスト名の変更と、ネットワーク設定用のファイル編集方法について説明していきます。

3-1. ホスト名の設定

Debian のインストール時にホスト名を設定していて、そのままのホスト名で運用する場合には、本手順は不要です。

システムに対して、任意のホスト名を設定します。ホスト名の設定には"hostnamectl set-hostname"コマンドを利用します。以下のように実行します。ここではホスト名として「debian-10」を設定します。(実際には、環境に合わせたホスト名を指定してください。)

 command
# hostnamectl set-hostname debian-10

設定の結果は "/etc/hostname"ファイルを参照することで確認できます。
"cat"コマンドで"/etc/hostname"ファイルを参照して、以下のように設定値の「debian-10」が表示されればホスト名の確認は完了です。

 command
$ cat /etc/hostname
debian-10

3-2. ネットワークインターフェイスへのIPアドレス設定

ホスト名と同じくIPアドレスについても、OSインストール時に指定したものから変更がなければ、本手順は不要です。

Debian 10インストール時のIPアドレスはDHCP(動的IPアドレス)に設定されていますので、固定のIPアドレスを設定します。IPアドレスの設定には"/etc/network/interfaces"ファイルを変更してから、ネットワークインターフェース(本記事の環境ではens33)を再起動します。
ネットワークインターフェース名はセットアップを行った環境によって変わりますので、まずはインターフェイス名を確認します。

ネットワーク情報を確認するためのコマンドは"ip addr"になります。実行することでネットワークインターフェース名やIPアドレスの情報が表示されます。

 command
$ 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 pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b7:36:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.241.152/24 brd 192.168.241.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb7:3694/64 scope link
valid_lft forever preferred_lft forever

連番の次に表示されているものが「ネットワークインターフェース名」になります。「lo」は「ローカルループバックインターフェイス」になりますので、通常は利用されません。上記の場合は「ens33」がネットワークインターフェース名です。

3-2-1. 固定IPアドレスの設定

ネットワークインターフェース名が分かったところで、ネットワークの設定を行います。ネットワークの設定に必要な情報と、今回設定を行うパラメータを以下にまとめました。

IPアドレス192.168.241.227
サブネットマスク255.255.255.0(24ビット)
デフォルトゲートウェイ192.168.241.254
DNSサーバー192.168.241.254

IPアドレスの設定は"/etc/network/interfaces"ファイルを変更することで行います。viコマンドでinterfacesファイルを開きます。

 command
# vi /etc/network/interfaces

設定ファイル中の「# The primary network interface」以下が変更点です。DHCPで設定されている場合には以下のように記載されています。

 code
# The primary network interface
allow-hotplug ens33
iface ens33 inet dhcp

この設定を固定IPアドレスに変更するため、以下のように変更します。

 code
# The primary network interface
allow-hotplug ens33
#iface ens33 inet dhcp # network interface settings
iface ens33 inet static
address 192.168.241.227
netmask 255.255.255.0
gateway 192.168.241.254
dns-nameservers 192.168.241.254

変更が終わったらファイルを保存します。

3-2-2. 固定IPアドレスの有効化

ネットワークサービスの再起動とネットワークインターフェースの有効化を実行するために以下のコマンドを実行します。

 command
# systemctl restart networking ifup@ens33

ポイント

SSHを使ってネットワーク経由でサーバーに接続している場合には"systemctl restart.."コマンドを実行するとIPアドレスの変更に伴い、SSH接続が切断されます。その場合には新しくネットワークインターフェースに設定したIPアドレスで再度、SSH接続をして下さい。

コマンドを実行してエラーが出力されなければ、IPアドレスは変更されています。"ip addr"コマンドで設定変更したIPアドレスを表示します。

 command
$ 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 pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b7:36:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.241.227/24 brd 192.168.241.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb7:3694/64 scope link
valid_lft forever preferred_lft forever

ネットワークインターフェース名に変更したIPアドレスが表示されれば、確認は完了です。

4. ファイヤーウォールの基本的な設定

Debianでは「ufw」というソフトウェアを使ってファイアウォールを設定することが多いので、本記事でもufwを利用したファイアウォール設定を行います。
ufwはOSの導入時にはインストールされていませんので、設定を行う前にufwパッケージのインストールを行います。インストール後には最低限のフィルタ設定を行う手順を紹介します。ufwで設定する内容は以下のフィルタルールになります。

ufwで設定するフィルタルール

  • サーバーに入ってくるパケットは一部を除いて拒否
  • 許可するポートはSSH用の「TCP:22」ポート
  • サーバーに転送されるパケットは全て拒否
  • サーバーから外部へ送信されるパケットは全て許可

4-1. ufwパッケージのインストール

ufwパッケージは"apt install"コマンドでインストールします。パッケージ名は「ufw」になりますので、以下のように実行します。

 command
# apt install -y ufw パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
ufw
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
164 kB のアーカイブを取得する必要があります。
この操作後に追加で 852 kB のディスク容量が消費されます。
取得:1 http://deb.debian.org/debian buster/main amd64 ufw all 0.36-1 [164 kB]
164 kB を 5秒 で取得しました (31.4 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ ufw を選択しています。
(データベースを読み込んでいます ... 現在 32600 個のファイルとディレクトリがインストールされています。)
.../archives/ufw_0.36-1_all.deb を展開する準備をしています ...
ufw (0.36-1) を展開しています...
ufw (0.36-1) を設定しています ... Creating config file /etc/ufw/before.rules with new version Creating config file /etc/ufw/before6.rules with new version Creating config file /etc/ufw/after.rules with new version Creating config file /etc/ufw/after6.rules with new version
Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service → /lib/systemd/system/ufw.service.
man-db (2.8.5-2) のトリガを処理しています ...
rsyslog (8.1901.0-1) のトリガを処理しています ...
systemd (241-7~deb10u1) のトリガを処理しています ...

エラーが出力されなければ、ufwパッケージはインストールされています。

4-1. ufwパッケージ インストール後の確認

インストールされたパッケージを、パッケージを表示するための"dpkg"コマンドで確認してみます。

 command
$ dpkg -l | grep ufw
ii ufw 0.36-1 all program for managing a Netfilter firewall

インストールした「ufwパッケージ」が表示されました。システムにパッケージがインストールされたことが、結果から確認できます。
これでufwパッケージのインストールと確認は完了です。

ufwはサービスとして管理されています。ufwの動作状況を確認するために"systemctl status"コマンドを実行してみます。

 command
$ systemctl status ufw
● ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:ufw(8)

ufwサービスが停止していることが「Active: inactive (dead)」と表示されていることから確認できます。

4-2. 基本的なファイアウォールルールの設定

ufwを有効にするとデフォルトのファイアウォールルールが適用されます。このまま有効にするとサーバーと通信ができなくなる可能性がありますので、ufwを有効にする前に基本的なルールを設定しておきます。

4-2-1. 受信パケット デフォルトルールの設定

まず受信パケットに対するルールを設定します。受信パケットは特定の通信以外、全てを拒否する形が一般的なルールになります。ルールに合わせて全ての受信パケットを基本的に拒否するように"ufw default deny incoming"を実行します。

 command
# ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

「Default incoming policy changed to 'deny'」と実行結果が表示されれば、受信パケットに対するデフォルトのルール設定(拒否)は完了です。

4-2-2. 送信パケット デフォルトルールの設定

次に送信パケットに対するルールを設定します。送信パケットは全てを許可する形が一般的なルールになります。ルールに合わせて全ての送信パケットを基本的に許可するように"ufw default allow outgoing"を実行します。

 command
# ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

「Default outgoing policy changed to 'allow'」と実行結果が表示されれば、送信パケットに対するデフォルトのルール設定(許可)は完了です。

4-2-3. SSHサービスの許可設定

この状態だと全ての受信パケットを全て拒否しているため、サーバーへ接続できなくなります。サーバーのメンテナンス用にSSHサービスのみ接続を許可するように設定します。"ufw allow ssh"コマンドを実行します。

 command
# ufw allow ssh
Rules updated
Rules updated (v6)

「Rules updated」と実行結果が表示されれば、SSHサービスの許可追加は完了です。

4-3. ufwの有効化

ここまでの設定で最低限のルールが設定できましたので、ufwを有効にします。"ufw enable"コマンドを実行します。

 command
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

コマンドの実行時にSSH接続が切断される確認が表示されます。ルールでSSHを許可していますので、切断されることはありません。ここでは「y」を入力します。
「Firewall is active and enabled on system startup」と表示されればufwの起動と、サービスの自動起動設定の両方が完了しています。

4-4. ufwの設定確認

有効後にファイアウォールに設定したルールの確認を行います。"ufw status verbose"を実行します。
以下のようにデフォルトルールと許可しているサービスが表示されることを確認しまう。

 command
# ufw status verbose
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)

これでファイアウォールの確認は完了です。

5. サーバーの時刻同期を設定する

サーバーはサービスを提供するという性質から、正確な時間で運用されている必要があります。ここではサーバーの時刻を自動的に合わせるサービスである「timesyncd」を設定していきます。

5-1. timesyncdサービスの設定

timesyncdサービスの設定は"/etc/systemd/timesyncd.conf"ファイルで行います。ファイルの変更前に、元のファイルをバックアップとしてコピーしておきます。

 command
# cp -p /etc/systemd/timesyncd.conf /etc/systemd/timesyncd.conf.org

ファイルのコピーができたら、viコマンドで設定ファイルを編集していきます。

 command
# vi /etc/systemd/timesyncd.conf

timesyncd.confファイルは変更前はデフォルトで以下のようになっています。

 command
[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同期を行うタイムサーバー指定
FallbackNTPNTPパラメータで指定したタイムサーバーと同期に失敗した場合に利用されるタイムサーバーを指定

の2つになります。このパラメータを日本国内のタイムサーバー

NTPntp.jst.mfeed.ad.jp
FallbackNTPntp.nict.jp

に変更しました。変更後の設定ファイルは以下になります。

 command
[Time]
NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=ntp.nict.jp
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

パラメータの変更が終わったら、設定ファイルを保存します。

5-2. timesyncdサービス 設定の反映

設定した内容を反映するために「time-syncd」サービスを再起動します。

 command
# systemctl restart systemd-timesyncd

エラーが出力されなければ、サービスは再起動しています。時刻同期の確認をおこないます。時刻同期の確認は"timedatectl status"コマンドで行います。以下のように実行します。

 command
$ timedatectl status
Local time: 木 2019-10-31 17:21:13 JST
Universal time: 木 2019-10-31 08:21:13 UTC
RTC time: 木 2019-10-31 08:21:13
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

「System clock synchronized: yes」と表示されていれば時刻同期は行われています。これで時刻同期の設定は完了です。

6. SSHサービスのセキュリティ設定

SSHはサーバーへリモートで接続するためのサービスになります。基本的にはOSインストール直後に動作していますが、デフォルトの設定ではややセキュリティに難があります。ここではデフォルトの設定を変更してSSH接続のセキュリティを高める設定を紹介します。

SSHサービスには複数のセキュリティ設定(例えば鍵認証や、ポート番号の変更など)がありますので、更にセキュリティを高めたい方は調べてみて下さい。

SSHサービスはデフォルトでrootユーザーのログインを許可しています。rootユーザーはユーザー名が既に判明しているためパスワードが判明すると、管理者権限でサーバーへログイン出来るため、これを拒否する設定を行います。

6-1. 一般ユーザーの作成

Debianのインストール時に一般ユーザーを作成している場合は、本手順は不要です。

サーバーに作成されているユーザーがrootのみの場合、SSHによるリモートログインが出来なくなりますので、OSのインストール時にユーザーを作成していない場合、事前にユーザーを作成する必要があります。OSのインストール時にユーザーを作成している場合は、本手順は不要です。

ユーザーの作成は"useradd"コマンドで行います。"-m"オプションでホームディレクトリの作成、"-p"オプションでパスワードを指定します。
例えばユーザーアカウント名として「testuser01」をパスワードとして「123456」を設定する場合は、以下のように実行します。

 command
# useradd -m -p 123456 testuser01

ホームディレクトリが不要な場合には"-m"オプションを付けない形で実行します。

エラーが表示されなければ、ユーザーは作成されています。

6-2. SSHサービスの設定ファイル変更

続いて、SSHサービスの設定を変更するために設定ファイルを変更します。SSHサービスの設定ファイルは"/etc/ssh/sshd_config"になります。設定ファイルをエディターで開きます。

 command
# vi /etc/ssh/sshd_config

設定ファイルの46行目付近に記載がある"PermitRootLogin prohibit-password"パラメータを変更します。パラメータ"prohibit-password"はrootについてはパスワード認証を無効にするという意味合いになります。(公開鍵認証ではrootで直接ログインできる)

 code
# Authentication: #LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

コメントアウトされているパラメータのコメントを外します。変更後のファイルは以下のようになります。

 code
# Authentication: #LoginGraceTime 2m
PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

該当するパラメータの変更が完了したら、設定ファイルを保存します。

6-3. SSHサービスの再起動

変更した設定を反映するためにSSHサービスの再起動を行います。サービスの再起動は"systemctl restart"コマンドで行います。再起動は以下のように実行します。

 command
# systemctl restart sshd

エラーが出力しなければ、再起動は完了しています。SSHクライアントで、サーバーへリモート接続を行い、接続が拒否されることを確認してください。LinuxのSSHコマンドでは以下のような結果になります。

 command
# ssh -l root 192.168.241.227 (このIPアドレスは例になります)
root@localhost's password:
Permission denied, please try again.

接続が拒否されたことが確認できます。
Windows用SSHクライアントソフトの「teraterm」では以下のようにSSH接続を拒否されることが確認できます。

linux-setting-9-3

サーバー側の認証に関するログ"/var/log/auth.log"にも以下のように接続を拒否した内容が出力されています。

 log
Oct 31 17:32:51 debian-10 sshd[1422]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.241.10 user=root
Oct 31 17:32:54 debian-10 sshd[1422]: Failed password for root from 192.168.241.10 port 50730 ssh2

これでSSHサービスのセキュリティ設定は完了です。

7. suできるユーザーを制限する

Debianではデフォルト設定の場合"su"コマンドでどのユーザーでもrootユーザーに移行することができます。
複数のユーザーがサーバーに作成されている場合、どれか一つでもユーザーのログイン情報が分かってしまうと不正アクセス後にsuコマンドでrootユーザー権限を奪取されてしまうため、できる限りsuコマンドを実行できるユーザーを制限することをお勧めします。

suコマンドは設定を変更することで、wheelグループに属するユーザーのみにsuを実行できる権限を与えることができるようになります。本章では設定手順を紹介します。

7-1. wheelグループへのユーザー追加

事前準備としてsuコマンドの実行を許可したいユーザーをwheelグループへ追加します。
wheelグループへのユーザー追加はusermodコマンドを利用する方法と、groupファイルを直接、編集する方法の何れかがあります。ここではusermodコマンドを利用した手順を紹介します。

usermodコマンドを実行してwheelグループへユーザーを追加します。追加したいユーザーがtest1という名前の場合以下のように実行します。

 command
# groupadd wheel
# usermod -g wheel testuser01

コマンドを実行して、エラーが表示されなければ設定は完了しています。wheelグループへ追加されていることを確認するにはidコマンドを利用します。ユーザー名を指定して実行すると、以下のようにuidやgidの情報が表示されます。

 command
# id testuser01
uid=1000(testuser01) gid=1001(wheel) groups=1001(wheel)

上記からグループがwheelグループへ変更されていることが確認できます。これでグループへの追加と確認は完了です。

7-2. suコマンドの設定ファイルを変更

続いてsuコマンドに関する設定ファイルを変更します。suコマンドの設定ファイルは/etc/pam.d/suになります。このファイルをエディターで開きます。

 command
# vi /etc/pam.d/su

設定ファイルは以下のようになります。

 code
# Uncomment this to force users to be a member of group root
# 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 "root" (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

上記部分の"#auth required pam_wheel.so"行からコメントの「#」を外します。変更後の設定ファイルは

 code
# Uncomment this to force users to be a member of group root
# 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 "root" (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

となります。
これで"su"コマンドを実行してrootになることができるユーザーが制限されました。確認として「wheelグループ」以外のユーザーで"su"コマンドを実行してみます。

 command
$ su -
パスワード:
su: 拒否されたパーミッション

このようにsuコマンドを拒否されることから、設定が正常に動作していることが確認できます。

8. locateコマンドを利用できるようにする

Linuxシステム全体を対象として、特定のファイルを検索するのにはfindコマンドを利用する場合が多いと思いますが、findはオプションの指定がやや分かりにくいところがあります。そんなときはlocateコマンドが利用できると便利です。locateコマンドは指定したファイル名をもつファイルを全て抽出することが可能です。

事前にファイルとフォルダ名のデータベースを作成して、その中から検索を行いますので、リアルタイムではありませんが、高速にファイルが検索出来て、使い勝手が良いというメリットがあります。ここでは"locate"コマンドを利用できるようにlocateパッケージのインストール手順を紹介します。

8-1. locateパッケージのインストール

locateパッケージは"apt install"コマンドでインストールを行います。(aptコマンドはソフトウェアパッケージを管理するためのコマンド)本環境はインターネットへ接続できる環境になりますので、その場合は"apt install"コマンドを以下のように実行します。
コマンドを実行すると、locateパッケージのインストールが開始されます。

 command
# apt install -y locate
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
locate
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
270 kB のアーカイブを取得する必要があります。
この操作後に追加で 431 kB のディスク容量が消費されます。
取得:1 http://deb.debian.org/debian buster/main amd64 locate amd64 4.6.0+git+20190209-2 [270 kB]
270 kB を 0秒 で取得しました (1,004 kB/s)
以前に未選択のパッケージ locate を選択しています。
(データベースを読み込んでいます ... 現在 32708 個のファイルとディレクトリがインストールされています。)
.../locate_4.6.0+git+20190209-2_amd64.deb を展開する準備をしています ...
locate (4.6.0+git+20190209-2) を展開しています...
locate (4.6.0+git+20190209-2) を設定しています ...
man-db (2.8.5-2) のトリガを処理しています ...

メッセージにエラーが表示されなければ「locateパッケージ」のインストールは完了です。インストールされたパッケージを確認するには"dpkg"コマンドに"-l"オプションを付けて実行します。出力結果からパッケージ名の「locate」文字列抽出するために"grep"を行います。

 command
# dpkg -l | grep locate
ii locate 4.6.0+git+20190209-2 amd64 maintain and query an index of a directory tree

上記のように実行結果にlocateパッケージ名が表示されれば、インストールの確認は完了です。

8-2. updatedbコマンドの実行

項目8-1. でlocateパッケージはインストールされましたが、このままではファイルを検索することができません。初回、直ぐに利用をする場合は、データベースを作成するためのコマンド”updatedb”を実行します。以下のようにupdatedbコマンドを実行します。

 command
# updatedb

初回の実行時にはやや時間が掛かりますが、エラーが表示されなければコマンドは正常に完了しています。

updatedbはcronで定期的に実行されるため、次回以降の実行は任意となります。

8-3. locateコマンドの実行例

ここまででlocateコマンドを利用するための環境は整いました。locateコマンドの使い方は、コマンドに続いて検索したいファイル名を入力します。ここでは「sshd」という名前のファイルを全て検索するため以下のように実行してみました。

 command
# 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を含むファイル名のリストが表示されました。このようにlocateコマンドは"find"コマンドよりも利便性が高い部分もありますので、インストールしておくと便利だと思います。

9. ロケールの設定

Linuxシステムの言語設定ですが、日本語の環境に変更する手順を紹介します。Debianのインストール時にロケールとして日本語を選択している場合には、元々が日本語環境になっていますので、変更する必要はありませんが、確認手順などは知っておいて損はありません。

もしご利用の環境で「英語ロケール」で、尚且つ、日本語ロケールの方が良いという場合には実施してください。(人によっては英語のほうが良いという場合もあると思いますので。)

9-1. 現在のロケール確認

システムで設定されているロケールを確認します。ロケールを確認するには"localectl status"コマンドを利用します。
以下のように実行します。

 command
$ localectl status

以下が実行結果です。この場合は「C.UTF-8」がロケールになりますので、Cロケール(POSIXロケール)ということになります。

 log
System Locale: LANG=C.UTF-8
VC Keymap: n/a
X11 Layout: jp
X11 Model: pc105

9-2. 日本語ロケールの表示

Debianではロケールのリストは"localectl list-locales"コマンドで確認できます。実行してシステムで利用できるロケールを表示してみます。

 command
$ localectl list-locales
C.UTF-8
ja_JP.utf8

2つのロケールが表示されました。表示された結果の「ja_JP.utf8」が日本語のロケールになりますので、「ja_JP.utf8」ロケールの設定を行います。

9-3. 日本語ロケールの設定と反映

ロケールを設定するためには"localectl set-locale"コマンドを利用します。以下のように実行します。

 command
# localectl set-locale LANG=ja_JP.utf8

エラーが表示されなければ日本語ロケールへの変更は完了しています。再度"localectl status"コマンドを実行してロケールを確認します。

 command
$ localectl status
System Locale: LANG=ja_JP.utf8
VC Keymap: n/a
X11 Layout: jp
X11 Model: pc105

上記のように「ja_JP.utf8」ロケールが設定されていることが確認できました。この状態では設定は出来ていますが、システムへの反映がされていません。設定を反映するためにはサーバーの再起動を行います。

 command
# reboot

これで日本語ロケールの設定は完了です。Debian 10を以前の記事の通りにセットアップした場合には最初から日本語ロケールがインストール済みで選択されていますので、必要に応じて設定を行って下さい。

10. タイムゾーンの設定

Debian 10のタイムゾーンはインストール時に設定されている場合がほとんどだと思いますが、もし日本のタイムゾーンである「JST」が指定されていない場合には"timedatectl"コマンドで変更できます。

10-1. タイムゾーンの表示

サーバーに設定されているタイムゾーンを確認するには"timedatectl status"コマンドを実行します。

 command
$ timedatectl status
Local time: 金 2019-11-01 15:49:16 JST
Universal time: 金 2019-11-01 06:49:16 UTC
RTC time: 金 2019-11-01 06:49:17
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

表示された内容からタイムゾーンが「Asia/Tokyo (JST)」に設定されていることがわかります。

10-2. タイムゾーンを日本に変更

上記のように日本以外のタイムゾーンが設定されている場合には"timedatectl set-timezone"コマンドでタイムゾーンを変更できます。日本のタイムゾーンは「Asia/Tokyo」になりますので、以下のように実行します。

 command
# timedatectl set-timezone Asia/Tokyo

"timedatectl set-timezone"コマンドの実行後にタイムゾーンを確認して日本に変更されていることを確認します。

 command
# timedatectl status
Local time: 金 2019-11-01 15:50:23 JST
Universal time: 金 2019-11-01 06:50:23 UTC
RTC time: 金 2019-11-01 06:50:23
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

タイムゾーンの項目「Time zone:」が「Asia/Tokyo (JST, +0900)」と表示されていれば、変更は完了です。

11. システムパッケージのアップデート

メディアからインストールされたDebianシステムは含まれているパッケージが古いことがあります。基本的な設定が完了した時点でシステムに含まれているパッケージを全て、新しいものに更新することをお勧めします。Debianでは全てのパッケージを更新するためにも"apt"を利用します。

パッケージの更新を実行しないで、更新されるパッケージのリストだけを確認するには"apt update"コマンドを実行します。以下のように実行します。本環境では更新するパッケージが無かったために「パッケージはすべて最新です。」と表示されています。

 command
# apt update
ヒット:1 http://deb.debian.org/debian buster InRelease
ヒット:2 http://deb.debian.org/debian buster-updates InRelease
ヒット:3 http://security.debian.org/debian-security buster/updates InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。

システムのパッケージを更新する前にどのようなパッケージが更新されるかを確認しておくことをおすすめします。パッケージのアップデートには"apt upgrade"コマンドを実行します。以下のように実行します。

 command
# apt upgrade -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

本環境では更新するパッケージが無かったために更新は行われていません。

システムのパッケージ更新時には、Linuxシステムのコア部分である「カーネル」や重要な「ライブラリ」が更新される場合があります。システムのコア部分が更新された場合には、念のためにシステムの再起動を行っておくほうが良いかと思います。

12. まとめ

Debian 10のインストール後、そのままの状態で利用することはセキュリティ面でリスクが高く、運用にも影響がある構成になります。今回はオススメの設定を10点紹介してみました。この設定を元に、利用する環境や導入先のお客様のニーズに合わせてカスタマイズを行っていただけると良いかと思います。

本記事の内容では、運用や構築には足りない部分や、同じ設定を行うにもより良い方法もあると思いますが、サーバーのベース環境を作成するための基本的な設定ということで了承いただければ幸いです。

Linuxの運用や設定でお悩みの時には

linux-support-cta-img

ブログ記事で紹介されている「Linuxインストール」「OSSアプリケーションの設定」などを試してみたが、なぜかうまくいかない...
Linuxの運用や管理、障害で困っている。
そんなときのために「Linuxサポートサービス」を用意しています。
以下のようなことでお悩みの場合にはLinuxサポートサービスがオススメです。

  • Linuxに詳しい人が周りにいないので問題点について聞くことができない
  • オープンソースのソフトウェアを使いたいが、きちんと設定ができるかが不安
  • 記事を読んでLinuxのインストールを試してみたがうまくインストールができない
  • SambaやApacheが思ったように動かないが、どこが悪いかが分からない
  • Linuxシステムのサポートや運用をおこなう人員がいない

 

Linuxサポートサービスを詳しく見る



レムシステムでは、ブログで紹介した設定ができない場合や、利用中のサーバー・ネットワークについての相談を受け付けています。利用中のシステムやセットアップでお困りの点がございましたら、お気軽にご相談ください。

メールでのお問い合わせ

メールフォームからシステムの
知りたいことや問題点をお問い合わせ

メールで問い合わせる

電話でのお問い合わせ

電話でお気軽にお問い合わせください
(受付時間:平日10:00〜18:00)

053-525-7357

  • この記事を書いた人
  • 最新記事
レムシステム

小村定

SIerでIT系インフラの設計と構築を経験したのちに独立、「レムシステム株式会社」を設立する。インフラ系エンジニア歴20年の経験を活かしてITに関わる課題解決や効率化に取り組む日々を送っている。

Copyright© レムシステム エンジニアブログ , 2019 All Rights Reserved.