در این مقاله، میخواهیم نحوهی نصب phpMyAdmin و ایمنسازی آن در سیستمعامل اوبونتو را به طور مفصل شرح دهیم. با اینکه بسیاری از کاربران نیاز دارند تا از یک سیستم مدیریت پایگاه داده مانند MySQL استفاده کنند، اما معمولا کار با چنین سیستمهایی راحت نیست و نمیتوان فقط از طریق اعلانها با این سیستمها تعامل داشت.
برای حل این مشکل، ابزارهایی نظیر phpMyAdmin ارائه شدند تا کاربران بتوانند از طریق یک رابط کاربری وب زیبا و آسان، با سیستم MySQL تعامل داشته باشند. در این راهنما، میخواهیم دربارهی نحوهی ایمنسازی و نصب phpMyAdmin صحبت کنیم تا بتوانید خودتان بهتنهایی از آن برای مدیریت پایگاه دادههایتان در سیستم اوبونتو استفاده کنید.
پیشنیازهای نصب phpMyAdmin در اوبونتو
برای اینکه بتوانید نصب phpMyAdmin را با استفاده از این راهنما انجام دهید، به موارد زیر نیاز دارید:
- یک سرور اوبونتو: این سرور، باید یک سرور مجازی لینوکس بر پایهی اوبونتو باشد. همچنین، سرور شما باید دارای یک کاربر غیر روت با امتیازات ادمینی و یک فایروال پیکربندیشده با ufw (Uncomplicated Firewall) باشد.
- یک پشتهی LAMP (میتواند لینوکس، آپاچی، PHP یا MySQL باشد) که بر روی سرور اوبونتو نصب شدهاست.
اوبونتو یک توزیع لینوکس محبوب است و از آنجاییکه معمولا شرکتهای ارائهدهندهی خدمات هاست، این سرور مجازی را ارائه میدهند، مشکلی از بابت دسترسی به این سرور نخواهید داشت. یادتان باشد زمانی که از نرمافزارهایی مانند phpMyAdmin استفاده میکنید، باید برخی از ملاحظات امنیتی را رعایت کنید. مهمترین دلایل رعایت این ملاحظات عبارتنداز:
- این نرمافزارها مستقیما با نصب MySQL در ارتباطاند.
- این نرمافزارها احراز هویت را با استفاده از سیستم اعتبارسنجی MySQL انجام میدهند.
- برای کوئریهای SQL دلخواه، نتایج را اجرا کرده و آن را برمیگردانند.
بنا به دلایل بالا و همچنین از آنجاییکه برنامههای PHP معمولا هدف حملات سایبری قرار میگیرند، هیچوقت نباید نرمافزارهایی نظیر phpMyAdmin را بر روی سیستمهای ریموت و از طریق یک اتصال نام امن HTTP ساده اجرا کنید.
درصورتی که دامنهی وبسایتتان را با گواهینامههای SSL/TLS پیکربندی نکردهاید، باید رکوردهای DNS را برای سرور لینوکس اوبونتو خود ایجاد کرده و یک هاست مجازی آپاچی را راهاندازی کنید.
در ادامه، مراحل نصب phpMyAdmin را با یکدیگر دنبال میکنیم.
مراحل نصب phpMyAdmin در اوبونتو
مرحلهی ۱ – نصب phpMyAdmin
برای نصب phpMyAdmin روی ابونتو، میتوانید از پکیجهای نرمافزاری پیشرفته (APT) که در مخازن اوبونتو قرار دارند، برای نصب راحتتر phpMyAdmin استفاده کنید. اگر اخیرا بهعنوان کاربر غیر روت وارد سیستم شدهاید و فهرست پکیجهایتان را آپدیت نکردهاید، با اجرای دستور زیر این کار را انجام دهید:
$ sudo apt update
پس از اجرای دستور بالا، میتوانید پکیج phpMyAdmin را نصب کنید. توصیه میشود که همراه با این پکیج، چند افزونهی 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 کیبورد را فشار دهید. اگر چنین کاری نکنید، فایلهای لازم در حین نصب جابجا نمیشوند. برای انتخاب آپاچی، باید کلیدهای TAB، SPACE و سپس ENTER را فشار دهید.
- زمانی که از شما پرسیده میشود که آیا از dbconfig-common برای راهاندازی پایگاه دادهتان استفاده میکنید یا خیر، گزینهی YES را انتخاب کنید.
- در مرحلهی بعد، از شما خواسته میشود که رمز عبور اپلیکیشن MySQL را برای سیستم phpMyAdmin انتخاب کرده و آن را تایید کنید.
توجه: درصورتی که MySQL را با استفاده از پشتهی LAMP نصب کردهاید و میخواهید پلاگین Validate Password را نصب کنید، احتمالا در زمان تنظیم رمز عبور برای کاربر phpMyAdmin با پیغام خطای زیر مواجه خواهید شد:
اگر پیغام خطای بالا را دریافت کردید، برای حل این مشکل، باید ابتدا گزینهی abort را انتخاب کنید تا فرآیند نصب متوقف شود. سپس، MySQL prompt را با اجرای دستور زیر باز کنید:
$ 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
پس از اینکه دستور بالا با موفقیت اجرا شد، میتوانید MySQL prompt را با دستور sudo mysql یا mysql -u root -p باز کرده و سپس دستور زیر را برای فعالکردن مجدد Validate Password اجرا کنید:
$INSTALL COMPONENT "file: //component_validate_password";
در زمان نصب phpMyAdmin روی ابونتو، فایل پیکربندی phpMyAdmin Apache به دایرکتوریای در مسیر /etc/apache2/conf-enabled/ اضافه میشود و از آنجا بهصورت خودکار فراخوانی میشود. برای تکمیل پیکربندی آپاچی و PHP برای کار با phpMyAdmin، باید افزونهی mbstring PHP را با اجرای دستور زیر فعال کنید:
$ sudo phpenmod mbstring
پس از اجرای دستور بالا، باید مجددا آپاچی را راهاندازی کنید تا تغییراتی که ایجاد کردهاید شناسایی شوند:
$ sudo systemctl restart apache2
حال مراحل نصب phpMyAdmin برای کار با آپاچی به اتمام رسیده است. با این حال، باید قبل از شروع به کار با MySQL، مطمئن شوید که امتیازات لازم برای تعامل با برنامه را دارید…
مرحلهی ۲ – تنظیم سیستم احراز هویت و امتیازات کاربر
پس از نصب phpMyAdmin بر روی سرور، یک کاربر پایگاه داده به نام phpMyAdmin بهصورت خودکار ایجاد میشود که این کاربر، فرآیندهای اساسی خاصی را برای برنامهی شما انجام میدهد. بهتراست به جای اینکه بهعنوان این کاربر با رمز عبور ادمینی وارد شوید، از طریق رابط phpMyAdmin بهعنوان کاربر روت MySQL یا کاربر dedicated به پایگاه دادهتان وارد شوید.
پیکربندی دسترسی رمز عبور برای حساب روت MySQL
احراز هویت کاربر روت در سیستمهای اوبونتو که MySQL ورژن ۵.۷ و نسخههای بعدتر از آن را اجرا میکنند، بهصورت پیشفرض با پلاگین auth_socket (به جای استفاده از رمز عبور) انجام میشود. با این پلاگین، امنیت و قابلیت بیشتر میشود، اما ممکناست برای دسترسیدادن به برخی از برنامههای خارجی مانند phpMyAdmin، شرایط کمی سخت شود.
برای اینکه در سیستم MySQL بهعنوان یک کاربر روت وارد phpMyAdmin شوید، باید احراز هویت را از طریق auth_socket و به روشی که از رمز عبور استفاده میکند، انجام دهید. برای انجام این کار، ابتدا MySQL prompt را از طریق ترمینال سیستم باز کنید:
$ sudo mysql
سپس، با اجرای دستور زیر باید بررسی کنید که هر کدام از حسابهای کاربری MySQL شما از کدام روش احراز هویت استفاده میکنند:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
خروجی دستور بالا باید چیزی شبیه به زیر باشد:
Output +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | debian-sys-maint | $A$005$I: jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6 | caching_sha2_password | localhost | | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | phpmyadmin | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9 | caching_sha2_password | localhost | | root | | auth_socket | localhost | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ 6 rows in set (0.00 sec)
خط دوم خروجی بالا نشان میدهد که کاربر روت با استفاده از پلاگین auth_socket احراز هویت را انجام داده است. اگر میخواهید حساب روت را برای احراز هویت با رمز عبور پیکربندی کنید، باید دستور ALTER USER را مطابق زیر اجرا کنید. یادتان باشد که password را با یک رمز عبور قوی جایگزین کنید:
Mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
توجه: دستور ALTER USER برای تنظیم کاربر روت MySQL برای احراز هویت با پلاگین caching_sha2_password بکار میرود. پلاگین caching_sha2_password همان پلاگین احراز هویت پیشفرض MySQL است؛ زیرا علاوهبر ایمنبودن، همچنان به اندازهی پلاگین mysql_native_password پرکاربرد است.
با این حال، برخی از ورژنهای php با caching_sha2_password سازگاری ندارند. البته این مشکل در PHP 7.4 برطرف شدهاست. درصورتی که برای ورود به phpMyAdmin با پیغام خطا مواجه شدید، بهتراست طبق دستور زیر، روت را برای احراز هویت با mysql_native_password تنظیم کنید:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
در قدم بعد، با استفاده از دستور زیر، احراز هویت استفادهشده توسط کاربران را بررسی کنید تا مطمئن شوید که روت با استفاده از پلاگین auth_socket احراز هویت نمیشود:
Mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
خروجی دستور بالا، باید چیزی شبیه به شکل زیر باشد:
Output +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | debian-sys-maint | $A$005$I: jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6 | caching_sha2_password | localhost | | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | phpmyadmin | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9 | caching_sha2_password | localhost | | root | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a. | caching_sha2_password | localhost | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ 6 rows in set (0.00 sec)
این خروجی نشان میدهد که کاربر روت احراز هویت خود را از طریق رمز عبور انجام میدهد. حال میتوانید با استفاده از رمز عبوری که مشخص کردهاید، بهعنوان کاربر روت وارد رابط کاربری phpMyAdmin شوید.
پیکربندی دسترسی به رمز عبور برای کاربر اختصاصی MySQL
شاید لازم میدانید که بهعنوان یک کاربر اختصاصی به phpMyAdmin متصل شوید. برای انجام این کار، با استفاده از دستور زیر، وارد پوستهی MySQL شوید:
$ sudo mysql
اگر برای ورود کاربر اصلی، احراز هویت به وسیلهی رمز عبور را فعال کردهاید، باید دستور زیر را اجرا کرده و سپس رمز عبور را وارد کنید:
$ mysql -u root -p
سپس، با استفاده از دستور زیر، یک کاربر جدید ایجاد کرده و یک رمز عبور قوی برای آن مشخص کنید:
Mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
توجه: اگر میخواهید تنظیمات احراز هویت کاربر جدید را به جای پلاگین caching_sha2_password با پلاگین mysql_native_password انجام دهید، بسته به ورژن PHP که نصب کردهاید، میتوانید از دستور زیر استفاده کنید:
Mysql> ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
سپس، باید امتیازات لازم را به کاربر جدید بدهید. بهعنوان مثال، با استفاده از دستور زیر، میتوانید امتیاز کاربر را برای تمام جداول داخل پایگاه داده مانند توانایی اضافهکردن، تغییردادن و حذف امتیاز کاربران، درنظر بگیرید:
Mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
سپس، با اجرای دستور زیر از پوستهی MySQL خارج شوید:
Mysql> exit
حال میتوانید طبق دستور زیر، به نام دامنهی سرور یا آدرس IP عمومی خود (که در انتهایش عبارت /phpmyadmin قرار دارد) مراجعه کرده و به رابط وب خود دسترسی داشته باشید:
https: //your_domain_or_IP/phpmyadmin
حال میتوانید چه بهصورت کاربر روت و چه با نام کاربری و رمز عبور جدیدتان، وارد رابط کاربری شوید. پس از اینکه وارد سیستم شدید، مانند تصویر زیر به رابط کاربری phpMyAdmin هدایت میشوید:
حالا میتوانید به phpMyAdmin متصل شده و به مرحلهی سوم بروید تا امنیت سیستمتان را برای جلوگیری از حملهی مهاجمان سختتر کنید.
مرحلهی ۳ – ایمنسازی phpMyAdmin
از آنجاییکه تعداد زیادی از کاربران در سراسر دنیا از phpMyAdmin استفاده میکنند و درنتیجه این ابزار به هدف افراد خرابکار تبدیل شدهاست، باید مراقب حملهی مهاجمان باشید و از اقدامات پیشگیرانه استفاده کنید. یکی از بهترین راهکارها در چنین مواقعی، استفاده از قابلیت احراز هویت و مجوز داخلی .htaccess آپاچی در جلوی کل اپلیکیشن است.
برای انجام این کار، ابتدا باید قادر به فعالسازی فایل .htaccess به وسیلهی ویرایش فایل پیکربندی نصب phpMyAdmin آپاچی باشید. در قدم اول، باید با استفاده از یک ویرایشگر متن دلخواه، فایل phpmyadmin.conf که در دایرکتوری تنظیمات آپاچی قرار دارد را ویرایش کنید. در این آموزش، از دستور nano استفاده میکنیم:
$ sudo nano /etc/apache2/conf-available/phpmyadmin.conf
مانند دستور زیر، یک دستور AllowOverride All را در بخش <Directory /usr/share/phpmyadmin> فایل پیکربندیتان اضافه کنید:
/etc/apache2/conf-available/phpmyadmin.conf <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
سپس، اطلاعات زیر را درون فایل وارد کنید:
/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، دربارهی نحوهی پیکربندی و آمادهسازی استفاده از آن در سرور اوبونتو صحبت کردیم. با استفاده از این رابط کاربری، میتوانید به راحتی پایگاه داده، کاربران و جداول خود را ایجاد کرده و کارهایی مانند حذف و اصلاح ساختار و دادهها را خیلی راحت انجام دهید.