Manome fametrahana mandeha ho azy ny script Adminer amin'ny tsindry iray monja ny HestiaCP (anisan'izany ny fanamarinana Nginx + fiarovana roa sosona Fail2Ban).

Atsaharo ny fametrahana Adminer amin'ny tanana! Script iray ihany no afaka mikarakara ny fikirakirana fiarovana manontolo.

Andro vitsivitsy lasa izay, nisy namako iray, izay miasa amin'ny fitantanana rafitra ihany koa, nitaraina tamiko fa mandany ny ankamaroan'ny andro izy vao mametraka ny Adminer ao amin'ny mpizara azy. Tsy hoe sarotra apetraka ny Adminer; rakitra PHP fotsiny izy io, azonao avoaka fotsiny dia mandeha tsara. Fa ny olana dia tsy afaka mamoaka rakitra PHP fotsiny ianao dia mijanona eo.

Mila manamboatra subdomains ianao, mampiditra plugins, mametraka ny fanamarinana Nginx, ary manamboatra ny Fail2Ban mba hisorohana ny fanafihana brute-force. Tsy sarotra ny dingana tsirairay, fa rehefa tafangona dia mamorona baiko sy rakitra fikirakirana maromaro.

Ny tena mahasosotra kokoa dia ny hoe mora iharan'ny fahadisoana ireo fikirakirana mifandraika amin'ny fiarovana toy ny fanamarinana sy ny rindranasa fiarovana amin'ny afo. Ny tsy fitandremana kely dia mety hampiharihary ny interface fitantanana angon-drakitra amin'ny aterineto ho an'ny daholobe, ka hahatonga azy ho azon'ny rehetra idirana.

Nihomehy aho tamin'izany fotoana izany satria efa nanao toy izany koa aho taloha. Tatỳ aoriana, tsy zakako intsony izany, ka nanoratra script fametrahana tsindry iray aho mba hanamorana ireo dingana rehetra ireo.

Manome fametrahana mandeha ho azy ny script Adminer amin'ny tsindry iray monja ny HestiaCP (anisan'izany ny fanamarinana Nginx + fiarovana roa sosona Fail2Ban).

Nahoana no tsy ampiasainaphpMyAdmin

Mety hanontany ianao hoe, maninona raha mampiasa phpMyAdmin, izay efa mahazatra kokoa?

Eny tokoa, manana mpampiasa maro kokoa sy vondrom-piarahamonina midadasika kokoa ny phpMyAdmin. Saingy heveriko fa mahavita asa tsara kokoa amin'ny lafiny vitsivitsy ny Adminer.

Voalohany, maivana izy io; rakitra PHP tokana fotsiny ny Adminer, raha rakitra maromaro kosa ny phpMyAdmin. Faharoa, azo antoka izy io; ny filozofian'ny Adminer amin'ny famolavolana dia "tsy azo itokisana amin'ny ankapobeny", midika izany fa mila manamboatra mazava tsara ny fampahalalana momba ny fifandraisana ianao mba hampandehanana ny angon-drakitra.

Ny lafiny iray hafa dia ny fahombiazana; haingana kokoa noho ny phpMyAdmin ny Adminer rehefa mikirakira tahiry lehibe.

Mazava ho azy fa tsy misy amin'ireo no zava-dehibe indrindra. Ny zava-dehibe indrindra dia ity script ity dia midika fa tsy mila manamboatra tanana ireo zavatra mifandraika amin'ny fiarovana ireo intsony aho.

Inona marina no nataon'ilay script?

Tsotra dia tsotra ny hevitra ao ambadiky ity script ity: ny manao ho azy ny dingana rehetra ataonao amin'ny tanana.

Ho an'ny fidirana ifandrimbonana, ny script dia hametraka fanontaniana vitsivitsy aminao: anarana mpampiasa HestiaCP , anaran-tsehatra, anarana mpampiasa fanamarinana, ary tenimiafina. Ireo fotsiny no ilainao ampidirina, ary ny script no hikarakara ny ambiny.

Mamorona ho azy ny lahatahiry fototry ny tranonkala ny script, manamarina raha efa napetraka ny apache2-utils (ampiasaina hamoronana rakitra tenimiafina) sy ny tontolo iainana PHP, ary mikarakara ny famoronana lahatahiry sy ny fametrahana fiankinan-doha.

Rehefa misintona ny Adminer ny script dia miezaka misintona ny dikan-teny farany avy amin'ny tahiry ofisialy aloha. Raha tsy misy ny tahiry ofisialy dia mifindra ho azy any amin'ny tahiry GitHub Releases marin-toerana izy. Heveriko fa tena zava-dehibe izany, satria mety tsy marin-toerana indraindray ny tahiry ofisialy; efa sendra fahatapahan'ny fifandraisana aho taloha.

Mikasika ny fampidinana plugin, ny script dia hisintona plugin fototra telo: plugin.php no mpandrindra plugin, fc-sqlite-connection-without-credentials.php no ampiasaina hikarakarana fifandraisana tsy misy tenimiafina, ary login-password-less.php dia manohana ny fidirana amin'ny hash tenimiafina.

Mikasika ny famoronana hash tenimiafina sy ny index.php, misy antsipiriany kely: ny script dia mampiasa getenv() mba haka ny tenimiafina fa tsy mampiasa mivantana ny $_ENV. Izany dia misoroka ny olana amin'ny fikirakirana php.ini izay mahatonga ny kajy hash ho foana. Izaho manokana dia sendra io fandrika io ary nandany fotoana ela aho nahita fa tsy nalefa tao amin'ny php.ini ny scope 'E'.

Ho an'ny fanamboarana ny fanamarinana Nginx, ny script dia mampiasa ny mekanisma "include" teratany an'ny HestiaCP fa tsy manova mivantana ny rakitra fikirakirana lehibe Nginx. Ny tombony amin'ity fomba fiasa ity dia ny tsy ho diso ny fanamarinana na dia averinao amboarina aza ny fikirakirana ny sehatra.

Ao amin'ny fikirakirana Fail2Ban, ny script dia mamorona fitsipika fanivanana mba hanaraha-maso ny lesoka 401. Raha tsy miditra in-3 ao anatin'ny 10 minitra ny IP iray, dia ho voasakana mandritra ny adiny 1 izany.

Mikasika ny fanamboarana ny fahazoan-dàlana sy ny famerenana ny serivisy, ny script dia hametraka ho azy ny fahazoan-dàlana rakitra marina ary hamerina ny PHP-FPM, Nginx, ary Fail2Ban.

Tena zava-dehibe amiko ny fiarovana.

Raha ny marina, ny fiarovana ny fitaovana fitantanana angon-drakitra no zavatra tena zava-dehibe amiko.

Eritrereto ange e, afaka mikirakira mivantana ny angon-drakitra rehetra ao amin'ny mpizara anao ny Admin. Raha toa ka aseho amin'ny aterineto ho an'ny daholobe izany ary misy olona mijery azy, dia tsy ho azo eritreretina ny vokany.

Ity script ity dia manana fiarovana telo sosona.

Ny sosona voalohany dia ny HTTP Basic Auth an'ny Nginx. Rehefa miditra amin'ny Adminer ianao dia hiseho boaty fifanakalozan-kevitra ny navigateur-nao izay mangataka anao hampiditra ny anaranao sy ny tenimiafinao. Rehefa avy nampiditra ny fampahalalana marina ianao vao afaka mahita ny pejy fidirana Adminer.

Ny sosona faharoa dia ny fidirana amin'ny tenimiafina hash an'ny Admin. Namboariko tao amin'ny index.php ny hashing tenimiafina, ka na dia misy olona mandingana ny fanamarinana Nginx aza, dia tsy ho fantany ny tenimiafina fidirana an'ny Admin.

Ny sosona fahatelo dia ny fiarovana amin'ny alalan'ny herisetra ataon'ny Fail2Ban. Raha misy olona manandrana manery ny tenimiafinao, dia hanakana ho azy ny adiresy IP-ny ny Fail2Ban.

Raha ampiarahina ireo sosona fiarovana telo ireo dia azonao atao tsara ny mametraka ny Administrator amin'ny aterineto ho an'ny daholobe tsy misy ahiahy.

Tsindrio indray mandeha, tena tsindrio iray monja tokoa.

Tena tsotra ny dingana fametrahana azy.

#!/bin/bash
# ==============================================================================
# Adminer + 插件 + Nginx Auth + Fail2Ban 一键自动化部署脚本 (HestiaCP 完美版)
# ==============================================================================

set -e

# 必须以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "❌ 错误:请使用 root 或 sudo 运行此脚本!"
exit 1
fi

# ------------------------------------------------------------------------------
# 1. 交互式输入配置参数
# ------------------------------------------------------------------------------
read -p "请输入 HestiaCP 用户名 [默认: admin]: " HESTIA_USER
HESTIA_USER=${HESTIA_USER:-admin}

read -p "请输入 Adminer 部署域名 [例如: adminer.example.com]: " DOMAIN
if [ -z "$DOMAIN" ]; then
echo "❌ 错误:域名不能为空!"
exit 1
fi

read -p "请输入 Nginx 网页认证用户名 [默认: adminuser]: " AUTH_USER
AUTH_USER=${AUTH_USER:-adminuser}

read -sp "请输入防护密码 (用于 Nginx 认证与 Adminer 登录): " AUTH_PASS
echo ""
if [ -z "$AUTH_PASS" ]; then
echo "❌ 错误:密码不能为空!"
exit 1
fi

# 核心路径变量定义
WEBROOT="/home/$HESTIA_USER/web/$DOMAIN/public_html"
ADMINER_FILE="$WEBROOT/adminer.php"
PLUGIN_DIR="$WEBROOT/plugins"
HTPASSWD_FILE="/etc/nginx/.htpasswd-$DOMAIN"

echo -e "\n🚀 开始部署 Adminer 到域名: $DOMAIN ..."

# ------------------------------------------------------------------------------
# 2. 创建目录与安装基础依赖
# ------------------------------------------------------------------------------
if [ ! -d "$WEBROOT" ]; then
echo "📁 创建 Web 根目录: $WEBROOT"
mkdir -p "$WEBROOT"
fi
mkdir -p "$PLUGIN_DIR"

echo "🔍 检查基础依赖环境..."
if ! command -v htpasswd >/dev/null 2>&1; then
echo "📦 安装 apache2-utils 工具包..."
apt-get update -qq && apt-get install -y -qq apache2-utils
fi

if ! command -v php >/dev/null 2>&1; then
echo "❌ 错误:未检测到系统的 PHP 环境!"
exit 1
fi

# ------------------------------------------------------------------------------
# 3. 安全下载 Adminer 核心程序
# ------------------------------------------------------------------------------
echo "📥 正在下载最新版 Adminer..."
curl -sL -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
-o "$ADMINER_FILE" "https://www.adminer.org/latest.php"

# 校验下载有效性
if ! grep -q "<?php" "$ADMINER_FILE"; then
echo "⚠️ 官方源连接异常,正在切换至 GitHub Releases 稳定源..."
curl -sL -o "$ADMINER_FILE" \
"https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php"
fi

# ------------------------------------------------------------------------------
# 4. 下载官方核心插件与加载器
# ------------------------------------------------------------------------------
echo "🧩 正在下载插件组件..."
curl -sL -o "$PLUGIN_DIR/plugin.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/plugin.php

curl -sL -o "$PLUGIN_DIR/fc-sqlite-connection-without-credentials.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/fc-sqlite-connection-without-credentials.php

curl -sL -o "$PLUGIN_DIR/login-password-less.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/login-password-less.php

# ------------------------------------------------------------------------------
# 5. 安全生成密码 Hash 并构建入口文件 index.php
# ------------------------------------------------------------------------------
echo "⚙️ 生成密码 Hash 与 index.php 配置..."
# 使用 getenv() 替代 $_ENV,防止 php.ini 未开启 E 作用域导致 Hash 计算为空
HASHED_PASSWORD=$(AUTH_PASS="$AUTH_PASS" php -r 'echo password_hash(getenv("AUTH_PASS"), PASSWORD_DEFAULT);')

cat > "$WEBROOT/index.php" <<EOF
<?php
function adminer_object() {
include_once "./plugins/plugin.php";
include_once "./plugins/fc-sqlite-connection-without-credentials.php";
include_once "./plugins/login-password-less.php";

return new AdminerPlugin([
new AdminerFCSqliteConnectionWithoutCredentials(),
new AdminerLoginPasswordLess('$HASHED_PASSWORD'),
]);
}
include "./adminer.php";
EOF

# ------------------------------------------------------------------------------
# 6. 配置 Nginx 基础认证 (完全依赖 HestiaCP 原生 Include 机制)
# ------------------------------------------------------------------------------
echo "🔒 配置 Nginx HTTP Basic Auth..."
htpasswd -b -c "$HTPASSWD_FILE" "$AUTH_USER" "$AUTH_PASS"
chmod 644 "$HTPASSWD_FILE"

HESTIA_CONF_DIR="/home/$HESTIA_USER/conf/web/$DOMAIN"
if [ -d "$HESTIA_CONF_DIR" ]; then
# HestiaCP 原生包含文件名格式:nginx.conf_* 与 nginx.ssl.conf_*
# 这样无需 sed 修改主配置文件,重建域名配置时也不会失效
cat > "$HESTIA_CONF_DIR/nginx.conf_adminer" <<EOF
auth_basic "Restricted Adminer Access";
auth_basic_user_file $HTPASSWD_FILE;
EOF

cat > "$HESTIA_CONF_DIR/nginx.ssl.conf_adminer" <<EOF
auth_basic "Restricted Adminer Access";
auth_basic_user_file $HTPASSWD_FILE;
EOF
fi

# ------------------------------------------------------------------------------
# 7. 配置 Fail2Ban 防护规则
# ------------------------------------------------------------------------------
echo "🛡️ 配置 Fail2Ban 规则..."
cat > /etc/fail2ban/filter.d/nginx-adminer.conf <<'EOF'
[Definition]
failregex = ^<HOST> - .* "GET /.* HTTP/.*" 401
ignoreregex =
EOF

cat > /etc/fail2ban/jail.d/nginx-adminer.conf <<EOF
[nginx-adminer]
enabled = true
filter = nginx-adminer
port = http,https
logpath = /var/log/nginx/domains/$DOMAIN.log
maxretry = 3
findtime = 600
bantime = 3600
EOF

# ------------------------------------------------------------------------------
# 8. 修复权限、刷新缓存与重载服务
# ------------------------------------------------------------------------------
echo "🧹 修复权限并重载服务..."
chown -R $HESTIA_USER:$HESTIA_USER "$WEBROOT"
find "$WEBROOT" -type d -exec chmod 755 {} +
find "$WEBROOT" -type f -exec chmod 644 {} +

# 平滑重载 PHP-FPM(兼容多版本 PHP 环境)
for service in $(systemctl list-units --type=service --state=running --no-legend | awk '{print $1}' | grep -E 'php.*fpm'); do
systemctl reload "$service" || true
done

# 重载 Web 与防护服务
nginx -t && systemctl reload nginx
if systemctl is-active --quiet fail2ban; then
systemctl restart fail2ban
fi

echo -e "\n=================================================="
echo -e "✅ Adminer 一键部署成功!"
echo -e "--------------------------------------------------"
echo -e "🌐 访问地址 : https://$DOMAIN/index.php"
echo -e "👤 Nginx 认证账号 : $AUTH_USER"
echo -e "🔑 Nginx 认证密码 : [你输入的防护密码]"
echo -e "--------------------------------------------------"
echo -e "💡 Adminer 登录说明:"
echo -e " 数据库用户名填写:root(或你的数据库账号)"
echo -e " 数据库密码填写:[你输入的防护密码]"
echo -e "=================================================="

Ahoana ny fomba fampandehanana ny script: Omeo alalana ny script hanatanteraka:

sudo chmod +x /usr/local/bin/deploy-adminer.sh 

Alefaso ny script amin'ny fampiasana sudo:

sudo /usr/local/bin/deploy-adminer.sh 

Ampidiro ny fampahalalana momba ny fikirakirana araka ny fangatahana:

  • Ampidiro ny anaranao HestiaCP (oh: admin).
  • Ampidiro ny zana-domain feno efa voaomana (oh: adminer.example.com).
  • Ampidiro ny tenimiafinao fiarovana (oh: MySuperPassword123)

Hamita ho azy ny dingana rehetra amin'ny fikirakirana ny script tsy misy zavatra tsy ho hita.

Maharitra iray na roa minitra eo ho eo ny dingana manontolo. Ny script no hikarakara ny zava-drehetra ho azy, ary tsy mila manatanteraka baiko amin'ny tanana ianao.

Rehefa vita ianao dia afaka miditra amin'ny Adminer amin'ny alàlan'ny https://yourdomain/index.php

Fanontaniana sasany mety hampanahy anao

Mety hanontany ny namana sasany hoe, ity script ity ve dia mahazaka dikan-teny PHP maromaro?

Eny, tohana izy io. Ny script dia hamantatra ho azy ny serivisy PHP-FPM rehetra miasa ao amin'ny rafitra ary hampiditra azy ireo tsirairay. Noho izany dia miasa tsara izy io na mampiasa PHP 7.4 na PHP 8.2 ianao.

Mety hanontany ny namana sasany hoe, ahoana raha te hanova ny tenimiafina aho?

Tsotra dia tsotra izany; avereno fotsiny ny script. Hamerina ny tenimiafina hash ny script, hanamboatra indray ny fanamarinana Nginx, ary hanamboatra indray ny Fail2Ban. Ho voafafa ny configuration taloha.

Ahoana raha te-hanaisotra azy aho?

Azonao fafana tsotra izao ny lahatahiry fototra amin'ny tranonkala, ny rakitra tenimiafina, ary ny fikirakirana Fail2Ban amin'ny tanana. Tsy hamela soritra hafa amin'ny rafitra ny script.

Soraty amin'ny faran'ny farany

Nieritreritra foana aho fa tsy tokony ho sarotra toy izany ny fampandehanana sy ny fikojakojana.

Azo atao mandeha ho azy amin'ny alalan'ny script ny asa tanana maro. Izany dia ahafahanao mandany ny fotoananao amin'ny zavatra manan-danja kokoa, toy ny fanatsarana ny fahombiazan'ny mpizara, ny fanaraha-maso ny satan'ny fampiharana, ary ny fikarohana teknolojia vaovao.

Mampahatsiahy ahy tantara ara-tantara izany. Tamin'ny taona 1880, nanomboka niely tany Etazonia ny herinaratra. Maro ireo tompon'ny orinasa nandany vola be hividianana milina mpamokatra herinaratra sy motera elektrika ary nametraka izany tao amin'ny orinasany. Na izany aza, taorian'ny fametrahana azy, maro no nahita fa tsy nihatsara be ny fahombiazan'ny famokarana. Izany dia satria ny motera etona ihany no nosoloiny motera elektrika, saingy tsy niova ny endrika ankapobeny, ny dingana ary ny fomba fitantanana ny orinasa.

Ireo izay tena nandray soa tamin'ny firoboroboan'ny herinaratra no voalohany nahatakatra ny tena dikan'ny herinaratra. Namolavola ny endriky ny famokarana izy ireo, nanamboatra ny atrikasa, ary nandamina indray ny fomba fiasan'ny mpiasa.

Toy izany koa ny amin'ny fiasana sy ny fikojakojana mandeha ho azy. Maro ny olona mahalala fa azo ampiasaina ny script, saingy mbola aleony ny fampiasana tanana, tahaka ireo tompon'ny orinasa taloha izay nahafantatra momba ny motera elektrika saingy mbola nampiasa ny fomba fisainan'ny motera etona mba hampiasana azy ireo. Tsy natao hisolo ny fitsaranao ny script, fa natao handeha ho azy ny asa miverimberina, mekanika ary mora diso, ahafahanao mifantoka amin'ny angovonao amin'izay tena mitaky fisainana.

Toy izao no nivoahan'ity script ity. Namaha olana iray ho ahy izy ity, ary manantena aho fa afaka manampy anao koa.

Raha mampiasa HestiaCP sy Adminer ianao dia azonao andramana ity script ity. Mety hitsitsy fotoana betsaka ho anao izany.

Koa satria efa namaky hatramin'izao ianao, raha nahasoa anao dia mba asio j'aime ary zarao. Raha te hahazo vaovao farany aloha ianao dia afaka manaraka ahy koa!

Misaotra anao namaky ny lahatsoratro. Mandra-pihaona amin'ny manaraka.

Comments

您的邮箱地址不会被公开。必填项已用*标注

Horonana Top