ค้นหาเว็บไซต์

12 แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย MySQL/MariaDB สำหรับ Linux


MySQL คือระบบฐานข้อมูลโอเพ่นซอร์สที่ได้รับความนิยมมากที่สุดในโลก และ MariaDB (ทางแยกของ MySQL) คือระบบฐานข้อมูลโอเพ่นซอร์สที่เติบโตเร็วที่สุดในโลก หลังจากติดตั้งเซิร์ฟเวอร์ MySQL การกำหนดค่าเริ่มต้นจะไม่ปลอดภัย และการรักษาความปลอดภัยเป็นหนึ่งในงานสำคัญในการจัดการฐานข้อมูลทั่วไป

อ่านเพิ่มเติม: เรียนรู้ MySQL/MariaDB สำหรับผู้เริ่มต้น – ตอนที่ 1

สิ่งนี้จะช่วยเพิ่มความแข็งแกร่งและเพิ่มความปลอดภัยเซิร์ฟเวอร์ Linux โดยรวม เนื่องจากผู้โจมตีมักจะสแกนช่องโหว่ในส่วนใดส่วนหนึ่งของระบบ และฐานข้อมูลเคยเป็นพื้นที่เป้าหมายหลักในอดีต ตัวอย่างทั่วไปคือการบังคับรหัสผ่านรูทอย่างดุร้ายสำหรับฐานข้อมูล MySQL

ในคู่มือนี้ เราจะอธิบายแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย MySQL/MariaDB ที่เป็นประโยชน์สำหรับ Linux

1. การติดตั้ง MySQL ที่ปลอดภัย

นี่เป็นขั้นตอนแรกที่แนะนำหลังจากติดตั้งเซิร์ฟเวอร์ MySQL เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์ฐานข้อมูล สคริปต์นี้อำนวยความสะดวกในการปรับปรุงความปลอดภัยของเซิร์ฟเวอร์ MySQL ของคุณโดยขอให้คุณ:

  • ตั้งรหัสผ่านสำหรับบัญชีรูท หากคุณไม่ได้ตั้งไว้ระหว่างการติดตั้ง
  • ปิดใช้งานการเข้าสู่ระบบของผู้ใช้รูทระยะไกลโดยการลบบัญชีรูทที่สามารถเข้าถึงได้จากภายนอกโฮสต์ในเครื่อง
  • ลบบัญชีผู้ใช้ที่ไม่ระบุชื่อและฐานข้อมูลทดสอบซึ่งโดยค่าเริ่มต้นผู้ใช้ทุกคนสามารถเข้าถึงได้ แม้แต่ผู้ใช้ที่ไม่ระบุชื่อ
mysql_secure_installation

หลังจากรันแล้ว ให้ตั้งรหัสผ่านรูทและตอบคำถามหลายชุดโดยป้อน [ใช่/ใช่] แล้วกด [Enter]

2. ผูกเซิร์ฟเวอร์ฐานข้อมูลเข้ากับที่อยู่ลูปแบ็ค

การกำหนดค่านี้จะจำกัดการเข้าถึงจากเครื่องระยะไกล โดยจะแจ้งให้เซิร์ฟเวอร์ MySQL ยอมรับเฉพาะการเชื่อมต่อจากภายในโลคัลโฮสต์เท่านั้น คุณสามารถตั้งค่าได้ในไฟล์กำหนดค่าหลัก

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]

bind-address = 127.0.0.1

3. ปิดการใช้งาน INFILE ท้องถิ่นใน MySQL

ในส่วนหนึ่งของการเพิ่มความปลอดภัย คุณต้องปิดการใช้งาน local_infile เพื่อป้องกันการเข้าถึงระบบไฟล์พื้นฐานจากภายใน MySQL โดยใช้คำสั่งต่อไปนี้ภายใต้ส่วน [mysqld]

local-infile=0

4. เปลี่ยนพอร์ตเริ่มต้นของ MySQL

ตัวแปร พอร์ต จะตั้งค่าหมายเลขพอร์ต MySQL ที่จะใช้เพื่อฟังการเชื่อมต่อ TCP/ IP หมายเลขพอร์ตเริ่มต้นคือ 3306 แต่คุณสามารถเปลี่ยนได้ในส่วน [mysqld] ตามที่แสดง

Port=5000

5. เปิดใช้งานการบันทึก MySQL

บันทึกเป็นวิธีที่ดีที่สุดวิธีหนึ่งในการทำความเข้าใจสิ่งที่เกิดขึ้นบนเซิร์ฟเวอร์ ในกรณีที่มีการโจมตี คุณสามารถดูกิจกรรมที่เกี่ยวข้องกับการบุกรุกจากไฟล์บันทึกได้อย่างง่ายดาย คุณสามารถเปิดใช้งานการบันทึก MySQL ได้โดยการเพิ่มตัวแปรต่อไปนี้ภายใต้ส่วน [mysqld]

log=/var/log/mysql.log

6. ตั้งค่าการอนุญาตที่เหมาะสมในไฟล์ MySQL

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าสิทธิ์ที่เหมาะสมสำหรับไฟล์เซิร์ฟเวอร์ mysql และไดเร็กทอรีข้อมูลทั้งหมด ไฟล์ /etc/my.conf ควรเขียนได้เฉพาะที่รูทเท่านั้น ซึ่งจะบล็อกผู้ใช้รายอื่นจากการเปลี่ยนแปลงการกำหนดค่าเซิร์ฟเวอร์ฐานข้อมูล

chmod 644 /etc/my.cnf

7. ลบประวัติเชลล์ MySQL

คำสั่งทั้งหมดที่คุณดำเนินการบนเชลล์ MySQL จะถูกจัดเก็บโดยไคลเอนต์ mysql ในไฟล์ประวัติ: ~/.mysql_history สิ่งนี้อาจเป็นอันตรายได้ เนื่องจากสำหรับบัญชีผู้ใช้ใดๆ ที่คุณจะสร้าง ชื่อผู้ใช้และรหัสผ่านทั้งหมดที่พิมพ์บนเชลล์จะถูกบันทึกไว้ในไฟล์ประวัติ

cat /dev/null > ~/.mysql_history

8. อย่าเรียกใช้คำสั่ง MySQL จาก Commandline

ดังที่คุณทราบแล้วว่า คำสั่งทั้งหมดที่คุณพิมพ์บนเทอร์มินัลจะถูกจัดเก็บไว้ในไฟล์ประวัติ ขึ้นอยู่กับเชลล์ที่คุณใช้ (เช่น ~/.bash_history สำหรับ bash) ผู้โจมตีที่จัดการเพื่อเข้าถึงไฟล์ประวัตินี้สามารถเห็นรหัสผ่านที่บันทึกไว้ได้อย่างง่ายดาย

ไม่แนะนำอย่างยิ่งให้พิมพ์รหัสผ่านบนบรรทัดคำสั่ง ในลักษณะนี้:

mysql -u root -ppassword_

เมื่อคุณตรวจสอบส่วนสุดท้ายของไฟล์ประวัติคำสั่ง คุณจะเห็นรหัสผ่านที่พิมพ์ไว้ด้านบน

history 

วิธีที่เหมาะสมในการเชื่อมต่อ MySQL คือ

mysql -u root -p
Enter password:

9. กำหนดผู้ใช้ฐานข้อมูลเฉพาะแอปพลิเคชัน

สำหรับแต่ละแอปพลิเคชันที่ทำงานบนเซิร์ฟเวอร์ ให้สิทธิ์การเข้าถึงแก่ผู้ใช้ที่รับผิดชอบฐานข้อมูลสำหรับแอปพลิเคชันที่กำหนดเท่านั้น ตัวอย่างเช่น หากคุณมีไซต์ WordPress ให้สร้างผู้ใช้เฉพาะสำหรับฐานข้อมูลไซต์ WordPress ดังนี้

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. ใช้ปลั๊กอินและไลบรารีความปลอดภัยเพิ่มเติม

MySQL มีปลั๊กอินความปลอดภัยจำนวนหนึ่งสำหรับ: การตรวจสอบสิทธิ์โดยไคลเอ็นต์ในการเชื่อมต่อกับเซิร์ฟเวอร์ mysql การตรวจสอบรหัสผ่าน และการรักษาความปลอดภัยที่เก็บข้อมูลสำหรับข้อมูลที่ละเอียดอ่อน ซึ่งทั้งหมดมีให้ใช้งานในเวอร์ชันฟรี

คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. เปลี่ยนรหัสผ่าน MySQL เป็นประจำ

นี่เป็นคำแนะนำด้านความปลอดภัยข้อมูล/แอปพลิเคชัน/ระบบทั่วไป ความถี่ที่คุณทำเช่นนี้จะขึ้นอยู่กับนโยบายความปลอดภัยภายในของคุณ อย่างไรก็ตาม มันสามารถป้องกัน “ผู้สอดแนม” ที่อาจติดตามกิจกรรมของคุณเป็นเวลานาน ไม่ให้เข้าถึงเซิร์ฟเวอร์ mysql ของคุณได้

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. อัปเดตแพ็คเกจเซิร์ฟเวอร์ MySQL เป็นประจำ

ขอแนะนำอย่างยิ่งให้อัปเกรดแพ็คเกจ mysql/mariadb เป็นประจำเพื่อติดตามการอัปเดตความปลอดภัยและการแก้ไขข้อบกพร่องจากพื้นที่เก็บข้อมูลของผู้จำหน่าย โดยปกติแพ็กเกจในที่เก็บระบบปฏิบัติการดีฟอลต์จะล้าสมัย

yum update
apt update

หลังจากทำการเปลี่ยนแปลงใด ๆ กับเซิร์ฟเวอร์ mysql/mariadb ให้รีสตาร์ทบริการทุกครั้ง

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

อ่านเพิ่มเติม: 15 เคล็ดลับการปรับแต่งและเพิ่มประสิทธิภาพ MySQL/MariaDB ที่มีประโยชน์

นั่นคือทั้งหมด! เราชอบที่จะได้ยินจากคุณผ่านแบบฟอร์มความคิดเห็นด้านล่าง แบ่งปันเคล็ดลับด้านความปลอดภัย MySQL/MariaDB ที่ขาดหายไปในรายการด้านบนกับเรา