فارسی (Farsi)
€EUR

نصب و ایمن‌سازی phpMyAdmin روی VPS لینوکس

3 min
سرور مجازی (VPS/VDS)

phpMyAdmin یک رابط وب کاربردی برای MariaDB و MySQL است و در عین حال یکی از پرتکرارترین آدرس‌هایی است که در اینترنت اسکن می‌شود. این راهنما دو روش نصب روی VPS Linux Infrawire شما را نشان می‌دهد، یعنی بسته apt همراه Apache و نصب دستی پشت Nginx، و سپس اقداماتی که آن را از دسترس ربات‌ها دور نگه می‌دارند.

📋 پیش‌نیازها

  • یک VPS با Ubuntu 24.04 یا Debian 12 و دسترسی root یا sudo (آی‌پی و رمز عبور root در بخش کاربری شما موجود است)
  • یک پشته LAMP (گزینه A) یا LEMP (گزینه B) فعال همراه با MariaDB
  • آی‌پی عمومی خودتان که در ادامه ADMIN_IP نامیده می‌شود

1. گزینه A: نصب بسته apt همراه Apache

Bash
apt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl

در نصب‌کننده، با کلید فاصله apache2 را انتخاب کنید (باید ستاره ظاهر شود)، سپس برای پیکربندی پایگاه‌داده با dbconfig-common پاسخ «بله» بدهید و برای حساب داخلی phpMyAdmin رمز تعیین کنید. بعد Apache را دوباره بارگذاری کنید:

Bash
phpenmod mbstring systemctl reload apache2

اکنون phpMyAdmin روی http://VPS_IP/phpmyadmin در دسترس است.

2. ساخت کاربر اختصاصی پایگاه‌داده

هرگز با root وارد نشوید. در MariaDB روی اوبونتو و دبیان، root از احراز هویت unix_socket استفاده می‌کند و phpMyAdmin به هر حال آن را رد می‌کند: همین‌طور بگذارید و یک حساب معمولی بسازید.

Bash
mariadb
SQL
CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;

دسترسی را فقط روی پایگاه‌داده‌هایی بدهید که کاربر واقعاً مدیریت می‌کند. گزینه AllowNoPassword را در پیکربندی فعال نکنید.

3. پنهان کردن آدرس و افزودن احراز هویت (Apache)

نام مستعار پیش‌فرض را با یک نام تصادفی عوض کنید و فایل رمز عبور بسازید:

Bash
SUFFIX=$(openssl rand -hex 6); echo "pma-$SUFFIX" sed -i "s#Alias /phpmyadmin#Alias /pma-$SUFFIX#" /etc/phpmyadmin/apache.conf htpasswd -c /etc/phpmyadmin/.htpasswd USER

سپس این خطوط را داخل بلوک موجود <Directory /usr/share/phpmyadmin> در فایل /etc/phpmyadmin/apache.conf اضافه کنید:

Apache
1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>

بدون <RequireAll> آپاچی یکی از دو شرط را کافی می‌دانست؛ با آن، هم رمز عبور و هم آی‌پی لازم است.

Bash
apache2ctl configtest && systemctl reload apache2

4. گزینه B: نصب دستی پشت Nginx

وابستگی‌ها را نصب کنید، سپس آخرین نسخه را از سایت رسمی phpMyAdmin دانلود کنید (به‌جای VERSION شماره نسخه فعلی را بگذارید):

Bash
apt install -y nginx php-fpm php-mysql php-mbstring php-xml php-zip php-gd php-curl apache2-utils cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/VERSION/phpMyAdmin-VERSION-all-languages.tar.gz tar xzf phpMyAdmin-VERSION-all-languages.tar.gz mkdir -p /var/www/pma mv phpMyAdmin-VERSION-all-languages /var/www/pma/pma-SECRET cd /var/www/pma/pma-SECRET cp config.sample.inc.php config.inc.php openssl rand -hex 16

pma-SECRET را با یک نام تصادفی جایگزین کنید. فایل config.inc.php را ویرایش کنید و مقدار تولیدشده (32 نویسه) را به‌عنوان کلید محرمانه بگذارید:

PHP
$cfg['blowfish_secret'] = 'RANDOM_32_CHARS'; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Bash
mkdir -p /var/lib/phpmyadmin/tmp chown www-data:www-data /var/lib/phpmyadmin/tmp chmod 700 /var/lib/phpmyadmin/tmp chown -R root:www-data /var/www/pma chmod 640 /var/www/pma/pma-SECRET/config.inc.php htpasswd -c /etc/nginx/.htpasswd USER

این بلوک را داخل server { ... } سایت خود اضافه کنید. در Debian 12 سوکت به‌جای php8.3-fpm.sock برابر php8.2-fpm.sock است:

Nginx
1location ^~ /pma-SECRET/ { 2 allow ADMIN_IP; 3 deny all; 4 auth_basic 'Restricted area'; 5 auth_basic_user_file /etc/nginx/.htpasswd; 6 root /var/www/pma; 7 index index.php; 8 9 location ~ \.php$ { 10 include snippets/fastcgi-php.conf; 11 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 12 } 13}
Bash
nginx -t && systemctl reload nginx

5. امن‌ترین گزینه: تونل SSH

اگر هیچ دسترسی عمومی نمی‌خواهید، رابط را فقط از خود VPS در دسترس نگه دارید و از رایانه‌تان یک تونل باز کنید:

Bash
ssh -L 8080:127.0.0.1:80 USER@VPS_IP

تا زمانی که نشست باز است، به http://127.0.0.1:8080/pma-SECRET/ بروید. در Apache، به‌جای Require ip ADMIN_IP در بلوک از Require local استفاده کنید؛ در Nginx از allow 127.0.0.1;. این کار مشکل تغییر آی‌پی خانگی را هم حل می‌کند.

6. بررسی حفاظت

Bash
curl -sI http://VPS_IP/phpmyadmin | head -n 1 curl -sI http://VPS_IP/pma-SECRET/ | head -n 1

درخواست اول باید 404 برگرداند. درخواست دوم از هر آی‌پی غیر از ADMIN_IP پاسخ 403 می‌دهد و از آی‌پی شما تا زمانی که رمز احراز هویت پایه را وارد نکنید 401. همچنین phpMyAdmin را فقط روی HTTPS ارائه دهید، وگرنه رمزها به‌صورت متن ساده منتقل می‌شوند.

🛠️ عیب‌یابی

خطای 404 Not Found. نام مستعار یا نام location با آدرسی که وارد کرده‌اید مطابقت ندارد یا وب‌سرور دوباره بارگذاری نشده است.

خود شما 403 Forbidden می‌گیرید. آی‌پی عمومی شما تغییر کرده است. ADMIN_IP را به‌روز کنید یا به تونل SSH بروید.

«The mbstring extension is missing» یا صفحه سفید. بسته php-mbstring را نصب کنید، سپس phpenmod mbstring (Apache) را اجرا کنید یا php8.3-fpm را (Nginx) راه‌اندازی مجدد کنید.

خطای Access denied برای root. این رفتار مورد انتظار و مطلوب است. با کاربر اختصاصی که در مرحله 2 ساختید وارد شوید.


🎉 phpMyAdmin نصب، پنهان و محدود شد: فقط شما به پایگاه‌داده‌هایتان دسترسی دارید.

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.