さくらVPSにAlmaLinux9.3 をインストールして最初にすること

AlmaLinux9.3をさくらのVPS 2G で契約してインストールした覚書です。

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

さくらのVPSでは、「サーバー作成直後に設定しておくべき初期セキュリティ設定」という記事が公開されていますので、こちらも合わせてご覧ください。

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

環境

実施日2024-04-22
サーバさくらのVPS 2G
OSAlmaLinux9.3

VPSを起動する

申込が完了したら、コンパネにログインします。

契約直後は「停止中」です。
下図のように「電源操作」から「起動する」をクリックします。

起動したら、ターミナルを使って操作していきます。
ちなみに「コンソール」から「VNCコンソール」を使ってブラウザ上で操作することもできます。やらかしてしまった時の緊急時にここから操作できることを覚えておくと良いです。

公式のマニュアル

さくらインターネットに詳しいマニュアルが用意されていますので、まだご覧になってない場合は先に一読しておくことをおすすめします。

本ページでやっていく内容と被る部分があります。

さくらVPSのマニュアル

SSHログイン

VPS契約時に設定したユーザーとパスワードで接続します。

接続先のIPアドレスはコントロールパネルに出ています。

デフォルトのポートは 22 です。

申込時に鍵登録を行っている場合、パスワードなしでログインできます。

rootユーザーのパスワードを設定

最初はrootユーザーのパスワードは設定されていないので、設定します。
契約時に作成した「alma」ユーザーで行います。

sudo passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

root に切り替える

su
Password:

root ユーザーに設定したパスワードを入力して切り替え

ちなみに元のユーザーに戻る(rootを抜ける)には

exit

ここからは基本的に root ユーザーでの操作となります。
※root での操作と 一般ユーザーからの sudo の使い分けはケースバイケースです。ここでは root で行う手順とします。

AlmaLinux のバージョンを確認する

cat /etc/redhat-release
AlmaLinux release 9.2 (Turquoise Kodkod)

DNFの更新

まずはこの時点での最新にしておきます。

dnf upgrade

dnf update は dnf upgrade のエイリアスです。
yumの時代は違いに意味がありました。

SELinuxの有効化

さくらVPSではデフォルトでSELinuxが停止されています。
さくらVPSのマニュアル(SELinux)も確認ください。

SELinuxを有効にされる場合は次の手順で行えます。

また、さくらのVPSでなく独自にインストールした場合は逆にデフォルトでSELinuxが有効になっています。無効化したい場合も下記に載せていますのでご確認ください。

有効化するには、まず「Permissive モード」へ。ログを確認して「Enforcing モード」へと段階的に切り替えます。
これは、いきなり「Enforcing モード」にして詰むのを防ぐためです。

Permissive モードにする

確認

getenforce
Disabled

設定ファイルを編集

vi /etc/selinux/config
vi /etc/sysconfig/selinux
# 従来の▲はエイリアスになっている
SELINUX=permissive
# SELINUX=disabled

過去のCentOSなどとは有効・無効を切り替える方法が異なります。

有効にする

grubby --update-kernel ALL --remove-args selinux

変更した場合は再起動

reboot

Enforcing モードにする

Enforcing にする前に Permissive でのログを確認しておきます。

aureport -a

問題なければ、Enforcing にします。

設定ファイルを編集

vi /etc/selinux/config
SELINUX=enforcing
# SELINUX=permissive
# SELINUX=disabled
# 変更した場合は再起動
reboot

# 確認
getenforce
Enforcing

SELinuxを一時的に無効化したいとき

再起動したときは、設定ファイルの内容に戻ります。
トラブル時に、SELinuxが原因なのか切り分けするために使うことがあるかもしれません。

# 一時的に無効化
setenforce 0

# 一時的に有効化
setenforce 1

SELinuxを恒久的に無効化したいとき

過去のCentOSなどとは有効・無効を切り替える方法が異なります。
/etc/selinux/config は触る必要ありません。/etc/selinux/config に説明が載っています。

# 無効にする
grubby --update-kernel ALL --args selinux=0

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

SELinuxの設定ツール

semanage をインストール

dnf install policycoreutils-python-utils

ユーザーの追加

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

もとからある alma ユーザーは最終的に削除し、1から自分が設定したユーザーを残すことにします。

useradd shinohara
passwd shinohara

パスワードは超強力なものを設定して忘れましょう。(冗談です)
というのもパスワードを使用する場面がないからです。もし使用する場面があるなら使用しない方法(鍵認証など)に切り替えるべきです。

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

su shinohara
mkdir /home/shinohara/.ssh
chmod 0700 /home/shinohara/.ssh
vi /home/shinohara/.ssh/authorized_keys
chmod 0600 /home/shinohara/.ssh/authorized_keys
exit

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

su の制限

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

AlmaLinux9.3でsuを制限するwheelユーザーの設定

接続の確認

ここで作成したユーザーで接続できることを確認しておきます。
新しくターミナルを開いて接続できればOKです。

接続できない場合はログを確認します。

tail -n 100 /var/log/secure
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

こちらのようなログが出ている場合は対策が必要です。

原因としては、「ssh-rsa」タイプで作られた鍵を許可しないというものです。
まー、古いので新しい鍵使ってね、です。

で、上記エラー内容で調査していくと「pubkeyacceptedalgorithms +ssh-rsa」と書かれた記事に行きつくと思います。
罠です。

SSHのバージョンを確認してみます。

ssh -V
OpenSSH_8.7p1, OpenSSL 3.0.7 1 Nov 2022

記事をよく見ていくと丁寧に書かれてるところでは、「バージョン8.8から」という文字が見つかると思います。

8.8からと書かれてるのに、自分のとこは8.7
なんだかおかしな匂いがしてきました。
ということで、ここではヒントまでにします。

ということで、素直に鍵を作ったほうが良いです。

TeraTerm で鍵を作る

TeraTermを開いて、接続のダイアログは閉じて、「設定」からの「SSH鍵生成」です。
ED25519 にして生成します。

putty / puttygen.exe で ppk にする

puttygen.exe を起動して、Conversions > Import Key > 秘密鍵を選択

Conversions > Export OpenSSH Key

○○.ppk の名前にして保存

鍵を配置して接続確認

公開鍵を、.ssh/authorized_keys に配置し、実際にログインできることを確認できたらOKです。

SSHの設定変更

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

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

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

vi /etc/ssh/sshd_config

説明

man sshd_config

肝になるのは次の設定です。
このタイミングではポートは変えません。(SELinuxやFirewallも関連するため)

PermitRootLogin no

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no
PermitEmptyPasswords no
KbdInteractiveAuthentication no
GSSAPIAuthentication no

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

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

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

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

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

最下行に追記します。

変わったところ

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

RSAAuthentication yes
RhostsRSAAuthentication no

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

AuthorizedKeyFile  (旧)
AuthorizedKeysFile (新)

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

ChallengeResponseAuthentication
が無くなって
KbdInteractiveAuthentication
に変わったようです。

SSH再起動

# 確認
/usr/sbin/sshd -t

# 再起動
systemctl restart sshd

接続確認

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

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

rootユーザーの確認

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

パスワード入力の確認

パスワードを入力してのログインはできなくなっているはずです。
centos ユーザーをパスワード認証にしていたらログインできなくなっているはずです。既にログインしている場合は切断されたりはしませんので、新しくターミナルを起動して確認します。

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

ポートの変更

ポートを変更するときは、外側から順に設定していき、sshdの設定時には新旧のポートが開いた状態とします。
sshdのポート切り替え後、今度は反対に内側から外側に向かって古いポート設定を削除していきます。

パケットフィルタの設定

さくらインターネットだとコンパネにあります。

現在のポートは生かしつつ、新しいポートを追加します。

firewalledのポート設定

# 確認
systemctl status firewalld

起動していなければ特になにもしなくて構いません。

この記事通りに進んでいたらfirewalledはまだ設定していないはずですが、もし設定していたら、現在のポートは生かしつつ、新しいポートを追加します。

下記をご覧ください。
AlmaLinux9.3にファイアーウォールを設定

SELinuxのポート設定

SELinuxを無効にしていれば不要です。

# 2222 の tcp を ssh として使う場合
semanage port -a -t ssh_port_t -p tcp 2222

# 確認
semanage port -l | grep ssh

sshdのポート設定

vi /etc/ssh/sshd_config
Port 22

ここの数字を変更し、確認してから sshd の再起動で反映されます。

# 確認
/usr/sbin/sshd -t

# 再起動
systemctl restart sshd

接続確認

新しくターミナルを起動して、変更したポートで接続できればOKです。

変更前のポートを閉じる

外側のポートを閉じたら、元のポートで接続していたターミナルからは接続できなくなります。

SELinux の 22 は削除できないっぽいのでそのままにしておきます。

# 22 の tcp を ssh を削除
semanage port -d -t ssh_port_t -p tcp 22

# 確認
semanage port -l | grep ssh

firewalled はまだ設定していないので特になし
インストールしているなら元のポートを削除しておきます。

パケットフィルタからも元のポートを削除しておきます。

SSHのIP制限

さくらのVPSを使用している場合は、コントロールパネルのパケットフィルタ―設定から行えます。

AlmaLinuxでIPアドレス制限を行う場合は、firewalld で設定します。
下記ページを参考に設定を行います。

AlmaLinux9.3にファイアーウォールを設定

dnfの準備

アップデート

インストール直後にやっているはずなので確認だけです。

dnf upgrade

日本語環境にする

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

Failed to set locale, defaulting to C.UTF-8

インストール

dnf install langpacks-ja glibc-langpack-ja
# 確認
localectl status
# System Locale: LANG=en_US.UTF-8 になってる

# 設定
localectl set-locale LANG=ja_JP.UTF-8

# 確認
localectl status

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-9.rpm

設定変更

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

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

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

dnf --enablerepo=remi-safe ・・・

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

dnf install wget
dnf install unzip
dnf install tar

時刻合わせの自動

▼をご覧ください。

AlmaLinux9.3の時刻合わせにChronyをインストール

DNFの自動アップデート

▼をご覧ください。

AlmaLinux9.3で DNF の自動アップデートを設定する

サーバ設定をGit管理できるようにする

ターミナルを開いて vi で編集しても良いのですが、バージョン管理の問題があります。
サーバ内に Git を直接入れる方法もありますが、地雷がありそうで導入しづらいと思います。

ここでは、必要なファイルを rsync でローカルに同期し、使い慣れたエディタで編集、Gitにコミットして、rsync でファイルを戻す流れができるようにしていきます。

▼をご覧ください。

AlmaLinux9.3の設定管理をGitで行う

root宛のメールを転送

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

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

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

alternatives --display mta

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

AlmaLinux9.3にメールサーバのPostfixをインストール

Postfixインストール後は、newaliases できるようになってます。

newaliases

終わりに

今回はここまでです。

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