انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت phpMyAdmin والوصول الآمن

دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.

وقت القراءة: 16 دقيقة قاعدة البيانات
phpmyadminmysqlmariadbapachenginxsslأمانقاعدة بيانات

جدول المحتويات

تثبيت phpMyAdmin والوصول الآمن

phpMyAdmin هو تطبيق PHP مفتوح المصدر يتيح لك إدارة قواعد بيانات MySQL وMariaDB عبر متصفح الويب. يمكنك إنشاء قواعد البيانات وإدارة الجداول وتنفيذ استعلامات SQL وإدارة أذونات المستخدمين من خلال واجهته الرسومية. يغطي هذا الدليل التثبيت وإعداد Apache وNginx وتكوين SSL وتعزيز الأمان.

المتطلبات الأساسية

قبل تثبيت phpMyAdmin، تأكد من توفر ما يلي:

  • Ubuntu 20.04/22.04 أو Debian 11/12
  • MySQL 8.0+ أو MariaDB 10.5+
  • PHP 7.4+ (موصى به: PHP 8.1+)
  • Apache 2.4+ أو Nginx 1.18+
hljs bash
# تحديث النظام
apt update && apt upgrade -y

# PHP والوحدات المطلوبة
apt install -y php php-mysql php-mbstring php-zip php-gd php-json php-curl

# التحقق من إصدار PHP
php -v

تثبيت phpMyAdmin

التثبيت عبر مدير الحزم

hljs bash
# تثبيت phpMyAdmin
apt install -y phpmyadmin

أثناء التثبيت:

  • اختيار خادم الويب: apache2 أو lighttpd (لا تختر شيئاً عند استخدام Nginx)
  • تكوين قاعدة البيانات مع dbconfig-common: Yes
  • تعيين كلمة مرور لـ phpMyAdmin

التثبيت اليدوي (موصى به)

التثبيت اليدوي يمنحك أحدث إصدار ومزيداً من التحكم:

hljs bash
# تنزيل أحدث إصدار
cd /tmp
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

# فك ضغط الأرشيف
tar xzf phpMyAdmin-latest-all-languages.tar.gz

# النقل إلى مجلد الويب
mv phpMyAdmin-*-all-languages /var/www/html/phpmyadmin

# تعيين الملكية
chown -R www-data:www-data /var/www/html/phpmyadmin
chmod -R 755 /var/www/html/phpmyadmin

# إنشاء ملف الإعداد
cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php

توليد Blowfish Secret

hljs bash
# توليد مفتاح عشوائي من 32 حرفاً
openssl rand -base64 32

# تعديل config.inc.php
nano /var/www/html/phpmyadmin/config.inc.php
hljs php
// الصق المفتاح المولّد هنا
$cfg['blowfish_secret'] = 'الصق_المفتاح_العشوائي_هنا';

// تعيين المجلد المؤقت
$cfg['TempDir'] = '/tmp/phpmyadmin';
hljs bash
# إنشاء المجلد المؤقت
mkdir -p /tmp/phpmyadmin
chown www-data:www-data /tmp/phpmyadmin

إعداد Apache

إنشاء Virtual Host

hljs bash
nano /etc/apache2/sites-available/phpmyadmin.conf
hljs apache
<VirtualHost *:80>
    ServerName pma.example.com
    DocumentRoot /var/www/html/phpmyadmin

    <Directory /var/www/html/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/phpmyadmin_error.log
    CustomLog ${APACHE_LOG_DIR}/phpmyadmin_access.log combined
</VirtualHost>
hljs bash
# تفعيل الموقع
a2ensite phpmyadmin.conf
a2enmod rewrite
systemctl reload apache2

حماية HTTP Basic Auth

hljs bash
# إنشاء ملف .htpasswd
htpasswd -c /etc/apache2/.htpasswd admin
hljs apache
<Directory /var/www/html/phpmyadmin>
    AuthType Basic
    AuthName 'phpMyAdmin Access'
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>

إعداد Nginx

hljs bash
nano /etc/nginx/sites-available/phpmyadmin
hljs nginx
server {
    listen 80;
    server_name pma.example.com;
    root /var/www/html/phpmyadmin;
    index index.php;

    # حماية HTTP Auth
    auth_basic 'phpMyAdmin Access';
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    # إخفاء المجلدات الحساسة
    location ~* /(libraries|setup/frames|setup/libs) {
        deny all;
        return 404;
    }
}
hljs bash
# إنشاء htpasswd لـ Nginx
apt install -y apache2-utils
htpasswd -c /etc/nginx/.htpasswd admin

# تفعيل الموقع
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

إعداد SSL

SSL مجاني مع Let's Encrypt

hljs bash
# تثبيت Certbot
apt install -y certbot python3-certbot-apache
# أو لـ Nginx:
apt install -y certbot python3-certbot-nginx

# الحصول على شهادة SSL لـ Apache
certbot --apache -d pma.example.com

# الحصول على شهادة SSL لـ Nginx
certbot --nginx -d pma.example.com

# اختبار التجديد التلقائي
certbot renew --dry-run

إعداد SSL يدوي (Nginx)

hljs nginx
server {
    listen 443 ssl http2;
    server_name pma.example.com;
    root /var/www/html/phpmyadmin;
    index index.php;

    ssl_certificate /etc/letsencrypt/live/pma.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pma.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # HSTS
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always;

    auth_basic 'phpMyAdmin Access';
    auth_basic_user_file /etc/nginx/.htpasswd;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
}

# إعادة توجيه HTTP إلى HTTPS
server {
    listen 80;
    server_name pma.example.com;
    return 301 https://$host$request_uri;
}

إدارة المستخدمين

إنشاء مستخدم مخصص لـ phpMyAdmin

hljs sql
-- الاتصال بـ MySQL/MariaDB
mysql -u root -p

-- إنشاء مستخدم مدير لـ phpMyAdmin
CREATE USER 'pma_admin'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'localhost' WITH GRANT OPTION;

-- إنشاء مستخدم تطبيق محدود
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'AppPassword456!';
GRANT ALL PRIVILEGES ON myapp.* TO 'app_user'@'localhost';

FLUSH PRIVILEGES;

تقييد المستخدمين في config.inc.php

hljs php
// السماح لمستخدمين محددين فقط
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = [
    'deny % from all',
    'allow pma_admin from localhost',
    'allow app_user from 192.168.1.0/24',
];

// حظر تسجيل دخول root
$cfg['Servers'][$i]['AllowRoot'] = false;

تعزيز الأمان

تقييد IP

hljs nginx
# Nginx - السماح لعناوين IP محددة فقط
location / {
    allow 192.168.1.0/24;
    allow 10.0.0.5;
    deny all;
}
hljs apache
# Apache - تقييد IP
<Directory /var/www/html/phpmyadmin>
    Require ip 192.168.1.0/24
    Require ip 10.0.0.5
</Directory>

تغيير URL الافتراضي

hljs bash
# إعادة تسمية مجلد phpmyadmin
mv /var/www/html/phpmyadmin /var/www/html/db_manager_x7k2

# تحديث إعداد Nginx/Apache وفقاً لذلك

أمان الجلسة

hljs php
// config.inc.php - إعدادات الأمان
$cfg['LoginCookieValidity'] = 1800;    // مهلة الجلسة 30 دقيقة
$cfg['LoginCookieStore'] = 0;          // حذف الجلسة عند إغلاق المتصفح
$cfg['ForceSSL'] = true;               // إجبار SSL
$cfg['Servers'][$i]['ssl'] = true;     // اتصال MySQL عبر SSL

$cfg['SendErrorReports'] = 'never';

إزالة مجلد setup

hljs bash
# إزالة مجلد setup بعد التثبيت
rm -rf /var/www/html/phpmyadmin/setup

حماية Fail2Ban من هجمات القوة الغاشمة

hljs bash
nano /etc/fail2ban/filter.d/phpmyadmin.conf
hljs ini
[Definition]
failregex = ^<HOST> .* 'POST /phpmyadmin/index.php.*' (401|403)
ignoreregex =
hljs ini
# /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/nginx/phpmyadmin_access.log
maxretry = 5
bantime = 3600

استكشاف الأخطاء وإصلاحها

hljs bash
# فحص سجلات أخطاء PHP
tail -f /var/log/php8.1-fpm.log

# سجلات أخطاء Nginx
tail -f /var/log/nginx/error.log

# سجلات أخطاء Apache
tail -f /var/log/apache2/phpmyadmin_error.log

# فحص أذونات phpMyAdmin
ls -la /var/www/html/phpmyadmin/

# التحقق من وحدات PHP
php -m | grep -E 'mysql|mbstring|zip'

الخلاصة

phpMyAdmin أداة قوية لإدارة قواعد البيانات، لكنها تشكّل مخاطر جدية بدون إعداد أمني مناسب. استخدم دائماً SSL، وأضف مصادقة HTTP، وقيّد الوصول بعنوان IP، وغيّر URL الافتراضي. بهذه الإجراءات يمكن استخدام phpMyAdmin بأمان على خوادم REXE.