آموزش نصب و امن سازی phpMyAdmin به همراه Nginx در CentOS 7

phpMyAdmin یک ابزار مدیریت رایگان و منبع باز (Open Source) برای MySQL و MariaDB است. phpMyAdmin به عنوان یک برنامه وب قابل حمل به زبان PHP نوشته شده است و به یکی از محبوب‌ترین ابزارهای مدیریتی MySQL مخصوصاً در سطح خدمات میزبانی وب تبدیل شده است.

در این آموزش، مراحل نصب phpMyAdmin در Nginx و مراحل ایمن‌سازی آن را در CentOS 7 شرح داده خواهد شد.

پیش نیازها

  • مطمئن شوید که با یک کاربر با دسترسی sudo به سرور وارد شده‌اید.
  • استک LEMP (شامل Nginx, MariaDB, PHP) را بر روی سرور نصب کنید. آموزش نصب استک LEMP را دنبال کنید.

مرحله 1 – نصب phpMyAdmin

phpMyAdmin در مخزن یا Repository پیش‌فرض در CentOS 7 موجود نیست، پس می‌بایست از مخازن EPEL استفاده کنیم. برای افزودن مخزن EPEL از دستور زیر استفاده می‌کنیم.

yum install epel-release

سپس با دستور زیر نصب می‌کنیم.

yum install phpmyadmin

در وب سرور Nginx با اجرای دستور زیر یک لینک از فایل‌های نصب شده phpMyAdmin را به شاخه root وب سرور Nginx خود اضافه می‌کنیم تا فایل‌های phpMyAdmin را بصورت صحیح پیدا و به آن‌ها سرویس دهیم.

ln -s /usr/share/phpMyAdmin /usr/share/nginx/html

و در نهایت سرویس‌های Nginx و PHP-FPM را ریستارت می‌کنیم.

systemctl restart nginx
systemctl restart php-fpm

هم اکنون نصب phpMyAdmin به اتمام رسیده است و با استفاده از آدرس زیر در دسترس می‌باشد.

http://server_domain_or_IP/phpMyAdmin

مرحله 2 – تغییر آدرس ورود

در مرحله قبل یک لینک از فایل‌های نصبی phpMyAdmin به شاخه root وب سرور Nginx خود ایجاد کردیم.

برای تغییر آدرس دسترسی به رابط phpMyAdmin (محیط وب)، دستورات زیر را اجرا می‌کنیم.

– توجه: در این آموزش از آدرس /my استفاده می‌کنیم.

cd /usr/share/nginx/html
mv phpMyAdmin my

اگر به آدرس قبلی نصب مراجعه کنیم با خطای 404 مواجه می‌شویم.

http://server_domain_or_IP/phpMyAdmin

با این حال، رابط phpMyAdmin در مکان جدیدی که برای آن تعیین کرده‌ایم در دسترس می‌باشد.

http://server_domain_or_IP/my

مرحله 3 – ایجاد یک دروازه تایید اعتبار یا احراز هویت وب سرور

برای ایجاد یک لایه امنیتی بیشتر، می‌توانیم تایید اعتبار یا احراز هویت (Authentication) در Nginx تنظیم کنیم.

برای شروع، یک فایل جهت ذخیره رمز عبور برای تایید اعتبار ایجاد می‌کنیم.

فایل .htpasswd را برای این کار ایجاد می‌کنیم و همچنین نام کاربری (Username) مورد نیاز دلخواه را در دستور زیر وارد می‌کنیم.

htpasswd -c /etc/nginx/.htpasswd mahancloud

نمونه خروجی:

# htpasswd -c /etc/nginx/.htpasswd mahancloud
New password:
Re-type new password:
Adding password for user mahancloud

الان می‌بایست یک فایل .htpasswd شامل نام کاربری و رمز عبور رمزگذاری شده داشته باشیم. بدین ترتیب می‌توانیم با دستور زیر بررسی نماییم:

cat /etc/nginx/.htpasswd

نمونه خروجی:

mahancloud:$apr1$vXURQ.rv$f6S86nCX.fKfjbYNTUPzV.

در حال حاضر می‌بایست کانفیگ Nginx را اصلاح کنیم. برای شروع فایل کانفیگ زیر را با یک ویرایشگر متن باز (مانند nano و vi) میکنیم.

vi /etc/nginx/conf.d/default.conf

در این فایل باید یک بخش location ایجاد کنیم. این موقعیت مکانی که برای رابط phpMyAdmin انتخاب کرده‌ایم را مشخص می‌کند.

این بخش را در بلاک server و خارج از دیگر بلاک‌ها اضافه می‌کنیم. ما می‌توانیم این بخش را در پایین بخش / قرار دهیم.

در این بخش، می‌بایست یک مقداری به نام auth_basic جهت نمایش پیام تایید اعتبار تعریف نماییم.

سپس باید یه مقدار به نام auth_basic_user_file جهت معرفی فایلی که برای احراز هویت ایجاد کرده‌ایم نعریف نماییم. با باز شدن رابط phpMyAdmin، وب سرور Nginx از کاربر درخواست ورود جزییات جهت احراز هویت می‌نماید و پس از بررسی، در صورت صحیح بودن اطلاعات ورودی با مشخصات احراز هویتی رابط وب phpMyAdmin را به کاربر نمایش می‌دهد.

تغییرات می‌بایست بصورت زیر باشد.

server {
    ...
    location /my {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/.htpassword;
    }
    ...
}

فایل را ذخیره و خارج شوید.

جهت اعمال این تغییرات، می‌بایست وب‌سرور را ریستارت کنیم.

systemctl restart nginx

در حال حاضر، اگر رابط وب phpMyAdmin را باز کنیم، از شما درخواست نام کاربری و رمز عبوری که به فایل .htpasswd اضافه کرده‌ایم را می‌خواهد.

http://server_domain_or_IP/my

پس از ورود موفقیت آمیز و احراز هویت، به صفحه ورود phpMyAdmin وارد خواهید شد.