تثبيت phpMyAdmin والوصول الآمن
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.
جدول المحتويات
تثبيت 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+
# تحديث النظام
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
التثبيت عبر مدير الحزم
# تثبيت phpMyAdmin
apt install -y phpmyadmin
أثناء التثبيت:
- اختيار خادم الويب:
apache2أوlighttpd(لا تختر شيئاً عند استخدام Nginx) - تكوين قاعدة البيانات مع
dbconfig-common:Yes - تعيين كلمة مرور لـ phpMyAdmin
التثبيت اليدوي (موصى به)
التثبيت اليدوي يمنحك أحدث إصدار ومزيداً من التحكم:
# تنزيل أحدث إصدار
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
# توليد مفتاح عشوائي من 32 حرفاً
openssl rand -base64 32
# تعديل config.inc.php
nano /var/www/html/phpmyadmin/config.inc.php
// الصق المفتاح المولّد هنا
$cfg['blowfish_secret'] = 'الصق_المفتاح_العشوائي_هنا';
// تعيين المجلد المؤقت
$cfg['TempDir'] = '/tmp/phpmyadmin';
# إنشاء المجلد المؤقت
mkdir -p /tmp/phpmyadmin
chown www-data:www-data /tmp/phpmyadmin
إعداد Apache
إنشاء Virtual Host
nano /etc/apache2/sites-available/phpmyadmin.conf
<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>
# تفعيل الموقع
a2ensite phpmyadmin.conf
a2enmod rewrite
systemctl reload apache2
حماية HTTP Basic Auth
# إنشاء ملف .htpasswd
htpasswd -c /etc/apache2/.htpasswd admin
<Directory /var/www/html/phpmyadmin>
AuthType Basic
AuthName 'phpMyAdmin Access'
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
إعداد Nginx
nano /etc/nginx/sites-available/phpmyadmin
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;
}
}
# إنشاء 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
# تثبيت 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)
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
-- الاتصال بـ 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
// السماح لمستخدمين محددين فقط
$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
# Nginx - السماح لعناوين IP محددة فقط
location / {
allow 192.168.1.0/24;
allow 10.0.0.5;
deny all;
}
# Apache - تقييد IP
<Directory /var/www/html/phpmyadmin>
Require ip 192.168.1.0/24
Require ip 10.0.0.5
</Directory>
تغيير URL الافتراضي
# إعادة تسمية مجلد phpmyadmin
mv /var/www/html/phpmyadmin /var/www/html/db_manager_x7k2
# تحديث إعداد Nginx/Apache وفقاً لذلك
أمان الجلسة
// 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
# إزالة مجلد setup بعد التثبيت
rm -rf /var/www/html/phpmyadmin/setup
حماية Fail2Ban من هجمات القوة الغاشمة
nano /etc/fail2ban/filter.d/phpmyadmin.conf
[Definition]
failregex = ^<HOST> .* 'POST /phpmyadmin/index.php.*' (401|403)
ignoreregex =
# /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/nginx/phpmyadmin_access.log
maxretry = 5
bantime = 3600
استكشاف الأخطاء وإصلاحها
# فحص سجلات أخطاء 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.
مقالات ذات صلة
تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
دليل تثبيت PostgreSQL وإدارته الأساسية
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت Redis و Memcached: دليل طبقة التخزين المؤقت
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.