إن ترك نموذج Adminer يعمل على عنوان مفتوح هو أحد أكثر الطرق صمتاً لفقدان قاعدة بيانات. يقوم شخص ما بنشر ملف PHP الواحد للتحقق من جدول، يعمل الرابط، ويبقى الملف هناك لأشهر حتى تتحول نسخة قديمة إلى سطح هجوم. هذا هو سبب تخصيص هذا الدليل حول تثبيت Adminer على Linux VPS مساحة للتأمين بقدر ما يخصص للتشغيل.
Adminer هو ملف PHP واحد (حوالي 503 كيلوبايت في البنية الكاملة) يدعم MySQL وMariaDB وPostgreSQL وSQLite وقواعد بيانات أخرى عديدة. النشر بسيط للغاية، وهذا هو السبب بالضبط في أنه كثيراً ما يُنشر باستهتار.
ستقوم بتثبيته على VPS حديث بنظام Ubuntu أو Debian مع Nginx وPHP-FPM، وإضافة مصادقة HTTP وقائمة بيضاء لعناوين IP وHTTPS مع Let's Encrypt، ثم تنهي بقاعدة واضحة حول متى يجب تجاوز الإعداد العام تمامًا والوصول إلى Adminer عبر نفق SSH بدلاً من ذلك.
الخلاصة السريعة
- Adminer هو ملف PHP واحد تقوم بتنزيله في الجذر الإلكتروني باستخدام
wgetفي الجذر الإلكتروني؛ يخدمه Nginx وPHP-FPM. - تحتاج نسخة Adminer العامة إلى الثلاثة جميعًا: طبقة مصادقة HTTP، وقائمة بيضاء لعناوين IP، وHTTPS. أيٌّ منها منفردًا لا يكفي.
- بالنسبة لقواعد البيانات الأكثر حساسية، لا تكشف Adminer على الإطلاق: اربطه بـ
localhostوالوصول إليه عبر نفق SSH. - التحديث أمر واحد: أعد تشغيل
wgetالأمر. تجعل إصدارات الأمان الأخيرة الحفاظ على الإصدار الحالي مهمة تشغيلية حقيقية، وليست مجرد كماليات.
المتطلبات الأساسية: ما ستحتاجه قبل التثبيت
يستهدف هذا الدليل Ubuntu 26.04 و24.04 بالإضافة إلى Debian 13، مع ملاحظات توافق لـ Ubuntu 22.04 وDebian 12. إصدارات PHP-FPM الافتراضية هي 8.5 على Ubuntu 26.04، و8.3 على Ubuntu 24.04، و8.4 على Debian 13، و8.2 على Debian 12، و8.1 على Ubuntu 22.04.
- VPS بنظام Linux يعمل بـ Ubuntu 22.04 أو Ubuntu 24.04 أو Ubuntu 26.04 أو Debian 12 أو Debian 13، مع مستخدم لديه
sudoوصول - خادم قواعد بيانات (MySQL أو MariaDB أو PostgreSQL) يعمل بالفعل، إما على هذا VPS أو على أحد الخوادم التي يمكن لـ Adminer الوصول إليها عبر الشبكة. لا يُثبّت هذا الدليل قاعدة بيانات؛ بل يُثبّت الأداة التي تستخدمها لإدارة واحدة.
- PHP-FPM من مستودعات نظام التشغيل المدعومة. على الرغم من أن ملف Adminer المُجمَّع يدعم PHP 5.3+ ، استخدم الإصدار الحالي المقدم من التوزيعة المذكور أعلاه بدلاً من تثبيت إصدار PHP قديم.
- للإعداد العام بـ HTTPS، تحتاج إلى اسم مضيف يشير إلى VPS ومنافذ TCP الواردة 80 و443 متاحة. يستخدم سير عمل Certbot Nginx يستخدم التحقق HTTP-01 على المنفذ 80. تدعم Let's Encrypt الآن شهادات عناوين IP قصيرة العمر، لكن Certbot لا يثبّتها تلقائيًا عبر سير عمل Nginx الخاص به، لذا يستخدم هذا الدليل اسم مضيف.
ملاحظة: يستخدم هذا الدليل Nginx عمدًا. إذا كنت تستخدم Apache، فتنطبق منطق التنزيل والتقوية، لكن تكوين كتلة الخادم أدناه لا ينطبق.
تثبيت Nginx وPHP-FPM
ابدأ بتحديث فهرس الحزم وتثبيت Nginx وPHP-FPM مع امتداد قاعدة بيانات PHP الذي يحتاجه الخادم:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
لقاعدة بيانات PostgreSQL، قم بتثبيت php-pgsql بدلاً من، أو إلى جانب، php-mysql:
sudo apt install -y php-pgsql
تأكد من وجود مقبس PHP-FPM:
ls /run/php/
طابق اسم ملف المقبس مع الإصدار المذكور أعلاه، على سبيل المثال، php8.5-fpm.sock على Ubuntu 26.04, php8.3-fpm.sock على Ubuntu 24.04، أو php8.4-fpm.sock على Debian 13. إذا كان المقبس المتوقع مفقودًا، تحقق من الخدمة المطابقة باستخدام systemctl status php8.5-fpm، مع استبدال 8.5 بالإصدار المثبت على نظام التشغيل الخاص بك.
نصيحة احترافية: عدم تطابق المقبس هو أحد الأسباب المحتملة لـ
502 Bad Gateway. طابقfastcgi_passباسم الملف ضمن/run/php/، تأكد من تشغيل خدمة PHP-FPM المقابلة، وتحقق من/var/log/nginx/error.logإذا استمر الخطأ.
تنزيل Adminer
أنشئ مجلدًا لخدمة Adminer منه، ثم قم بتنزيل الملف الوحيد فيه. رابط latest.php URL يشير دائمًا إلى الإصدار الثابت الحالي:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
إذا كنت تعمل فقط مع MySQL أو MariaDB، فإن إصدار MySQL فقط أصغر حجمًا (حوالي 406 كيلوبايت) ويُجلب بنفس الطريقة:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
أبق مجلد Adminer مملوكًا للجذر مع منح PHP-FPM صلاحية القراءة:
sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php
You do not need to track the version number: the latest.php URL يعني أن إعادة تشغيل التنزيل هو أيضًا مسار التحديث الخاص بك، وهو ما يعود إليه قسم الصيانة.
تكوين كتلة خادم Nginx
أنشئ كتلة خادم تخدم مجلد Adminer وتمرر طلبات .php الطلبات إلى مقبس PHP-FPM الذي حددته سابقًا. افتح ملف موقع جديد:
sudo nano /etc/nginx/sites-available/adminer
الصق ما يلي، مع استبدال db.example.com باسم المضيف المشير بالفعل إلى VPS الخاص بك مع التأكيد على أن fastcgi_pass يتطابق مقبس مع إصدار PHP الخاص بك:
# /etc/nginx/sites-available/adminer
server {
listen 80;
server_name db.example.com;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
فعّل الموقع بإنشاء رابط رمزي في sites-enabled، ثم اختبر التكوين دون إعادة تحميل Nginx بعد:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t يجب أن يُبلّغ عن صحة الصياغة ونجاح الاختبار. لا تُعِد تحميل Nginx حتى الآن لأن الموقع ليس لديه مصادقة أو قيود على IP. استمر في خطوتي التقوية هاتين؛ تنفّذ خطوة تقييد IP أول إعادة تحميل بعد أن تكون كلتا الحمايتين في مكانهما.
قفل الوصول: المصادقة وتقييد IP وHTTPS
تقف نسخة Adminer العامة مباشرةً أمام بيانات اعتماد قاعدة البيانات الخاصة بك، لذا فهي تحتاج إلى دفاعات متعددة الطبقات بدلاً من قفل واحد. الطبقات الثلاث التالية تؤدي وظائف مختلفة: تمنع مصادقة HTTP أي شخص بدون كلمة مرور عند الخادم، وتمنع قائمة السماح بعناوين IP أي اتصال من عنوان لم تعتمده، ويمنع HTTPS بيانات الاعتماد التي تكتبها من العبور عبر الشبكة بنص صريح. أضف الثلاثة جميعًا. لا يغني أيٌّ منها عن الآخرين.
إضافة مصادقة HTTP الأساسية
قم بتثبيت htpasswd الأداة المرفقة في حزمة apache2-utils على Ubuntu وDebian:
sudo apt install -y apache2-utils
أنشئ ملف كلمة مرور ومستخدمًا (ستُطلب منك كلمة المرور):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
أضف التوجيهات إلى موقع PHP الدقيق لـ Adminer حتى يكون طلب PHP نفسه محميًا:
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
كلا التوجيهين موثقان في مرجع وحدة Nginx HTTP auth_basic. شغّل sudo nginx -t للتحقق من صحة التكوين، لكن لا تُعِد تحميل Nginx بعد؛ تُضاف قائمة السماح بعناوين IP تاليًا. لا ترسل بيانات اعتماد المصادقة الأساسية عبر HTTP غير المشفر؛ انتظر حتى تُفعَّل HTTPS أدناه.
تقييد الوصول بعنوان IP
تحجب المصادقة الأساسية المستخدمين غير الموثقين، لكن Nginx لا يزال يتلقى الطلبات من كل مصدر. استبدل موقع PHP الحالي لـ Adminer بالكتلة المجمعة التالية حتى تبقى قواعد IP وتوجيهات المصادقة الأساسية في مكان واحد:
location = /adminer.php {
satisfy all;
allow 203.0.113.10;
allow 203.0.113.0/28;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
استبدل العناوين المثال بعنوان IP العام الفعلي الخاص بك أو نطاق الشبكة الموثوق. احتفظ فقط بالإدخالات allow التي تحتاجها واحذف الأمثلة غير المستخدمة. يوضح الإدخال الأول عنوانًا واحدًا، بينما يوضح الثاني نطاق CIDR. يُعيد Nginx 403 Forbidden للعناوين التي لا تتطابق مع قاعدة allow قاعدة allow. مرجع وحدة وصول Nginx يوثق صياغة التوجيهات. اختبر وأعِد تحميل Nginx:
sudo nginx -t && sudo systemctl reload nginx
تفعيل HTTPS مع Let's Encrypt
مع نطاق يشير إلى VPS، قم بتثبيت Certbot وإضافة Nginx الخاصة به، ثم اطلب شهادة:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
يقوم Certbot بتعديل كتلة الخادم الخاصة بك لخدمة HTTPS على المنفذ 443 ويعرض إعادة توجيه HTTP إلى HTTPS؛ اقبل إعادة التوجيه. كما يثبّت مؤقتًا للتجديد، لذلك يتجدد الشهادة تلقائيًا قبل انتهاء صلاحيتها. يمكنك تأكيد مسار التجديد باستخدام sudo certbot renew --dry-run، والذي يجب أن يكتمل دون أخطاء.
قم الآن بزيارة https://db.example.com/adminer.php من عنوان مسموح به وتأكد أن Nginx يطلب بيانات اعتماد المصادقة الأساسية قبل تحميل Adminer.
اختيار نموذج الوصول: HTTPS العام مقابل نفق SSH
الإعداد أعلاه مناسب عندما تحتاج إلى الوصول عبر المتصفح إلى قاعدة بيانات من عدة أجهزة أو عندما يكون فتح جلسة SSH غير عملي. إنه ليس النموذج الوحيد، وبالنسبة لقاعدة بيانات حساسة ليس الأكثر دفاعية.
بالنسبة للإعدادات الحساسة، لا تُعرِّض Adminer للعموم. إرشادات الأمان الرسمية لـ Adminer توصي بجعله غير قابل للوصول من الإنترنت العام كلما أمكن. إذا اخترت الوصول عبر النفق فقط، فاستبدل كتلة خادم Nginx العامة بهذا التكوين المخصص للـ loopback فقط وتخطَّ إعداد HTTPS العام:
# /etc/nginx/sites-available/adminer
server {
listen 127.0.0.1:8080 default_server;
server_name _;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
اختبر وأعِد تحميل التكوين البديل:
sudo nginx -t && sudo systemctl reload nginx
ثم افتح النفق من جهازك الخاص:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
مع تشغيل النفق، افتح http://127.0.0.1:8080/adminer.php. يقبل Nginx اتصالات Adminer فقط عبر واجهة loopback الخاصة بـ VPS، بينما يحمل SSH الحركة عبر اتصاله المشفر. يستخدم هذا السلوك الموضح في توثيق إعادة التوجيه المحلي لـ OpenSSH.
استخدم إعداد HTTPS العام والمصادقة الأساسية وقائمة السماح بعناوين IP عندما تحتاج إلى وصول مباشر من المتصفح من عدة أجهزة. فضّل إعداد SSH المخصص للـ loopback فقط عندما يكون الوصول العام غير ضروري.
الفكرة الرئيسية: أكثر Adminer أمانًا هو ذلك الذي لا يمكن الوصول إليه أبدًا من الإنترنت العام.
الحفاظ على تحديث Adminer
النموذج المنسي هو الخطر الحقيقي هنا، وتجدر معاملته كمهمة مجدولة بدلاً من فكرة لاحقة. تحديث Adminer هو أمر واحد، نفس wget الأمر الذي استخدمته لتثبيته، لأن latest.php دائمًا يجلب الإصدار الحالي:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
هذا ليس مصدر قلق نظريًا. Adminer 5.4.3، الصادر في 9 يوليو 2026، تناول سبعة تنبيهات أمنية لـ GitHub في إصدار واحد. كان الاستشارة السابقة لـ CVE-2026-25892 أظهر أن حتى نقطة نهاية التحقق من الإصدار في Adminer يمكن تحويلها إلى ناقل هجوم رفض الخدمة غير الموثق؛ تم إصلاح المشكلة في الإصدار 5.4.2. تتراكم في النسخة القديمة ثغرات موثقة علنًا، لذا يجب أن يكون تحديثها صيانة روتينية.
ملاحظة: ابقَ على الإصدار الأصلي الحالي لـ Adminer. تمت أرشفة مستودع AdminerEvo في يناير 2025 وليس بديلاً تتم صيانته بشكل نشط.
النشر على VPS
إذا كنت تفضل تخطي الخطوات اليدوية، فإن Adminer متاح كنشر بنقرة واحدة في سوق Cloudzy على خادم Cloudzy Linux الافتراضي. تستخدم صورة المتجر Apache والمصادقة الأساسية وشهادة موقعة ذاتيًا، لذا تختلف عن مجموعة Nginx وقائمة السماح بعناوين IP وLet's Encrypt أعلاه. راجع تلك الاختلافات الأمنية قبل إدخال بيانات اعتماد قاعدة البيانات الإنتاجية.
البصمة الذاتية لـ Adminer لا تكاد تُذكر؛ قاعدة البيانات هي التي تحدد الحجم. اختر وحدة المعالجة المركزية والذاكرة والتخزين بناءً على حجم بيانات وفهارس قاعدة البيانات وحمل الاستعلامات وعدد الاتصالات والنسخ الاحتياطية والنمو المتوقع، وليس Adminer نفسه.
الأسئلة الشائعة
هل من الآمن عرض Adminer علنًا على VPS؟
ليس بمفرده. إذا كان يجب عليك عرض Adminer علنًا، ضعه خلف مصادقة HTTP الأساسية وقائمة السماح بعناوين IP وHTTPS معًا. تقلل هذه الضوابط من المخاطر لكنها لا تجعل التعرض العام خاليًا من المخاطر. بالنسبة لقواعد البيانات الحساسة، ربط Adminer بـ localhost والوصول إليه عبر نفق SSH بدلاً من ذلك.
كيف أصل إلى Adminer دون تعريضه للإنترنت؟
قم بتكوين كتلة خادم Nginx المخصصة للـ loopback فقط الموضحة أعلاه حتى يستمع Adminer على 127.0.0.1:8080، ثم شغّل ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip على جهازك الخاص. افتح http://127.0.0.1:8080/adminer.php أثناء تشغيل النفق.
هل يمكن لـ Adminer الاتصال بـ PostgreSQL وكذلك MySQL؟
نعم. يدعم Adminer MySQL وMariaDB وPostgreSQL وSQLite وMS SQL وOracle خارج الصندوق، مع قواعد بيانات إضافية متوفرة من خلال الإضافات. قم بتثبيت ملحق PHP المقابل لقاعدة بياناتك، على سبيل المثال php-pgsql لـ PostgreSQL، حتى يتمكن PHP من التحدث إليه.
كيف أحافظ على تحديث Adminer؟
أعِد تشغيل أمر التنزيل: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. و latest.php يُعيد الرابط دائمًا الإصدار المستقر الحالي، لذا يحل هذا محل نسختك بأحدث إصدار. تجعل إصدارات الأمان الأخيرة هذا يستحق الجدولة بدلاً من فعله فقط عندما تتذكر.
هل يجب أن أقوم بتثبيت Adminer عبر apt الحزمة أم تنزيله مباشرة؟
قم بتنزيل الملف الواحد مباشرة. يمنحك الإصدار الحالي فورًا ويجعل التحديثات أمرًا من سطر واحد، في حين أن حزمة التوزيع قد تتأخر عن الإصدار الأصلي. الملف المباشر هو نفس الأداة بمسار أقصر إلى أحدث إصلاحات الأمان.