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
Bashapt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl
در نصبکننده، با کلید فاصله apache2 را انتخاب کنید (باید ستاره ظاهر شود)، سپس برای پیکربندی پایگاهداده با dbconfig-common پاسخ «بله» بدهید و برای حساب داخلی phpMyAdmin رمز تعیین کنید. بعد Apache را دوباره بارگذاری کنید:
Bashphpenmod mbstring systemctl reload apache2
اکنون phpMyAdmin روی http://VPS_IP/phpmyadmin در دسترس است.
2. ساخت کاربر اختصاصی پایگاهداده
هرگز با root وارد نشوید. در MariaDB روی اوبونتو و دبیان، root از احراز هویت unix_socket استفاده میکند و phpMyAdmin به هر حال آن را رد میکند: همینطور بگذارید و یک حساب معمولی بسازید.
Bashmariadb
SQLCREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;
دسترسی را فقط روی پایگاهدادههایی بدهید که کاربر واقعاً مدیریت میکند. گزینه AllowNoPassword را در پیکربندی فعال نکنید.
3. پنهان کردن آدرس و افزودن احراز هویت (Apache)
نام مستعار پیشفرض را با یک نام تصادفی عوض کنید و فایل رمز عبور بسازید:
BashSUFFIX=$(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 اضافه کنید:
Apache1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>
بدون <RequireAll> آپاچی یکی از دو شرط را کافی میدانست؛ با آن، هم رمز عبور و هم آیپی لازم است.
Bashapache2ctl configtest && systemctl reload apache2
4. گزینه B: نصب دستی پشت Nginx
وابستگیها را نصب کنید، سپس آخرین نسخه را از سایت رسمی phpMyAdmin دانلود کنید (بهجای VERSION شماره نسخه فعلی را بگذارید):
Bashapt 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';
Bashmkdir -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 است:
Nginx1location ^~ /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}
Bashnginx -t && systemctl reload nginx
5. امنترین گزینه: تونل SSH
اگر هیچ دسترسی عمومی نمیخواهید، رابط را فقط از خود VPS در دسترس نگه دارید و از رایانهتان یک تونل باز کنید:
Bashssh -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. بررسی حفاظت
Bashcurl -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 نصب، پنهان و محدود شد: فقط شما به پایگاهدادههایتان دسترسی دارید.