MySQL معروف ترین سیستم open source دیتابیس در جهان است و MariaDB (که در حقیقت شاخه ای از MySQL است) سریع ترین دیتابیس open source جهان است که در حال گسترش میباشد. بعد از نصب سرور MySQL با کانفیگ های پیش فرضش، در حقیقت نا امن است و امنیت بخشیدن به سرور مای اسکیول یکی از حیاتی ترین تسک هایی است که در مدیریت کلی دیتابیس در نظر گرفت.
همچنین توصیه میشود مطالعه کنید.
آموزش MySQL/MariaDB برای مبتدیان - بخش 1
این امنیت همچنین شامل تقویت بخشیدن موارد کلی امنیتی سرور لینوکس میباشد. از آنجایی که هکرها همیشه نقاط آسیب پذیر در هر بخشی از یک سیستم را اسکن میکنند و دیتابیس ها همیشه از گذشته تا به امروز نواحی کلیدی مقصد هکر ها هستند باید به امنیت دیتابیس توجه ویژه ای داشت. یک مثال بسیار رایج در حقیقت حملات brute-forcing برای دسترسی به پسورد root دیتابیس MySQL میباشد.
در این پست ما بهترین مثال ها برای اعمال امنیت مفید MySQL/MariaDB در سرورهای لینوکسی را شرح خواهیم داد.
1 - امن کردن سرور MySQL
این اولین مرحله توصیه شده بعد از نصب MySQL به منظور امنیت بخشیدن به سرور دیتابیس میباشد. این اسکریپت بهبود بخشیدن به امنیت سرور مای اسکیول شما را با سوال پرسیدن از شما را سرعت میدهد.
بعد از اجرا کردن آن پسورد root را تعریف کنید و به سوالات با وارد کردن Yes/Y و فشار دادن Enter پاسخ دهید.
2 - Bind کردن سرور دیتابیس به آدرس Loopback
این تنظیمات دسترسی از ماشین های remote را محدود خواهد کرد، این تنظیمات به سرور MySQL میگوید که تنها ارتباطات از localhost را قبول کند. شما میتوانید آنرا در فایل اصلی تنظیمات تعریف کنید.
خط زیر را، در زیر قسمت [mysqld] اضافه کنید.
3 - غیر فعال کردن LOCAL INFILE در MySQL
به عنوان بخش دیگری از امنیت شما نیاز دارید که local_infile را به منظور جلوگیری کردن از دسترسی به فایل سیستم اصلی با تغییر قسمت زیر بخش [mysqld] غیرفعال کنید.
4- تغییر Port پیش فرض MySQL
متغییر Port شماره پورت MySQL مورد استفاده برای listen کردن روی ارتباطات TCP/IP تعریف میکند. شماره پورت پیش فرض 3306 میباشد اما شما میتوانید شماره آنرا در بخش [mysqld] تغیر دهید.
5 - فعال کردن Log ها در MySQL
log ها یکی از بهترین شیوه ها برای فهمیدن این است که چه اتفاقاتی روی یک سرور می افتد. و در مواقع attack میتوانید به سادگی هر گونه فعالیت مخربی را از روی فایل های لاگ متوجه شوید. شما میتوانید لاگ MySQL را با اضافه کردن متغییر زیر به بخش [mysqld] فعال کنید.
6 - تعریف Permission مناسب روی فایل های MySQL
مطمئن شوید که پرمیژن های مناسب را برای همه فایل ها و دایرکتوری های سرور MySQL تعریف کرده باشید. فایل /etc/my.conf باید تنها توسط root قابل write داشته باشد. که دسترسی کاربران دیگر را به منظور تغییر تنظیمات سرور دیتابیس block میکند.
7 - حذف کردن History شل MySQL
تمام دستوراتی که شما روی shell مای اسکیول توسط کلاینت MySQL اجرا کرده اید در یک فایل history به نام ~/.mysql_history ذخیره میشود. این فایل میتواند خطرناک باشد زیرا به ازای هر اکانتی که شما خواهید ساخت همه username و password ها روی shell تایپ میشوند و در فایل history ثبت میشود.
8 - دستورات MySQL را در Commandline اجرا نکنید
همانطور که میدانید تمام دستوراتی که در ترمینال تایپ میکنید در یک فایل history ذخیره میشوند، که بسته به شلی که از آن استفاده میکنید متفاوت است. (برای مثال برای شل bash فایل ~/.bash_history). یک هکر که به این فایل history دسترسی پیدا کند میتواند به آسانی هر پسورد ثبت شده ای را در آن مشاهده کند.
شدیدا توصیه نمیشود که پسوردها را در command line شبیه به زیر تایپ کنید.
زمانیکه آخرین قسمت از فایل history دستور را چک میکنید، شما میتوانید پسوردی که در بالا تایپ کردید را مشاهده کنید.
بهترین راه برای وصل شدن به MySQL استفاده از دستور زیر میباشد.
9 - تعریف کاربران مربوط به هر Aplication خاص روی Database
برای هر اپلیکیشن در حال اجرا روی سرور تنها برای user مربوط به آن اپلیکیشن دسترسی به دیتابیس مختص آن اپلیکیشن را فراهم کنید. به طور مثال اگر شما یک سایت Wordpress دارید یک یوزر خاص برای دیتابیس سایت وردپرس تان همانند زیر ایجاد کنید.
و به خاطر داشته باشید که همیشه اکانت های کاربری که دیگر، دیتابیس اپلیکیشن را مدیریت نمیکند را از روی سرور پاک کنید.
10 - از Plugin و Librarie های امنیتی استفاده کنید
MySQL شامل تعدادی پلاگین های امنیتی به منظور : احراز هویت (authenticating) کاربرانی که به سرور متصل میشوند، اعتبار سنجی پسورد (password-validation) و امن کردن storage برای اطلاعات حساس میباشد که همه اینها در ورژن رایگان موجود هستند.
برای کسب اطلاعات بیشتر به لینک زیر مراجعه فرمایید.
https://dev.mysql.com/doc/refman/5.7...y-plugins.html
11 - تغییر مرتب Password های MySQL
این مورد یکی از توصیه های امنیتی information/application/system این میباشد، که با توجه به سیاست امنیتی داخلی شما، هر چند یکبار پسورد را تغییر دهید. به هر حال این کار میتواند از snooper هایی که ممکن است فعالیت های شما را در طول یک مدت زمان طولانی ردیابی کنند و همچنین دستیابی به سرور mysql شما جلوگیری کنند.
12 - Update مرتب پکیج سرور MySQL
شدیدا توصیه میشود پکیج های MySQL/MariaDB را مرتبا به منظور به روز نگه داشتن سرور با آپدیت های امنیتی و رفع باگ ها، از ریپازیتوری های مرجع upgrade کنید. عموما پکیج های پیش فرض موجود در ریپازیتوری های سیستم عامل منقضی میشوند.
بعد از اعمال هرگونه تغییری در سرور MySQL/MariaDB همیشه سرویس را restart کنید.
همچنین توصیه میشود مطالعه کنید.
15 مورد مفید برای بالا بردن کارایی و بهبود عملکرد MySQL/MariaDB
لطفا هر گونه موارد امنیتی دیگری که ما فراموش کردیم را با ما به اشتراک بگذارید.
همچنین توصیه میشود مطالعه کنید.
آموزش MySQL/MariaDB برای مبتدیان - بخش 1
این امنیت همچنین شامل تقویت بخشیدن موارد کلی امنیتی سرور لینوکس میباشد. از آنجایی که هکرها همیشه نقاط آسیب پذیر در هر بخشی از یک سیستم را اسکن میکنند و دیتابیس ها همیشه از گذشته تا به امروز نواحی کلیدی مقصد هکر ها هستند باید به امنیت دیتابیس توجه ویژه ای داشت. یک مثال بسیار رایج در حقیقت حملات brute-forcing برای دسترسی به پسورد root دیتابیس MySQL میباشد.
در این پست ما بهترین مثال ها برای اعمال امنیت مفید MySQL/MariaDB در سرورهای لینوکسی را شرح خواهیم داد.
1 - امن کردن سرور MySQL
این اولین مرحله توصیه شده بعد از نصب MySQL به منظور امنیت بخشیدن به سرور دیتابیس میباشد. این اسکریپت بهبود بخشیدن به امنیت سرور مای اسکیول شما را با سوال پرسیدن از شما را سرعت میدهد.
- تعریف یک پسورد برای اکانت root اگر در طول پروسه نصب آنرا تعریف نکرده باشید.
- غیر فعال کردن دسترسی remote به یوزر root مای اسکیول به واسطه حذف اکانت root ی که از خارج localhost قابل دسترسی میباشد.
- حذف اکانت های ناشناس (anonymous-user) و دیتابیس test که به صورت پیش فرض میتواند توسط همه یوزر ها حتی کاربران ناشناس قابل دسترسی باشد.
کد PHP:
# mysql_secure_installation
2 - Bind کردن سرور دیتابیس به آدرس Loopback
این تنظیمات دسترسی از ماشین های remote را محدود خواهد کرد، این تنظیمات به سرور MySQL میگوید که تنها ارتباطات از localhost را قبول کند. شما میتوانید آنرا در فایل اصلی تنظیمات تعریف کنید.
کد PHP:
# vi /etc/my.cnf [RHEL/CentOS]
# vi /etc/mysql/my.conf [Debian/Ubuntu]
OR
# vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
کد PHP:
bind-address = 127.0.0.1
3 - غیر فعال کردن LOCAL INFILE در MySQL
به عنوان بخش دیگری از امنیت شما نیاز دارید که local_infile را به منظور جلوگیری کردن از دسترسی به فایل سیستم اصلی با تغییر قسمت زیر بخش [mysqld] غیرفعال کنید.
کد PHP:
local-infile=0
4- تغییر Port پیش فرض MySQL
متغییر Port شماره پورت MySQL مورد استفاده برای listen کردن روی ارتباطات TCP/IP تعریف میکند. شماره پورت پیش فرض 3306 میباشد اما شما میتوانید شماره آنرا در بخش [mysqld] تغیر دهید.
کد PHP:
Port=5000
5 - فعال کردن Log ها در MySQL
log ها یکی از بهترین شیوه ها برای فهمیدن این است که چه اتفاقاتی روی یک سرور می افتد. و در مواقع attack میتوانید به سادگی هر گونه فعالیت مخربی را از روی فایل های لاگ متوجه شوید. شما میتوانید لاگ MySQL را با اضافه کردن متغییر زیر به بخش [mysqld] فعال کنید.
کد PHP:
log=/var/log/mysql.log
6 - تعریف Permission مناسب روی فایل های MySQL
مطمئن شوید که پرمیژن های مناسب را برای همه فایل ها و دایرکتوری های سرور MySQL تعریف کرده باشید. فایل /etc/my.conf باید تنها توسط root قابل write داشته باشد. که دسترسی کاربران دیگر را به منظور تغییر تنظیمات سرور دیتابیس block میکند.
کد PHP:
# chmod 644 /etc/my.cnf
7 - حذف کردن History شل MySQL
تمام دستوراتی که شما روی shell مای اسکیول توسط کلاینت MySQL اجرا کرده اید در یک فایل history به نام ~/.mysql_history ذخیره میشود. این فایل میتواند خطرناک باشد زیرا به ازای هر اکانتی که شما خواهید ساخت همه username و password ها روی shell تایپ میشوند و در فایل history ثبت میشود.
کد PHP:
# cat /dev/null > ~/.mysql_history
8 - دستورات MySQL را در Commandline اجرا نکنید
همانطور که میدانید تمام دستوراتی که در ترمینال تایپ میکنید در یک فایل history ذخیره میشوند، که بسته به شلی که از آن استفاده میکنید متفاوت است. (برای مثال برای شل bash فایل ~/.bash_history). یک هکر که به این فایل history دسترسی پیدا کند میتواند به آسانی هر پسورد ثبت شده ای را در آن مشاهده کند.
شدیدا توصیه نمیشود که پسوردها را در command line شبیه به زیر تایپ کنید.
کد PHP:
# mysql -u root -ppassword_
زمانیکه آخرین قسمت از فایل history دستور را چک میکنید، شما میتوانید پسوردی که در بالا تایپ کردید را مشاهده کنید.
کد PHP:
# history
بهترین راه برای وصل شدن به MySQL استفاده از دستور زیر میباشد.
کد PHP:
# mysql -u root -p
Enter password:
9 - تعریف کاربران مربوط به هر Aplication خاص روی Database
برای هر اپلیکیشن در حال اجرا روی سرور تنها برای user مربوط به آن اپلیکیشن دسترسی به دیتابیس مختص آن اپلیکیشن را فراهم کنید. به طور مثال اگر شما یک سایت Wordpress دارید یک یوزر خاص برای دیتابیس سایت وردپرس تان همانند زیر ایجاد کنید.
کد PHP:
# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
10 - از Plugin و Librarie های امنیتی استفاده کنید
MySQL شامل تعدادی پلاگین های امنیتی به منظور : احراز هویت (authenticating) کاربرانی که به سرور متصل میشوند، اعتبار سنجی پسورد (password-validation) و امن کردن storage برای اطلاعات حساس میباشد که همه اینها در ورژن رایگان موجود هستند.
برای کسب اطلاعات بیشتر به لینک زیر مراجعه فرمایید.
https://dev.mysql.com/doc/refman/5.7...y-plugins.html
11 - تغییر مرتب Password های MySQL
این مورد یکی از توصیه های امنیتی information/application/system این میباشد، که با توجه به سیاست امنیتی داخلی شما، هر چند یکبار پسورد را تغییر دهید. به هر حال این کار میتواند از snooper هایی که ممکن است فعالیت های شما را در طول یک مدت زمان طولانی ردیابی کنند و همچنین دستیابی به سرور mysql شما جلوگیری کنند.
کد PHP:
MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
12 - Update مرتب پکیج سرور MySQL
شدیدا توصیه میشود پکیج های MySQL/MariaDB را مرتبا به منظور به روز نگه داشتن سرور با آپدیت های امنیتی و رفع باگ ها، از ریپازیتوری های مرجع upgrade کنید. عموما پکیج های پیش فرض موجود در ریپازیتوری های سیستم عامل منقضی میشوند.
کد PHP:
# yum update
# apt update
کد PHP:
# systemctl restart mariadb #RHEL/CentOS
# systemctl restart mysql #Debian/Ubuntu
همچنین توصیه میشود مطالعه کنید.
15 مورد مفید برای بالا بردن کارایی و بهبود عملکرد MySQL/MariaDB
لطفا هر گونه موارد امنیتی دیگری که ما فراموش کردیم را با ما به اشتراک بگذارید.