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 ที่ขาดหายไปในรายการด้านบนกับเรา