2023年の記事からはバージョンアップで色々変わっているのでメモ。
変わったところ
翻訳
前に私が訳したものが公式に採用されているので、.mo を作って上書きする必要はない。
その後追加されたものなど未訳部分はあるが。
sudoers.d は admin ではなく hestiaweb になった
/etc/sudoers.d/hestiaweb に記述されるようになった。
だが admin ユーザーでウェブサイトを運営せず別途ユーザーを作れというマニュアルは変わっていない。
Exim を入れない指定で HestiaCP をインストールしても Exim が入る
何かの recommends で入ると思われる。削除して問題ない。
sudo apt purge --autoremove exim4-base
HestiaCP (ポート 8083) の SSL 証明書
インストール完了後、OS を再起動すると Let’s Encrypt の証明書が作成される (/etc/cron.d/hestia-ssl が実行されて自己削除)。
WordPress インストーラー
日本語 (ja) のインストールに対応している。
phpMyAdmin が 503 エラーで動かない
/etc/apache2/conf.d/phpmyadmin.inc を編集。
この行を:
SetHandler "proxy:unix:/run/php/www.sock|fcgi://localhost"
こうする:
SetHandler "proxy:unix:/run/php/php8.3-fpm-host.example.com.sock|fcgi://localhost"
host.example.comは実際にインストールする FQDN に置換。- これはバックエンド・テンプレート (PHP-FPM) が
default(8.3) の場合で、PHP バージョンを変更している場合は8.3から変更。
その後 Apache をリロード。
sudo systemctl reload apache2
SFTP できない
internal-sftp の記述が間違っているので SFTP できない。
/etc/ssh/sshd_config を編集。
この行を:
Subsystem sftp internal-sftp-server
こうする:
Subsystem sftp internal-sftp
その後 openssh-server を再起動。
sudo systemctl restart ssh
修正前でも以下の両条件を満たすと SFTP できた。
- シェルを利用可能なユーザー
- SFTP のパス (path) を設定可能なクライアント (
/usr/lib/openssh/sftp-serverを指定)
他に気づいたところなど
パッケージを保存するとシェルが変更される
たとえば quota 変更のためにパッケージを修正して保存すると、そのパッケージの対象ユーザー全員のシェルがパッケージで指定したシェルに変更されるようだ。
対策:
- パッケージ保存後にユーザー編集でシェルを変更
- シェルを使うユーザー用に別パッケージを作って該当ユーザーに適用
OP25B の設定
これは OP25B 対策の話ではなく、HestiaCP でメイル機能 (Exim) を使わない場合に、ユーザーが乗っ取られても直接外部のポート 25 に spam 等を送信させない設定の話。
HestiaCP では iptables を使っているので、HestiaCP ドキュメントの Firewall / How can I customize iptables rules? に従う。
/usr/local/hestia/data/firewall/custom.sh を作る。
内容:
#! /bin/sh
IPTABLES="$(command -v iptables)"
IP6TABLES="$(command -v ip6tables)"
$IPTABLES -I OUTPUT -p tcp --dport 25 -j REJECT --reject-with tcp-reset
$IP6TABLES -I OUTPUT -p tcp --dport 25 -j REJECT --reject-with tcp-reset
2要素認証 (2FA) のホワイトラベル
ホワイトラベル・オプションで名称や送信されるメイルを編集できるが、2FA は「Hestia Control Panel」 がハードコードされている。
変更するには以下の2ファイルを編集する。
/usr/local/hestia/web/inc/2fa/secret.php/usr/local/hestia/web/inc/2fa/check.php
この行を編集して Hestia Control Panel を好みの名前 (同一) に:
$tfa = new TwoFactorAuth(new QRServerProvider(), "Hestia Control Panel");
リモートバックアップ
HestiaCP はリモートバックアップ機能を有しているが、この機能のバックアップ先は一つだ。
私は地理的に分散した複数の場所に rsync でリモートバックアップしているので、やり方を書いておく。
TL;DR
hestiawebでrsyncを実行するシェルスクリプトを設置、crontabから実行
前提:
- ローカルバックアップは
/backup/に作られる。ファイルのオーナーhestiaweb、グループ各ユーザー、パーミッションは640- →
hestiawebアカウントでrsyncを実行
- →
- バックアップログはオーナー
root、グループ各ユーザー、パーミッション660で作られる- →
hestiawebには権限がないのでrsyncの対象からログを除外 (--exclude '*.log')
- →
sudo mkdir /home/hestiaweb
sudo mkdir /home/hestiaweb/.ssh
sudo chmod 700 /home/hestiaweb/.ssh
sudo chown -R hestiaweb:hestiaweb /home/hestiaweb
sudo -u hestiaweb ssh-keygen -t ed25519
できた /home/hestiaweb/.ssh/id_ed25519.pub の中身をバックアップ先サーバーの ~/.ssh/authorized_keys に入れる。
/home/hestiaweb/backup.sh を作る。
内容:
#! /bin/sh
/usr/bin/rsync -av --delete --exclude '*.log' /backup/ backup@backup1.example.com:/backup/ > /dev/null 2>&1
/usr/bin/rsync -av --delete --exclude '*.log' /backup/ backup@backup2.example.com:/backup/ > /dev/null 2>&1
(backup@backup[12].example.com:/backup/ は実際の環境に応じて修正すること)
次は crontab の編集。次のどちらでもいい。
adminユーザーで HestiaCP にログイン、右上歯車アイコン→設定→Panel Cronjobsと進むsudo -u hestiaweb crontab -e
末尾に以下を追加。
0 6 * * * /home/hestiaweb/backup.sh
(毎日 05:10 にバックアップ作成が開始するので、完了後の時刻を設定すると良い)