درحالیکه بسیاری از کاربران به عملکرد یک سیستم مدیریت پایگاه داده مانند MySQL نیاز دارند، ممکن است از تعامل با سیستم صرفا از طریق پرامپت نویسی (Prompt) احساس راحتی نکنند. ازاینرو، phpMyAdmin ایجاد شده است تا کاربران بتوانند از طریق یک رابط وب با دیتابیس MySQL تعامل داشته باشند. در این راهنما، نحوه نصب phpMyAdmin روی اوبونتو را توضیح میدهیم تا بتوانید با خیال راحت از آن برای مدیریت پایگاه دادههای خود در سیستم اوبونتو 20.04 استفاده کنید.
پیشنیازهای نصب phpMyAdmin روی اوبونتو
برای اینکه بتوانید مراحل اشارهشده در این آموزش را با موفقیت پشت سر بگذارید، به این موارد نیاز دارید:
یک سرور اوبونتو 20.04
- سرور لینوکس اوبونتو باید یک کاربر بدون دسترسی روت اما با امتیازات مدیریتی و یک فایروال پیکربندیشده با UFW داشته باشد.
- یک پشته LAMP (لینوکس، آپاچی، MySQL و PHP) روی سرور اوبونتو 20.04 شما نصب شده باشد.
ملاحظات امنیتی
- مستقیما با فرایند نصب MySQL شما ارتباط برقرار میکند
- احراز هویت را با استفاده از اعتبار MySQL انجام میدهد
- نتایج را برای کوئریهای SQL دلخواه اجرا میکند و برمیگرداند
بهایندلایل و از آنجایی که phpMyAdmin یک برنامه PHP با کاربرد گسترده است که اغلب برای حمله هدف قرار میگیرد، هرگز نباید آن را روی سیستمهای ریموت از طریق یک اتصال HTTP ساده اجرا کنید.
اگر دامنه موجود شما با گواهی SSL یا TLS پیکربندی نشده است، میتوانید یک نام دامنه را ثبت و رکوردهای DNS را برای سرور خود ایجاد کنید و در نهایت یک هاست مجازی آپاچی را راهاندازی کنید.
گام اول) نصب phpMyAdmin روی اوبونتو 20.04
میتوانید از APT برای نصب phpMyAdmin از مخازن پیشفرض اوبونتو استفاده کنید. بهعنوان کاربر sudo غیر روت، فهرست پکیج سرور خود را بهروز کنید:
sudo apt update
پس از آن، میتوانید پکیج phpMyAdmin را نصب کنید. همراه با این بسته، اسناد رسمی همچنین توصیه میکنند که چند پسوند PHP را روی سرور خود نصب کنید تا عملکردهای خاص را فعال کنید و عملکرد را بهبود بدهید.
توصیه میشود این پکیجها را نیز نصب کنید:
php-mbstring : ماژولی برای مدیریت رشتههای غیر ASCII و تبدیل رشتهها به کدهای مختلف
php-zip : این اکستنشن از آپلود فایلهای «.zip» در phpMyAdmin پشتیبانی میکند.
php-gd : پشتیبانی از کتابخانه گرافیکی GD را فعال میکند.
php-json : این پکیج PHP را به همراه پشتیبانی از سریالسازی JSON ارائه میدهد.
php-curl : به PHP اجازه میدهد تا از طریق چند پروتکل با انواع مختلف سرورها تعامل داشته باشد.
دستور زیر را برای نصب این پکیجها بر روی سیستم خود اجرا کنید. لطفا توجه داشته باشید که در فرایند نصب لازم است چند کار را برای پیکربندی phpMyAdmin انجام دهید که در ادامه آنها را بررسی میکنیم:
sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
در ادامه به چند گزینه اشاره میکنیم که برای پیکربندی درست نصب باید از آنها استفاده کنید:
برای انتخاب سرور، apache2 را انتخاب کنید.
در پاسخ به اینکه آیا میخواهید از dbconfig-common برای نصب دیتابیس استفاده کنید یا نه، گزینه Yes را انتخاب کنید.
سپس از شما خواسته میشود تا یک رمزعبور MySQL را برای phpMyAdmin تعیین و تایید کنید.
فرض کنید MySQL با موفقیت نصب شده است و حالا میخواهید پلاگین Validate Password را فعال کنید. وقتی میخواهید برای کاربر phpMyAdmin یک رمزعبور تعیین کنید، احتمالا با خطا مواجه خواهید شد.
برای حل این مشکل، گزینه abort را انتخاب کنید تا فرایند نصب متوقف شود. سپس پنجره پرامپت MySQL خود را باز کنید:
sudo mysql
اگر تایید رمزعبور را برای کاربر روت MySQL فعال کرده باشید، دستور زیر را اجرا کنید و وقتی از شما خواسته شد، رمزعبور را وارد کنید:
mysql -u root -p
از طریق پرامپت، دستور زیر را برای غیرفعال کردن کامپوننت Validate Password اجرا کنید. بهخاطر داشته باشید که با این کار، پلاگین Validate Password حذف نمیشود و صرفا از لود شدن آن در سرور MySQL شما جلوگیری میشود:
UNINSTALL COMPONENT "file://component_validate_password";
حالا میتوانید با دستور زیر کلاینت MySQL را ببندید:
exit
سپس پکیج phpmyadmin را مجددا نصب کنید تا طبق انتظار کار کند:
sudo apt install phpmyadmin
پس از اینکه phpMyAdmin نصب شد، شما میتوانید با دستور sudo mysql یا mysql -u root -p پرامپت MySQL را دوباره باز کنید و سپس با دستور زیر، کامپوننت Validate Password را مجددا فعال کنید:
INSTALL COMPONENT "file://component_validate_password";
فرایند نصب، فایل پیکربندی phpMyAdmin Apache را به دایرکتوری « /etc/apache2/conf-enabled/» اضافه میکند که بهصورت خودکار خوانده میشود. برای اتمام پیکربندی آپاچی و پیاچپی، فقط یک کار دیگر باقی مانده است تا از کارکرد بدون مشکل آنها با phpMyAdmin مطمئن شوید. با استفاده از دستور زیر، اکستنشن mbstring پیاچپی را فعال کنید:
sudo phpenmod mbstring
پس از آن، آپاچی را ریستارت کنید تا تغییرات اعمال شود:
sudo systemctl restart apache2
اگر این مراحل را بهدقت انجام داده باشید، نصب phpMyAdmin روی اوبونتو با موفقیت انجام شده و طوری پیکربندی شده است تا با آپاچی بهخوبی کار کند. اما قبل از اینکه به phpMyAdmin لاگین و با پایگاههای داده MySQL تعامل کنید، باید مطمئن شوید که کاربران MySQL شما مجوزهای لازم برای تعامل با این برنامه را دارند.
گام دوم) تنظیمات احراز هویت و دسترسیهای کاربر
پس از نصب phpMyAdmin روی اوبونتو (سرور مجازی لینوکس با توزیع اوبونتو)، بهطور خودکار یک کاربر پایگاه داده بهنام phpMyAdmin ایجاد میشود که فرایند اساسی خاصی را برای این برنامه انجام میدهد. بهجای اینکه با این نام کاربری و رمزعبور مدیریتی که در حین نصب تنظیم کرده بودید وارد شوید، توصیه میشود که بهعنوان کاربر روت MySQL یا کاربری که از طریق رابط phpMyAdmin برای مدیریت پایگاه داده تعیین کردهاید وارد شوید.
پیکربندی دسترسی رمزعبور برای حساب روت MySQL
در سیستمهای اوبونتو که MySQL 5.7 و بالاتر را اجرا میکنند، کاربر روت MySQL بهطور پیشفرض و نه با رمزعبور، بلکه با استفاده از افزونه auth_socket احراز هویت میشود. این امر در بسیاری از موارد امنیت و قابلیت استفاده بیشتری را فراهم میکند، اما درعینحال در برخی موارد که نیاز است به یک برنامه خارجی مانند phpMyAdmin مجوز دسترسی به کاربر بدهید، میتواند شرایط را پیچیدهتر کند.
برای اینکه بهعنوان کاربر روت MySQL خود به phpMyAdmin وارد شوید، باید روش احراز هویت را از auth_socket به روشی که از رمزعبور استفاده میکند تغییر بدهید. برای انجام این کار، پرامپت MySQL را از ترمینال باز کرده و دستور زیر را تایپ کنید:
sudo mysql
سپس با استفاده از دستور زیر، بررسی کنید که هر کاربر MySQL شما از چه شیوهای برای احراز هویت استفاده میکند:
SELECT user,authentication_string,plugin,host FROM mysql.user; Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
در این مثال، میتوانید ببینید که کاربر روت از طریق افزونه auth_socket احراز هویت میشود. برای پیکربندی اکانت روت بهگونهای که از رمزعبور برای احراز هویت استفاده کند، دستوری ALTER USER را اجرا کنید. کلمه password را با یک رمزعبور قوی جایگزین کنید:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
نکته: دستور ALTER USER قبلی تعیین کرد که احراز هویت کاربر روت MySQL با افزونه caching_sha2_password انجام شود. براساس اسناد رسمی MySQL، caching_sha2_password افزونهای است که بهصورت پیشفرض توسط MySQL توصیه میشود، زیرا این افزونه نسبت به افزونه mysql_native_password که قدیمیتر اما همچنان رایج است، امکان رمزگذاری قویتر برای رمزهای عبور را فراهم میکند.
اما برخی از نسخههای PHP بهخوبی با caching_sha2_password سازگاری ندارند. به گزارش پیاچپی، این مشکل در PHP 7.4 برطرف شده است، اما اگر هنگام لاگین کردن به phpMyAdmin با خطا مواجه شدید، توصیه میکنیم شیوه احراز هویت کاربر روت را به افزونه mysql_native_password تغییر دهید. بهاینمنظور از دستور زیر استفاده کنید:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
سپس باید روشهای احراز هویت تعیینشده برای هر کدام از کاربران خود را بررسی کنید تا مطمئن شوید که کاربر روت از طریق افزونه auth_socket احراز هویت میشود:
SELECT user,authentication_string,plugin,host FROM mysql.user; Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
همانطور که در خروجی این دستور میبینید، کاربر روت با یک رمزعبور احراز هویت میشود. اکنون شما میتوانید بهعنوان کاربر روت و با رمزعبوری که تعیین کردهاید به اینترفیس phpMyAdmin وارد شوید.
پیکربندی رمزعبور دسترسی برای یک کاربر اختصاصی MySQL
گاهی اوقات ممکن است لاگین کردن با یک کاربر اختصاصی به phpMyAdmin راهحل مناسبتری باشد. بهاینمنظور، پرامپت MySQL را باز کرده و دستور زیر را وارد کنید:
sudo mysql
اگر احراز هویت از طریق رمزعبور برای کاربر روت شما فعال شده باشد، همانطور که در بخش قبلی توضیح داده شد، شما باید دستور زیر را اجرا کنید تا با وارد کردن رمزعبور امکان ورود داشته باشید:
mysql -u root -p
اکنون میتوانید یک کاربر جدید ایجاد کنید و یک رمزعبور قوی برای آن در نظر بگیرید:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
نکته: بسته به نسخه PHP، ممکن است لازم باشد برای احراز هویت بهجای افزونه caching_sha2_password، از افزونه mysql_native_password استفاده کنید:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
سپس مجوزهای دسترسی مناسب برای کاربر جدید را تایید کنید. برای مثال، شما میتوانید مجوز دسترسی به تمام جدولهای موجود در یک پایگاه داده را به کاربر بدهید. این کاربر میتوانید امکان افزودن، تغییر یا حذف مجوزهای کاربر را مشخص کنید:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
اکنون میتوانید از محیط پرامپت MySQL خارج شوید:
exit
با استفاده از نام دامنه یا آیپی آدرس عمومی خود بههمراه دستور «/phpMyAdmin» میتوانید به اینترفیس وب دسترسی پیدا کنید:
https://your_domain_or_IP/phpmyadmin
بهعنوان کاربر روت یا با نام کاربری و رمزعبور جدیدی که بهتازگی تعیین کردهاید، به اینترفیس وارد شوید. پس از وارد شدن، شما رابط کاربری را مشاهده میکنید که چیزی شبیه به تصویر پایین است:
اکنون شما میتوانید به phpMyAdmin متصل شوید و با آن تعامل داشته باشید. تنها کاری که باقی مانده، تقویت امنیت سیستم است تا در برابر مهاجمان در امان باشید.
گام سوم) ایمنسازی phpMyAdmin
بهدلیل فراگیر بودن، phpMyAdmin یک هدف محبوب برای مهاجمان است و شما باید برای جلوگیری از دسترسی غیرمجاز مراقبتهای لازم را انجام دهید. یکی از راههای انجام این کار، استفاده از قابلیتهای احراز هویت و مجوز «htaccess.» داخلی آپاچی برای ایجاد یک گیتوی کلی است.
بهاینمنظور، ابتدا باید با ویرایش فایل پیکربندی آپاچی phpMyAdmin خود، امکان استفاده از فایل htaccess. را فعال کنید.
برای ویرایش فایل phpmyadmin.conf که در دایرکتوری پیکربندی آپاچی قرار دارد، از ویرایشگر متنی دلخواه خود استفاده کنید. برای مثال، در این آموزش از ویرایشگر متنی nano استفاده کردیم:
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
مطابق تصویر، یک آرایه AllowOverride All را در بخش «<Directory/usr/share/phpmyadmin>» فایل پیکربندی قرار دهید:
<Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php AllowOverride All . . .
پس از اضافه کردن این خط کد، فایل پیکربندی را ذخیره کنید و ببندید. اگر از ویرایشگر nano برای ویرایش فایل استفاده کردید، این کار با فشردن دکمههای Ctrl + X و سپس Y و در نهایت Enter قابل انجام است.
برای پیادهسازی تغییراتی که مشخص کردید، با دستور زیر آپاچی را ریستارت کنید:
sudo systemctl restart apache2
اکنون امکان استفاده از فایلهای «htaccess.» برای اپلیکیشن شما فعال شده است، باید با ایجاد یک فایل «htaccess.»، امنیت را افزایش دهید.
بهاینمنظور، فایل باید درون دایرکتوری اپلیکیشن ساخته شود. پس از ایجاد این فایل، با ویرایشگر متن دلخواه خود و با استفاده مجوزهای روت و دستور زیر، فایل را باز کنید:
sudo nano /usr/share/phpmyadmin/.htaccess
درون فایل، اطلاعات زیر را وارد کنید:
AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
در ادامه توضیح میدهیم که هر کدام از این خطها چه معنایی دارند:
AuthType Basic: این خط نوع احراز هویتی که استفاده میکنید را مشخص میکند. در نوع ساده یا Basic، احراز هویت رمزعبور از طریق یک فایل password انجام میشود.
AuthName: این خط پیامی را برای پنجره احراز هویت تعیین میکند. شما میتوانید این پیام را خیلی ساده بنویسید تا کاربران تاییدنشده در مورد چیزی که از آن محافظت میکنید اطلاعاتی بهدست نیاورند.
AuthUserFile: این خط مکان فایل password را که برای احراز هویت استفاده میشود مشخص میکند. این فایل باید خارج از دایرکتوریهایی باشد که سرویس دریافت میکنند. در ادامه، نحوه ایجاد این فایل را توضیح میدهیم.
Require: در این خط مشخص میکنید که فقط کاربران احراز هویت شده باید به این منبع دسترسی داشته باشند. وظیفه اصلی این خط کد در واقع جلوگیری از ورود کاربران تاییدنشده است.
پس از اضافه کردن این اطلاعات، میتوانید فایل «htaccess.» را ذخیره کنید و ببندید.
مکانی که برای ذخیرهسازی فایل password خود انتخاب کردید «/etc/phpmyadmin/.htpasswd» بود. اکنون شما میتوانید این فایل را ایجاد کنید و با استفاده از ابزار htpasswd، آن را در اختیار یک کاربر اولیه (Initial) قرار دهید:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
با اجرای این دستور از شما خواسته میشود تا رمزعبور را برای این کاربر تعیین و تایید کنید. پس از آن، فایل password ساخته شده که حاوی رمزعبور مشخصشده از سمت شما است.
اگر میخواهید یک کاربر اضافی را وارد کنید، میتوانید فلگ «c-» را از دستور بالا حذف کنید:
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
اکنون باید آپاچی را ریستارت کنید تا احراز هویت «htaccess.» اعمال شود
sudo systemctl restart apache2
اکنون وقتی در سابدایرکتوری phpMyAdmin خود هستید، از شما خواسته میشود تا نام و رمزعبور کاربر اضافی که بهتازگی ایجاد کردید را وارد کنید:
https://domain_name_or_IP/phpmyadmin
پس از تایید شدن احراز هویت آپاچی، شما به صفحه احراز هویت عادی phpMyAdmin وارد میشود که باید اطلاعات حساب MySQL خود را وارد کنید. با افزودن یک لایه امنیتی اضافی، شما امنیت پایگاه داده خود را تقویت کردهاید. از آنجایی که phpMyAdmin در گذشته بارها مورد حمله قرار گرفته است، انجام کار کاملا توصیه میشود.
جمعبندی
در این مطلب به آموزش نحوه نصب phpMyAdmin روی اوبونتو 20.04 پرداختیم.
phpMyAdmin شما اکنون پیکربندی شده و آماده است تا بر روی سرور Ubuntu 20.04 استفاده شود. با استفاده از این اینترفیس، شما میتوانید پایگاه داده، کاربر و جدول ایجاد کنید و همچنین عملیاتی مانند حذف یا تغییر ساختارها و داده را انجام دهید.