CentOS Stream 8 をインストールして最初にすること

CentOS Stream 8 をVMware ESXi にインストールした覚書です。
【追記】その後、 さくらのVPS 2G でも構築を行いましたので、本記事を見直しつつ差分があるところは追記していきます。

ここでは、インストール直後に速攻でやっておいたほうが良いことを記します。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2021-08-11
サーバ VMware ESXi 6.7 U3
OS CentOS Stream 8
実施日2021-09-24
サーバさくらのVPS 2G
OS CentOS Stream 8

※さくらVPSは、セットアップ時のOSを「CentOS Stream8」を選択し、起動直後の状態から始めます。

cat /etc/redhat-release
CentOS Stream release 8

selinuxの停止

selinuxを停止します。

# 確認
getenforce
=> Disabled

有効なとき
vi /etc/sysconfig/selinux
=> SELINUX=disabled

# 変更した場合は再起動
reboot

さくらVPSではデフォルトで「Disabled」なので確認だけでOKです。

root パスワードの変更

passwd

変更後、新しいターミナルを起動。
新しいパスワードでログインできることを確認。
古いパスワードでログインできないことを確認。

以前のさくらVPSは、rootパスワードが送られてきていましたが、最近は申込時に自分で設定する形になっています。
気になる場合はこのタイミングで新たにrootパスワードを変えておくと良いです。

SSHの設定変更

ログイン制限の設定がひととおり完了して、接続確認できるまでは作業中のターミナルは絶対に閉じないでください。

閉じてしまって、ミスってた場合はサーバ会社提供のコンソールとかからログインできる場合があります。(さくらのVPS の場合はコンパネから)

設定ファイルを編集します。
変更した内容は、sshd を再起動するまで反映されません。

vi /etc/ssh/sshd_config
Port 新しいポート

PermitRootLogin no

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
GSSAPIAuthentication no

こちらのように追加・変更します。
すでに設定されているもの、書かれているけどコメント(#)になっているもの、書かれていないものがありますので、デフォルト設定を読みながら設定していきます。

さくらVPSでポートを変更した場合は、コンパネからパケットフィルタの設定変更が必要です。
さくらVPSコンパネ > 対象サーバ > グローバルネットワーク > パケットフィルタを設定
SSHの TCP 22 が設定されているはずですので、新しいポートが開くようにします。

一部のユーザーだけパスワード認証

どうしてもパスワードでないと困る場面で、特定のユーザーだけパスワード認証を許可したい場合は次のようにします。

vi /etc/ssh/sshd_config
Match User user1,user2,user3
  PasswordAuthentication yes

最下行に追記します。

CentOS 8 になって変わったところ

「変わったところ」というか、設定していて気が付いたところです。

RSAAuthentication yes
RhostsRSAAuthentication no

▲この2つは無くなっているようです。
調べたところ、OpenSSH 7.4で SSH v1 のサポートが削除されたので、v1 向けの設定であるこれら2つが不要になったっぽいです。

AuthorizedKeyFile  (旧)
AuthorizedKeysFile (新)

▲Key が Keys と複数形に変わっているようです。

ユーザーの追加

作業用のユーザーを作成します。
root権限での作業は基本的に作業用ユーザーから行うようにします。

ここでは、ユーザー shinohara で行いますので、参考にする場合はコピペせずに shinohara を書き換えてください。

useradd shinohara

パスワードは設定しません。

作成したら、su で shinohara に切り替え、公開鍵を設置します。

su shinohara

mkdir /home/shinohara/.ssh
chmod 0755 /home/shinohara/.ssh
vi /home/shinohara/.ssh/authorized_keys
chmod 0644 /home/shinohara/.ssh/authorized_keys
exit

authorized_keys に公開鍵を貼り付けます。

su の制限

root に戻って、su できるユーザーの設定もついでに行っておきます。

CentOS 8 にwheelユーザーを設定

SSH再起動

# 確認
/usr/sbin/sshd -t

# 再起動
systemctl restart sshd

ポートを変えた場合、再起動する前に、ポートの確認をしてください。
さくらのVPS の場合、コンパネのパケットフィルタで新しいポートが許可されていないと接続できなくなります。

接続確認

sshdの設定変更、ユーザーの追加、公開鍵の設定ができたら、新しいターミナルを起動してログインできるか確認してみます。

このとき、作業中のターミナルは閉じずにそのままにしておいてください。万が一のとき、そのまま復旧作業に入れます。閉じてしまった場合は、コンパネのコンソールなどから行うのでちょっとめんどいです。

ポートの確認

ポートを変更していたら正しいポートでないと接続できなくなっているはずです。

さくらのVPS でパケットフィルタが有効な場合は、コンパネから「パケットフィルタ」に進んで、SSHのポートを変えてやる必要がありますが、ユーザーの追加まで終わってから「パケットフィルタ」の設定を変更します。
このとき、22 はまだ活かしておきます。22を無効化すると作業中のターミナルの接続が切られます。
正しく接続できることを確認できたら 22 は閉じておきます。

rootユーザーの確認

root ユーザーではログインできなくなっているはずです。

パスワード入力の確認

パスワードを入力してのログインはできなくなっているはずです。
本記事のとおり進めていれば、パスワードを設定しているユーザーはいないですが。

公開鍵認証を使ってログインできるはずです。

SSHのIP制限

CentOS 7 までは /etc/hosts.deny と /etc/hosts.allow で行っていましたが、CentOS 8 からは廃止されています。

代わりに firewalld で設定します。

まずは、firewalld が現在動作しているか確認します。

systemctl status firewalld
Active: inactive (dead)

inactive なので動いてません。
設定してから起動もしくは再起動をするのでいまは動作の有無だけ確認しておきます。

設定ファイルを開き、制限を書いていきます。

vi /etc/firewalld/zones/public.xml
<service name="ssh"/>

こちらのような記述があれば削除しておきます。

で、次のように書き加えます。

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <service name="http"/>
  <service name="https"/>
  <rule family="ipv4">
    <source address="123.123.123.123"/>
    <port port="22000" protocol="tcp"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="124.124.124.124"/>
    <port port="22000" protocol="tcp"/>
    <accept/>
  </rule>
</zone>

IPアドレス 123.123.123.123 と 124.124.124.124 のポート 22000 を許可する設定例です。

自分の環境が固定IPでないので、プロバイダのホスト名で設定したかったのですが、やり方が分からなかったので、今のところはとりあえずIPアドレス指定にしました。
まだやってないですがプロバイダのIPアドレス範囲で設定する方法もあります。

ついでに http https も加えておきます。

SSHのポート変更

vi /etc/firewalld/services/ssh-alt.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22★"/>
</service>

★の数字を変更し▼を追加します。

<service name="ssh-alt"/>

firewalld が開始していなかった場合は、開始します。

systemctl start firewalld

自動起動も有効にしておきます。

systemctl enable firewalld

設定を再読み込みして確認します。

# 設定を再読み込み
firewall-cmd --reload

# 設定の確認
firewall-cmd --list-all

dnfの準備

アップデート

CentOS8 では yum はもう使いません。
dnf を使ってアップデートします。

dnf update
dnf upgrade

dnf を初めて使ったかたはちょっとびっくりしたかもしれませんね。

「なんで yum じゃないんだよー、dnf ってなに、覚えるのヤダー」

って思っていた方も少なくないと思います。

dnf update を実行した今はもう分かりますね。
「yum と一緒じゃん」

ロケールの設定

次のようなエラーが出るときにもこちらで解決します

Failed to set locale, defaulting to C.UTF-8
# インストール
dnf install langpacks-ja
# 確認
localectl status
# System Locale: LANG=en_US.UTF-8 になってる

# 設定
localectl set-locale LANG=ja_JP.utf8

# 確認
localectl status

さくらVPSの場合は、dnfのインストールは不要で localectl status すると次のようなエラーになると思います。デフォルトのままでも不都合がないのでそのままにして進めます。

Failed to issue method call: Locale ja_JP.utf8 not installed, refusing.

EPELリポジトリ

インストール

dnf install epel-release

設定変更

vi /etc/yum.repos.d/epel.repo
enabled=0

enabled=1 を 0 にして、普段は無効化しておきます。

必要な時は▼のように明示的に指定します。

dnf --enablerepo=epel ・・・

Remiリポジトリ

インストール

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

設定変更

vi /etc/yum.repos.d/remi-safe.repo
enabled=0

enabled=1 を 0 にして、普段は無効化しておきます。

必要な時は▼のように明示的に指定します。

dnf --enablerepo=remi-safe ・・・

その他いろいろインストール

# wget
dnf install wget

root宛のメールを転送

root宛のメールの送信先を変更します。

vi /etc/aliases
root: sample@example.com
newaliases

bash: newaliases: command not found になった場合は、MTAが無いと思います。
▼で「無い」ことを確認してみます。

alternatives --display mta

newaliases して有効化するにはメールサーバのインストールが必要です。
▼をご覧ください。
CentOS 8 にPostfixをインストール

終わりに

今回はここまでです。

まだ最低限の設定が終わったばかりです。
ここからは「サーバの使用目的」によって必要なものも変わってくると思います。