Linux サーバー

【CentOS8】サーバー構築初期設定

悩む人
Linuxの勉強を始めたのはいいけど、サーバーを構築する前に、最低限設定しておいた方が良いとかあるの?教えてほしい。

 

はい、あります。サーバーを構築する前に、初期設定として、最低限やっておいた方が良い作業をまとめたいと思います。

 

 

前提条件

CentOS8の環境があること

CentOS8インストール手順

続きを見る

 

一般ユーザーとrootユーザーについて

一般ユーザーの場合、Linuxコマンドで実行できないものがたくさんあります。

viで編集すら出来ません。

 

実行するには、root権限が必要です。

なので、「rootユーザーに切り替えて、実行するか、sudoコマンドで実行するか」の2択に分かれます

 

rootユーザーを切り替えて、作業を行うことは、意図しないコマンドや操作があった場合、取り返しが付かない状態になります。

なので、通常は、sudo権限を一般ユーザーに与えておき、sudoコマンドで実行していくのが好ましいです。

 

この辺りは、各組織のポリシーによるので、なんともいえませんが、こうした考え方があることは知っておきましょう。

 

一般ユーザーとrootユーザーの記号の違い

Linuxを扱っていく上で、基本中の基本、一般ユーザーとrootユーザーの記号の違いを、まず覚えましょう。

  • 一般ユーザー 「$」で表現される
  • rootユーザー 「#」で表現される

コマンドプロンプトの部分です。

 command
[root@CentOS8 ~]# ←コレ

 

rootユーザーの切り替え

一般ユーザーでログインした後、rootユーザーに切り替えるコマンドです。

 command
$ su  -

su(super user)コマンドの後ろのハイフンは、「ディレクトリ属性も含めて、rootユーザーとして切り替える」という意味です。

特に理由がない限り、ハイフンを含めておきしょう。変な所で躓かなくて済みます。

 

元のユーザーに戻る

rootユーザーから、元のユーザーに戻るには、「exit」コマンドを使用します。

 command
$ exit

 

また、作業終了時にも、exitコマンドを使ってログアウトします。

 

yum(dnf)パッケージアップデート

Linuxを触ったことがある人は、お馴染みの、yumコマンドです。

CentOS8から、yumは非推奨になり、dnfコマンドが推奨されるようになりました。変わりますねー・・

 

背景としては、yumがpython2系であり、dnfがpython3系ということもあって、古くなっているんですね

なので、移行が必要だということらしいです。ほぼ、同じ様に使える感じなので、どうせなら「dnfコマンド」で、実行してみます。

 

アップデートがあるか、チェック

dnfでパッケージの更新があるか確認します。オプションはyumと同じです。

 command
# dnf check-update

パッケージリストが表示されれば、アップデートが可能ということです。

 

アップデートを実施します。

 command
# dnf -y update

-y オプションは、「yes」 の略で、「実行確認を飛ばして、アップデートを行う」という意味です。

確認した後に実行したい場合は、-yをいれずに実行する形でも良いです。

 

パッケージのアップデートは、脆弱性の修正であったり、セキュリティ面でも最新にしておく必要があります

初期設定時には、必ず実施しておくようにしましょう。

 

selinuxの無効化

selinuxは、セキュリティ向上のためのサービスですが、サーバー構築時に上手く動作しなかったり、人を躓かせることに長けているので、無効化しておきます。

昔に、selinuxのせいでサービスが起動せず、四苦八苦した苦い思い出があります。やっつけておきましょう。

 

selinuxが有効になっているか確認

 command
# getenforce
Enforcing

「Enforcing」は有効という意味です。

 

無効にするために、ファイルを編集します。

 command
# vi /etc/selinux/config
 config
前: SELINUX=enforcing
後: SELINUX=disabled

「disabled」に変更してください。スペルミスがないよう気を付けてください。

 

変更した後は、有効にするために、OSを再起動します。

 command
# reboot

再起動後、再度SSH接続をしてください。

 

selinuxが無効になったか確認します。

 command
# getenforce
Disabled

「Disabled」になっていればOKです。

 

ネットワークの設定

CentOS8のインストール時に、IPアドレスをDHCPで取得するようにしていました。

開発環境でサーバーを利用する場合、何かのタイミングでIPアドレスの割り当てが変更されると、いちいちIPアドレスを調べる必要があるので面倒です。

サーバーのIPアドレスを固定にします。

 

ネットワークを設定する

ネットワークを設定する際に、コネクション名の指定が必要なので、現在のコネクション名を確認します。

ここは、各環境で違いますので、要注意です。

 

・コネクション名を確認する

 command
# nmcli connection show
NAME    UUID                  TYPE      DEVICE
enp0s3  各環境のUUID ethernet  enp0s3

NAMEの部分が、コネクション名になります。僕の環境の場合、「enp0s3」でした。

 

以下、設定する、ネットワーク情報です。

  • IPアドレス: 192.168.1.250
  • サブネットマスク: 255.255.255.0
  • DNSサーバーとゲートウェイ: 192.168.1.1

僕は、サーバーのIPについては最後の数字あたりに設定するようにしています。

任意ですので、好きにしてもらってかまいませんが、自分がわかりやすいことが鉄則です。

 

以下、ネットワーク設定コマンドです。

 command
# nmcli connection modify enp0s3 ipv4.method manual connection.autoconnect yes ipv4.addresses 192.168.1.250/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1

変更を加えた後、有効にします。

 command
# nmcli connection up enp0s3

 

IPアドレスが変更されるので、SSH接続が切れます。再度ログインしてください

IPアドレスを確認します。

 command
# ip addr
enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:9c:40:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.250/24 brd 192.168.1.255 scope global noprefixroute enp0s3       
valid_lft forever preferred_lft forever
inet6 240d:1a:7a8:2100:d66c:621:69b:c89b/64 scope global dynamic noprefixroute

inetの部分が変更されているのが確認できました。

これで、固定IPになりました。WEBサーバーを立てた際などに、常に設定したIPアドレスでアクセスできるということになります。

 

不要サービスの無効化

不要なサービスを停止しておくことで、無駄なリソースを消費せずに済みます。

また、セキュリティ面でも有効なので、使わないものは停止しておきます。

 

最小構成でインストールしていたので、今回は、一つのサービスだけを停止します。

不要なサービス

・auditd ➡ ログ監査サービス

必要であると判断した場合は、無効にする必要はありません。

今回の用途は必要ないと判断したので無効にしたいと思います。

 command
# systemctl disable auditd.service

 

自動起動のサービス一覧を表示

 command
# systemctl list-unit-files
auditd.service                             disabled

disabledが確認できればOKです。

qキーでエスケープします。

 

初期設定時に、不要サービスの停止は作業項目に入れておくべきなので、今回は一つだけでしたが、取り上げてみました。

 

ログインユーザー作成

初期状態では、rootユーザーのみなので、ルート以外の一般ユーザーを作成し、rootユーザーのsshログインは禁止にしたいと思います。

インストール時にユーザー作成している場合は必要ないです。

 

ユーザーを追加します。

 command
# useradd -p {パスワードを入力} testuser

useradd -pオプションでパスワードを設定します。波括弧は任意に変化という意味で付けているだけなので、入力はいりません。

好きなパスワードを設定してください。また、ユーザー名も自由に決めてください。

 

ユーザーを追加したら、無事に追加できたか確認します。

 command
# cat /etc/passwd
testuser:x:1000:1000::/home/testuser:/bin/bash

上記のように追加したユーザーが表示されていればOKです。

 

suコマンドの制限

デフォルトでは、一般ユーザー全てに対して、suコマンドが許可されている状態です。

ということは、誰かがログインできれば、rootユーザーになり得ることができるということで、セキュリティ的によろしくありません。

rootユーザーになれる人を限定するために、wheelグループに所属させて、root制限をかけます。

 

対象ユーザーをwheelグループに所属させます。

 command
# usermod -g wheel testuser

wheelグループに所属したか確認します。

 command
# id testuser
uid=1000(testuser) gid=10(wheel) groups=10(wheel)

gidとgroupsが「wheel」になっていればOKです。

 

suコマンド設定ファイルを変更します。

 command
# vi /etc/pam.d/su
 config
前: #auth           required        pam_wheel.so use_uid
後: auth           required        pam_wheel.so use_uid

#を削除して、有効にします。

:wqで、保存終了します。

 

これで、wheelグループ以外のユーザーでsuコマンドを実行しても、

 command
su: 拒否されたパーミッション

というように表示され、rootユーザーになることを禁止できます。

 

複数人に対し、ユーザーアカウントを管理する場合に、有効ですので、覚えておきましょう。

 

SSH設定

SSHの設定をする前に、一度ログアウトし、追加したユーザーで、SSH接続できるか試してみましょう。ここは、自分で考えて実行してみてください。

 

もし、ユーザーパスワードが上手く設定できていなかったりした場合は、ルートユーザーの状態で、

 command
# passwd ユーザー名

を実行することで、強制的にパスワードを変更することができます。

 

SSHサーバーのデフォルトの設定は、rootのログインを許可しています

これでは、ログインを突破された場合に、サーバーを好き放題にされてしまうので、rootログインは禁止にします。

 

ssh設定ファイルを編集します。

 command
# vi /etc/ssh/sshd_config
 config
前: PermitRootLogin yes
後: PermitRootLogin no

PermitRootLoginを「no」に変更してください。

:wq で、保存終了します。

 

コンフィグテスト

sshdのconfigを編集した際に、テストをしておくことで、構文がエラーになって、サービスが停止してしまうと、一生ログインできません。

以下、ツイートしました。

必ず、sshdの設定をした場合は、テストしましょう。

 command
# sshd -t

何も出力されなければOKです。

 

サービスを再起動します。

 command
# systemctl restart sshd

 

サービスのステータスを確認します。

 command
# systemctl status sshd

active (running)が確認できればOKです。

 

一度、ログアウトし、rootログインで拒否されるか確認してみましょう。

rootでのログインが拒否されました。

ひとまず、安心。ということにしておきましょう。

 

タイムゾーンなどの日付確認

最後に、サーバー時刻が日本時間にあっているか、確認しておきましょう。

CentOS8インストール時にNTPサーバーなどを設定できていれば、確認だけで済みます。

日付確認

 command
# date
2020年 11月 25日 水曜日 13:42:45 JST

現在の時刻と同じならOKです。

 

タイムゾーン確認

 command
# timedatectl status
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active

上記の3つの項目のようになっていればOKです。

 

NTPサーバー確認

 command
# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
==================================================================
^* ntp1.jst.mfeed.ad.jp          2   8   377   231   +104us[  +90us] +/-   45ms
^+ ntp2.jst.mfeed.ad.jp          2   8   377   162   +296us[ +296us] +/-   56ms
^+ ntp3.jst.mfeed.ad.jp          2   8   377   162   +388us[ +388us] +/-   77ms

インストール時に設定したものが、反映されていることが確認できればOKです。

 

まとめ

  • サーバー構築はなるべくセキュリティ面を高くする
  • 無駄なリソースを消費しない。最小構成を意識する

サーバー初期設定は、CentOS8だけでなく、AmazonLinux2などにも、適用できます。考え方は同じなので、もし、違うやり方だったとしても、ググれば、すぐに対応できるはずです。

まだ、細かく設定すべき項目はありますが、最低限としては、これぐらいだろうという認識です。

 

不意なセキュリティホールから第三者の攻撃をされないように、しっかりと機密情報を守っていけるようにしましょう。

では、今回はこの辺でー。

-Linux, サーバー
-

© 2021 FuwaFuwaShoChan BLOG