شاید بسیاری از کاربران با مزایایی سیستمهای مدیریت پایگاه داده مانند MySQL آشنا باشند، ولی شاید برخی از آنها با تعاملی که صرفاً از طریق رابط MYSQL صورت میگیرد، احساس راحتی نکنند. phpMyAdmin ابزاری است که برای تعامل کاربران با MySQL از طریق یک رابط کاربری تحتوب توسعه داده شده است. در این آموزش، در مورد نصب و ایمنی ابزار phpMyAdmin صحبت خواهیم کرد. در نتیجه شما خواهید توانست که از این ابزار به صورت ایمن برای مدیریت پایگاههای داده در سیستم اوبونتو 20.04 استفاده کنید.
پیشنیازها
برای تکمیل مراحل این آموزش، به موارد زیر احتیاج خواهید داشت.
- یک سرور اوبونتو 04. این سرور باید دارای یک کاربر غیر روت با دسترسیهای مدیریتی و یک فایروال تنظیمشده با UFW باشد. برای این منظور، حتماً تنظیمات اولیه سرور اوبونتو 20.04 را انجام دهید.
- نصب بسته LAMP شامل لینوکس، آپاچی، MySQL و Php در سرور اوبونتو 04. در صورتی که این بسته را نصب نکردهاید، میتوانید مراحل کار را در این مقاله دنبال کنید.
علاوه بر این، برخی ملاحظات امنیتی در هنگام استفاده از نرمافزارهایی مانند phpMyAdmin وجود دارند؛ چرا که این ابزارها:
- مستقیماً از نسخه نصبشدده MySQL ارتباط برقرار میکنند.
- با استفاده از گواهینامههای MySQL تأییدیهها را مدیریت میکنند.
- اجرا و برگشت نتایج را برای درخواستهای انتخابی SQL انجام میدهند.
به همین دلایل و از آنجایی که این اپلیکیشن Php به صورت گسترده در سرورهای مختلف مورد استفاده قرار میگیرد و در معرض حملات مختلف است، استفاده از ابزار phpMyAdmin در یک سیستم ریموت و با اتصال ساده Http به هیچعنوان توصیه نمیشود.
بنابراین باید حتماً به فرک تنظیمات گواهینامه SSL/TLS در سرور خود باشید. چنین چیزی حتماً به ثبت یک دامنه، ایجاد رکوردهای DNS برای سرور و تنظیمات هاست مجازی آپاچی نیاز خواهد داشت.
گام ۱) نصب ابزار phpMyAdmin
برای این منظور میتوانید از فرمان APT استفاده کنید و ابزار phpMyAdmin را از منابع پیشفرض اوبونتو نصب نمایید.
به عنوان یک کاربر غیر روت با دسترسی sudo، لیست بستههای سرور خود را بروزرسانی کنید.
<br data-mce-bogus="1"> sudo apt update
به دنبال اجرای این فرمان، میتوانید نصب phpmyadmin را انجام دهید. همچنین توصیه میشود که در کنار این بسته، برخی افزونههای Php را نصب کنید تا برخی قابلیتها و بهینهسازیها برای سرور فعال شوند.
البته ممکن است در هنگام نصب بسته LAMP برخی از این ماژولها در کنار php نصب کرده باشید. با این وجود، پیشنهاد میشود که حتماً موارد زیر را نیز نصب کنید.
- php-mbstring – یک ماژول برای مدیریت رشتههای غیر ASCII و تبدیل رشتهها به کدگذاریهای مختلف
- php-zip – افزونهای که از ارسال فایلهای فشرده .zip به ابزار phpMyAdmin پشتیبانی میکند.
- php-gd – ایجاد پشتیبانی کتابخانه گرافیکی GD
- php-json – ایجاد پشتیبانی از ابزار سریال JSON
- php-curl – امکان تعامل Php با انواع مختلف سرور با پروتکلهای متفاوت
برای نصب این بستهها در سیستم، از فرمان زیر استفاده کنید. به خاطر داشته باشید که برای تنظیم صحیح ابزار phpMyAdmin، باید برخی گزینهها را در هنگام نصب به درستی انتخاب نمایید. در ادامه به صورت مختصر، این گزینهها را مرور خواهیم کرد.
sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
در اینجا برخی از گزینهها برای نصب مناسب phpMyAdmin ملاحظه میکنید.
- برای انتخاب نوع سرور، گزینه “apache2” را انتخاب کنید.
هشدار: وقتی پیام نمایش داده میشود، گزینه “apache2” برجسته شده، ولی انتخاب نشده اتس. اگر کلید Space را برای انتخاب Apache فشار ندهید، برنامه نصبکننده فایلهای لازم را در طول نصب انتقال نخواهد داد. بنابراین ابتدا کلید Space، سپس Tab و در انتخاب Enter بزنید تا آپاچی انتخاب گردد.
- استفاده از dbconfig-common را برای تنظیم پایگاه داده با انتخاب گزینه Yes تأیید کنید.
- سپس از شما خواسته میشود که یک کلمه عبور اپلیکیشن MySQL برای ابزار phpMyAdmin انتخاب و تأیید نمایید.
نکته:
در صورتی که در فرآیند نصب بسته LAMP، پلاگین Validate Password را فعال کرده باشید، احتمال دارد که در هنگام تنظیم کلمه عبور برای کاربر phpmyadmin با پیغام خطای زیر روبرو شوید:
برای حل این مشکل، گزینه “abort” را انتخاب کنید تا فرآیند نصب متوقف شود. سپس پنجره MySQL را باز کنید.
sudo mysql
در صورتی که تأیید پسورد را برای کاربر روت MySQL فعال کردهاید، ابتدا این فرمان را اجرا کنید و سپس پسورد را وارد نمایید.
mysql -u root -p
حالا فرمان زیر را برای غیرفعالکردن پلاگین Validate Password تایپ کنید. به خاطر داشته باشید که این کار موجب حذف پلاگین نمیشود و فقط جلوی اجرای آن را در سرور MySQL میگیرد.
UNINSTALL COMPONENT "file://component_validate_password";
سپس میتوانید کلاینت MySQL را ببندید.
exit
در ادامه، سعی کنید که بسته ابزار phpmyadmin را دوباره نصب کنید. در نتیجه، مطابق انتظار عمل خواهد کرد.
sudo apt install phpmyadmin
وقتی نصب phpMyAdmin به انجام رسید، میتوانید دوباره پنجره MySQL را باز کنید (به وسیله فرمان sudo mysql یا mysql -u root -p). سپس فرمان زیر را برای فعالسازی دوباره Validate Password استفاده کنید.
INSTALL COMPONENT "file://component_validate_password";
فرآیند نصب موجب اضافه شدن فایل تنظیمات phpMyAdmin Apache به دایرکتوری /etc/apache2/conf-enabled/ میشود. این فایل به صورت اتوماتیک خوانده میشود. به منظور تنظیم نهایی آپاچی و Php برای هماهنگی با ابزار phpMyAdmin، تنها کار باقیمانده در این بخش، فعالسازی افزونه mbstring است.
sudo phpenmod mbstring
سپس باید آپاچی را دوباره راهاندازی کنید تا تغییرات اِعمال شوند.
sudo systemctl restart apache2
در نتیجه، نصب phpMyAdmin به اتمام رسیده و برای کار در کنار آپاچی تنظیم شده است. با این وجود، قبل از اینکه با نام کاربری وارد شوید و با پایگاههای داده MySQL تعامل داشته باشید، ابتدا باید از دسترسیهای مناسب کاربران MySQL خود مطمئن شوید.
گام ۲) تنظیمات تأیید کاربری و دسترسیها
وقتی نصب ابزار phpMyAdmin را در سرور انجام میدهید، به صورت خودکار یک پایگاه داده کاربر با نام phpmyadmin ساخته میشود. این پایگاه داده برخی فرآیندهای ثانویه را برای برنامه اجرا میکند. توصیه میشود که به جای ورود کاربر با پسورد مدیریتی که در طول فرآیند نصب تنظیم کردهاید، به عنوان یک کاربر روت MySQL یا یک کاربر ویژه مدیریت پایگاههای داده از طریق رابط کاربری phpMyAdmin وارد شوید.
تنظیم دسترسی پسورد برای حساب کاربری روت MySQL
در سیستمهای مبتنی بر اوبونتو که نسخه MySQL 5.7 و بالاتر دارند، کاربر روت MySQL به صورت پیشفرض برای تأیید از پلاگین auth_socket به جای پسورد استفاده میکند. در نتیجه، سطح ایمنی بالاتری ایجاد شده و در بسیاری موارد، قابلیتهای بیشتری فراهم میشود. ولی در عین حال، در دادن مجوز به برنامههای خارجی مانند phpMyAdmin برای دسترسی کاربر، ممکن است مشکل ایجاد شود.
به منظور ورود به phpMyAdmin به عنوان کاربر روت MySQL، شما میبایست روش تأیید را auth_socket به استفاده از پسورد تغییر دهید. برای این منظور، در ترمینال، ابزار MySQL را باز کنید.
sudo mysql
حالا بررسی کنید که هر کدام از حسابهای کاربری MySQL از چه روش تأییدی استفاده میکنند.
SELECT user,authentication_string,plugin,host FROM mysql.user;
نمونه خروجی
+——————+——————————————-+———————–+———–+
| 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)
[/php]
در مثال بالا ملاحظه میکنید که کاربر روت تأییدیه را با استفاده از پلاگین auth_socket انجام میدهد. برای تنظیم تأییدیه به روش استفاده از پسورد، فرمان زیر را اجرا کنید. حتماْ دقت کنید که پسورد مناسب و قدرتمندی انتخاب نمایید.
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
نکته: عبارت فرمان ALTER USER به صورتی است که کاربر روت MySQL را برای استفاده از پلاگین caching_sha2_password تنظیم میکند. در راهنمای رسمی MySQL، پلاگین caching_sha2_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;
خروجی
+------------------+-------------------------------------------+-----------------------+-----------+ | 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 که نصب کردهاید، ممکن است نیاز به تنظیم تأیید با mysql_native_password به جای caching_sha2_password داشته باشید.
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
سپس باید دسترسیها مناسب را برای کاربری جدید ایجاد نمایید. به عنوان مثال، میتوانید دسترسی کامل کاربر به جداول درون دیتابیس و همینطور امکان اضافه، تغییر و حذف دسترسیهای کاربر را با فرمان زیر فراهم کنید.
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
در ادامه، از پوسته MySQL خارج شوید.
exit
حالا میتوانید از طریق آدرس دامین سرور یا IP عمومی همراه با /phpmyadmin به رابط کاربری دسترسی داشته باشید.
https://your_domain_or_IP/phpmyadmin
از طریق روت یا با کلمه کاربری و رمز عبوری که تازه ایجاد کردهاید، به رابط کاربری وارد شوید.
در نتیجه، با چیزی شبیه به زیر روبرو میشوید.
حالا که قادر به اتصال و تعامل با ابزار phpMyAdmin هستید، تنها کاری که باید انجام دهید، تنظیمات امنیتی سیستم برای محافظت از آن در برابر مهاجمان است.
گام ۳) تنظیمات ایمنی phpMyAdmin
ابزار phpMyAdmin به خاطر همهگیر بودن، هدف محبوبی در میان مهاجمان محسوب میشود. در نتیجه، برای محافظت از آن باید برخی اقدامات امنیتی اضافی را انجام دهید. یکی از رویکردها در این زمینه، ایجاد یک درگاه در مقابل کل اپلیکیشن با استفاده از سیستم تأیید داخلی آپاچی .htaccess است.
برای این منظور، ابتدا باید استفاده از فایل .htaccess را فعال کنید. این کار با ویرایش فایل تنظیمات phpMyAdmin صورت میگیرد.
با ویرایشگر دلخواه، فایل 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 را برای اپلیکیشن فعال کردهاید، نیاز به ایجاد یکی از این فایلها برای کاربردهای امنیتی دارید. برای این منظور، فایل باید حتماً در دایرکتوری اپلیکیشن ایجاد شود. با استفاده از فرمان زیر میتوانید فایل مورد نیاز را ایجاد کرده و آن را با دسترسیهای روت در ویرایشگر متنی باز کنید.
sudo nano /usr/share/phpmyadmin/.htaccess
در این فایل، اطلاعات زیر را وارد نمایید.
AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
در اینجا معنای هر کدام از این خطوط را توضیح میدهیم.
- AuthType Basic – این خط نوع تأییدیه را مشخص میکند. در انیجا، تأییدیه با استفاده از یک فایل پسورد صورت میگیرد.
- AuthName – در اینجا پیام تأییدیه تنظیم میشود. این پیام باید به صورت کلی باشد تا کاربران ناشناس نتوانند اطلاعاتی در مورد منبع به دست آورند.
- AuthUserFile – این خط موقعیت فایل پسورد را برای استفاده به منظور تأیید مشخص میکند. این فایل باید خارج از دایرکتوری سرویس باشد. در ادامه، این فایل را ایجاد میکنیم.
- Require valid-user – در اینجا مشخص میکنیم تنها کاربران تأیید شده به این منبع دسترسی داشته باشند. این کار باعث میشود که کاربران ناشناس نتوانند به سیستم وارد شوند.
پس از اتمام کار، فایل را ذخیره کرده و از آن خارج شوید.
موقعیت انتخابی برای فایل پسورد /etc/phpmyadmin/.htpasswd که حالا میخواهیم آن را ایجاد کنیم. سپس به آن یک کاربر اولیه با ابزار htpasswd اختصاص میدهیم.
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
حالا از شما خواسته میشود که برای کاربری که ساختهاید، یک رمز عبور انتخاب و تأیید کنید. در نتیجه، فایل نهایی با رمزی که وارد کردهاید، ایجاد میشود.
اگر بخواهید که یک کاربر اضافی وارد کنید، باید آن را بدون گزینه -c و به صورت زیر تایپ نمایید.
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
سپس آپاچی را دوباره راهاندازی کنید تا تأییدیه .htaccess فعال شود.
sudo systemctl restart apache2
حالا وقتی به سابدایرکتوری phpMyAdmin وارد میشوید، از شما کلمه کاربری و رمز عبور که بهتازگی ایجاد کردهاید، درخواست میشود.
https://domain_name_or_IP/phpmyadmin
پس از ورود به آپاچی، به صفحه ورودی ابزار phpMyAdmin هدایت میشوید تا کلمه کاربری و رمز عبور MySQL را وارد کنید. با اضافه کردن یک سری گواهی غیر MySQL نیز میتوانید یک لایه امنیتی دیگر به پایگاه داده خود بیفزایید. انجام این کارها فقط به خاطر این است که ابزار phpMyAdmin در مقابل حملات آسیبپذیر بوده و در گذشته این موضوع ثابت شده است.
جمعبندی
حالا باید نحوه تنظیم ابزار phpMyAdmin را آموخته و برای استفاده از آن در اوبونتو 20.04 آماده باشید. با استفاده از این رابط کاربری میتوانید ساختارهایی مانند پایگاه داده، کاربریهای مختلف و جداول را ایجاد کرده و عملیاتی مانند حذف و اصلاح دادهها را انجام دهید.