اطلاعیه

Collapse
No announcement yet.

12 مورد مهم برای امنیت MySQL/MariaDB در لینوکس

Collapse
X
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
new posts

  • 12 مورد مهم برای امنیت MySQL/MariaDB در لینوکس

    MySQL معروف ترین سیستم open source دیتابیس در جهان است و MariaDB (که در حقیقت شاخه ای از MySQL است) سریع ترین دیتابیس open source جهان است که در حال گسترش میباشد. بعد از نصب سرور MySQL با کانفیگ های پیش فرضش، در حقیقت نا امن است و امنیت بخشیدن به سرور مای اسکیول یکی از حیاتی ترین تسک هایی است که در مدیریت کلی دیتابیس در نظر گرفت.


    همچنین توصیه میشود مطالعه کنید.

    آموزش MySQL/MariaDB برای مبتدیان - بخش 1


    این امنیت همچنین شامل تقویت بخشیدن موارد کلی امنیتی سرور لینوکس میباشد. از آنجایی که هکرها همیشه نقاط آسیب پذیر در هر بخشی از یک سیستم را اسکن میکنند و دیتابیس ها همیشه از گذشته تا به امروز نواحی کلیدی مقصد هکر ها هستند باید به امنیت دیتابیس توجه ویژه ای داشت. یک مثال بسیار رایج در حقیقت حملات brute-forcing برای دسترسی به پسورد root دیتابیس MySQL میباشد.

    در این پست ما بهترین مثال ها برای اعمال امنیت مفید MySQL/MariaDB در سرورهای لینوکسی را شرح خواهیم داد.


    1 - امن کردن سرور MySQL

    این اولین مرحله توصیه شده بعد از نصب MySQL به منظور امنیت بخشیدن به سرور دیتابیس میباشد. این اسکریپت بهبود بخشیدن به امنیت سرور مای اسکیول شما را با سوال پرسیدن از شما را سرعت میدهد.
    • تعریف یک پسورد برای اکانت root اگر در طول پروسه نصب آنرا تعریف نکرده باشید.
    • غیر فعال کردن دسترسی remote به یوزر root مای اسکیول به واسطه حذف اکانت root ی که از خارج localhost قابل دسترسی میباشد.
    • حذف اکانت های ناشناس (anonymous-user) و دیتابیس test که به صورت پیش فرض میتواند توسط همه یوزر ها حتی کاربران ناشناس قابل دسترسی باشد.
    کد PHP:
    # mysql_secure_installation 
    بعد از اجرا کردن آن پسورد root را تعریف کنید و به سوالات با وارد کردن Yes/Y و فشار دادن Enter پاسخ دهید.
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Secure-MySQL-Installation15.png
مشاهده: 1
حجم: 32.1 کیلو بایت





    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] 
    خط زیر را، در زیر قسمت [mysqld] اضافه کنید.
    کد PHP:
    bind-address 127.0.0.1 


    3 - غیر فعال کردن LOCAL INFILE در MySQL

    به عنوان بخش دیگری از امنیت شما نیاز دارید که local_infile را به منظور جلوگیری کردن از دسترسی به فایل سیستم اصلی با تغییر قسمت زیر بخش [mysqld] غیرفعال کنید.
    کد PHP:
    local-infile=


    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_ 
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Connect-MySQL-with-Password-16.png
مشاهده: 1
حجم: 14.5 کیلو بایت




    زمانیکه آخرین قسمت از فایل history دستور را چک میکنید، شما میتوانید پسوردی که در بالا تایپ کردید را مشاهده کنید.
    کد PHP:
    # history 
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Check-Command-History-17.png
مشاهده: 1
حجم: 4.3 کیلو بایت




    بهترین راه برای وصل شدن به 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 
    بعد از اعمال هرگونه تغییری در سرور MySQL/MariaDB همیشه سرویس را restart کنید.
    کد PHP:
    # systemctl restart mariadb        #RHEL/CentOS
    # systemctl restart mysql        #Debian/Ubuntu 

    همچنین توصیه میشود مطالعه کنید.

    15 مورد مفید برای بالا بردن کارایی و بهبود عملکرد MySQL/MariaDB (به زودی)


    لطفا هر گونه موارد امنیتی دیگری که ما فراموش کردیم را با ما به اشتراک بگذارید.
پردازش ...
X