どこにでもいるような普通の一般人が、たまに自分用メモを書いてる。

Hestia Control Panel (HestiaCP) 2025年メモ

日付:

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"
  1. host.example.com は実際にインストールする FQDN に置換。
  2. これはバックエンド・テンプレート (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 できた。

  1. シェルを利用可能なユーザー
  2. 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

  • hestiawebrsync を実行するシェルスクリプトを設置、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 にバックアップ作成が開始するので、完了後の時刻を設定すると良い)

comments powered by Disqus