تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.
phpMyAdmin هو تطبيق PHP مفتوح المصدر يتيح لك إدارة قواعد بيانات MySQL وMariaDB عبر متصفح الويب. يمكنك إنشاء قواعد البيانات وإدارة الجداول وتنفيذ استعلامات SQL وإدارة أذونات المستخدمين من خلال واجهته الرسومية. يغطي هذا الدليل التثبيت وإعداد Apache وNginx وتكوين SSL وتعزيز الأمان.
قبل تثبيت phpMyAdmin، تأكد من توفر ما يلي:
# تحديث النظام
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
apt install -y phpmyadmin
أثناء التثبيت:
apache2 أو lighttpd (لا تختر شيئاً عند استخدام Nginx)dbconfig-common: Yesالتثبيت اليدوي يمنحك أحدث إصدار ومزيداً من التحكم:
# تنزيل أحدث إصدار
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
# توليد مفتاح عشوائي من 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
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
# إنشاء ملف .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>
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
# تثبيت 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
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;
}
-- الاتصال بـ 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;
// السماح لمستخدمين محددين فقط
$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;
# 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>
# إعادة تسمية مجلد 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 بعد التثبيت
rm -rf /var/www/html/phpmyadmin/setup
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.
تحقق من ثلاثة أشياء: 1) تحقق من أذونات المجلد بالأمر chown -R www-data:www-data /var/www/html/phpmyadmin، 2) تأكد من وجود قواعد 'Require all granted' أو allow في إعداد Apache/Nginx، 3) إذا كان تقييد IP مفعّلاً، تأكد من أن عنوان IP الخاص بك موجود في قائمة المسموح بهم.
هذا إجراء أمني مقصود. الإعداد $cfg['Servers'][$i]['AllowRoot'] = false; في config.inc.php يحظر تسجيل دخول root. لأسباب أمنية، أنشئ مستخدماً مخصصاً: CREATE USER 'pma_admin'@'localhost' IDENTIFIED BY 'كلمة_المرور'; GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'localhost';
لا يُنصح بالكشف المباشر على الإنترنت. للوصول الآمن: استخدم SSL، وأضف HTTP Basic Auth، وغيّر URL الافتراضي (استخدم مساراً عشوائياً بدلاً من /phpmyadmin)، وطبّق قيود IP، أو استخدم VPN. تطبيق جميع هذه الإجراءات معاً يوفر أفضل حماية.
قيمة $cfg['blowfish_secret'] في config.inc.php فارغة أو قصيرة جداً. ولّد مفتاحاً عشوائياً بطول 32+ حرفاً بالأمر openssl rand -base64 32 وعيّنه لهذا الإعداد. أعد تحميل الصفحة بعد إجراء التغيير.
يتطلب phpMyAdmin 5.x إصدار PHP 7.2 أو أعلى. يُنصح بـ PHP 8.0+ لأحدث إصدارات phpMyAdmin. تحقق من إصدار PHP الحالي بالأمر php -v. يوفر PHP 8.1 أو 8.2 أفضل توافق وأداء.
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.