12 ການປະຕິບັດທີ່ດີທີ່ສຸດເພື່ອຄວາມປອດໄພຂອງ MySQL/MariaDB ສຳ ລັບ Linux


MySQL ແມ່ນລະບົບຖານຂໍ້ມູນເປີດທີ່ນິຍົມທີ່ສຸດໃນໂລກແລະ MariaDB (ຄວາມຍາວຂອງສ້ອມຂອງ MySQL) ແມ່ນລະບົບຖານຂໍ້ມູນແຫຼ່ງເປີດທີ່ເຕີບໃຫຍ່ໄວທີ່ສຸດໃນໂລກ. ຫຼັງຈາກການຕິດຕັ້ງ MySQL server, ມັນບໍ່ປອດໄພໃນການຕັ້ງຄ່າທີ່ ກຳ ນົດໄວ້ໃນຕອນຕົ້ນ, ແລະການຮັບປະກັນມັນແມ່ນວຽກ ໜຶ່ງ ທີ່ ສຳ ຄັນໃນການຄຸ້ມຄອງຖານຂໍ້ມູນທົ່ວໄປ.

ສິ່ງນີ້ຈະປະກອບສ່ວນເຂົ້າໃນການເຮັດໃຫ້ຄວາມປອດໄພຂອງເຊີຟເວີ Linux ໂດຍລວມ, ເພາະວ່າຜູ້ໂຈມຕີຈະສະແກນຄວາມອ່ອນແອຢູ່ໃນພາກສ່ວນໃດ ໜຶ່ງ ຂອງລະບົບ, ແລະຖານຂໍ້ມູນທີ່ຜ່ານມາແມ່ນພື້ນທີ່ເປົ້າ ໝາຍ ທີ່ ສຳ ຄັນ. ຕົວຢ່າງທົ່ວໄປແມ່ນການບັງຄັບໃຊ້ລະຫັດຜ່ານຮາກ ສຳ ລັບຖານຂໍ້ມູນ MySQL.

ໃນຄູ່ມືນີ້, ພວກເຮົາຈະອະທິບາຍການປະຕິບັດຄວາມປອດໄພທີ່ດີທີ່ສຸດ ສຳ ລັບ MySQL/MariaDB ສຳ ລັບ Linux.

1. ການຕິດຕັ້ງ MySQL ທີ່ປອດໄພ

ນີ້ແມ່ນບາດກ້າວ ທຳ ອິດທີ່ແນະ ນຳ ຫລັງຈາກຕິດຕັ້ງ MySQL server, ເພື່ອຮັບປະກັນໃຫ້ server server ຖານຂໍ້ມູນ. ບົດຂຽນນີ້ຊ່ວຍໃນການປັບປຸງຄວາມປອດໄພຂອງເຊີຟເວີ MySQL ຂອງທ່ານໂດຍການຖາມທ່ານ:

  • ຕັ້ງລະຫັດຜ່ານ ສຳ ລັບບັນຊີຮາກ, ຖ້າທ່ານບໍ່ໄດ້ຕັ້ງຄ່າໃນລະຫວ່າງການຕິດຕັ້ງ.
  • ປິດການເຂົ້າສູ່ລະບົບຜູ້ໃຊ້ root ຫ່າງໄກສອກຫຼີກໂດຍການລຶບບັນຊີຮາກທີ່ສາມາດເຂົ້າເຖິງໄດ້ຈາກພາຍນອກຂອງໂຮດໃນທ້ອງຖິ່ນ.
  • ລຶບບັນຊີຜູ້ໃຊ້ແບບບໍ່ລະບຸຊື່ແລະທົດສອບຖານຂໍ້ມູນເຊິ່ງໃນຕອນຕົ້ນສາມາດເຂົ້າເຖິງໄດ້ໂດຍຜູ້ໃຊ້ທຸກຄົນ, ແມ່ນແຕ່ຜູ້ໃຊ້ທີ່ບໍ່ລະບຸຊື່.

# mysql_secure_installation

ຫລັງຈາກແລ່ນມັນ, ຕັ້ງລະຫັດລັບຮາກແລະຕອບຊຸດຂອງ ຄຳ ຖາມໂດຍເຂົ້າ [Yes/Y] ແລະກົດ [Enter].

2. ຜູກມັດ Server ຖານຂໍ້ມູນໄປທີ່ Loopback Address

ການຕັ້ງຄ່ານີ້ຈະ ຈຳ ກັດການເຂົ້າເຖິງຈາກເຄື່ອງຫ່າງໄກສອກຫຼີກ, ມັນບອກເຄື່ອງແມ່ຂ່າຍ MySQL ໃຫ້ຍອມຮັບການເຊື່ອມຕໍ່ຈາກພາຍໃນ localhost ເທົ່ານັ້ນ. ທ່ານສາມາດຕັ້ງມັນໄວ້ໃນເອກະສານການຕັ້ງຄ່າຕົ້ນຕໍ.

# 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. ປິດການ ນຳ ໃຊ້ຂໍ້ມູນທ້ອງຖິ່ນໃນ MySQL

ໃນສ່ວນ ໜຶ່ງ ຂອງການຮັກສາຄວາມປອດໄພ, ທ່ານ ຈຳ ເປັນຕ້ອງປິດການໃຊ້ງານ local_infile ເພື່ອປ້ອງກັນການເຂົ້າເຖິງລະບົບແຟ້ມຂໍ້ມູນທີ່ມາຈາກພາຍໃນ MySQL ໂດຍ ນຳ ໃຊ້ ຄຳ ແນະ ນຳ ຕໍ່ໄປນີ້ພາຍໃຕ້ພາກສ່ວນ [mysqld] .

local-infile=0

4. ປ່ຽນ Port MYSQL Default

ຕົວແປ Port ກຳ ນົດ ໝາຍ ເລກພອດ MySQL ເຊິ່ງຈະຖືກ ນຳ ໃຊ້ເພື່ອຟັງໃນການເຊື່ອມຕໍ່ TCP/IP. ໝາຍ ເລກພອດເລີ່ມຕົ້ນແມ່ນ 3306 ແຕ່ທ່ານສາມາດປ່ຽນມັນໄດ້ພາຍໃຕ້ສ່ວນ [mysqld] ຕາມທີ່ສະແດງ.

Port=5000

5. ເປີດໃຊ້ MySQL Logging

ບັນທຶກແມ່ນ ໜຶ່ງ ໃນວິທີທີ່ດີທີ່ສຸດທີ່ຈະເຂົ້າໃຈສິ່ງທີ່ເກີດຂື້ນໃນເຊີຟເວີ, ໃນກໍລະນີທີ່ມີການໂຈມຕີ, ທ່ານສາມາດເຫັນກິດຈະ ກຳ ທີ່ກ່ຽວຂ້ອງກັບການບຸກລຸກໃດໆຈາກໄຟລ໌ບັນທຶກ. ທ່ານສາມາດເປີດໃຊ້ການເຂົ້າສູ່ລະບົບ MySQL ໂດຍການເພີ່ມຕົວແປຕໍ່ໄປນີ້ພາຍໃຕ້ສ່ວນ [mysqld] .

log=/var/log/mysql.log

6. ກຳ ນົດການອະນຸຍາດທີ່ ເໝາະ ສົມໃນແຟ້ມ MySQL

ຮັບປະກັນວ່າທ່ານມີສິດອະນຸຍາດທີ່ ເໝາະ ສົມ ສຳ ລັບທຸກເອກະສານຂອງ server ແລະ mysql. ເອກະສານ /etc/my.conf ຄວນຂຽນເພື່ອຮາກເທົ່ານັ້ນ. ນີ້ຂັດຂວາງຜູ້ໃຊ້ອື່ນໆຈາກການປ່ຽນແປງການຕັ້ງຄ່າຂອງຖານຂໍ້ມູນເຊີຟເວີ.

# chmod 644 /etc/my.cnf

7. ລຶບ MySQL Shell History

ທຸກ ຄຳ ສັ່ງທີ່ທ່ານປະຕິບັດໃນແກະ MySQL ຖືກເກັບຮັກສາໄວ້ໂດຍລູກຄ້າ mysql ໃນເອກະສານປະຫວັດສາດ: ~/.mysql_history. ນີ້ອາດຈະເປັນອັນຕະລາຍ, ເພາະວ່າ ສຳ ລັບບັນຊີຜູ້ໃຊ້ໃດໆທີ່ທ່ານຈະສ້າງ, ຊື່ຜູ້ໃຊ້ແລະລະຫັດຜ່ານທັງ ໝົດ ທີ່ພິມໃສ່ຫອຍຈະຖືກບັນທຶກໄວ້ໃນເອກະສານປະຫວັດສາດ.

# cat /dev/null > ~/.mysql_history

8. ຢ່າເຮັດ MySQL Commands ຈາກ Commandline

ດັ່ງທີ່ທ່ານຮູ້ແລ້ວ, ທຸກ ຄຳ ສັ່ງທີ່ທ່ານພິມໃສ່ຢູ່ປາຍຍອດແມ່ນເກັບໄວ້ໃນເອກະສານປະຫວັດສາດ, ຂື້ນກັບຫອຍທີ່ທ່ານ ກຳ ລັງໃຊ້ (ຕົວຢ່າງ ~/.bash_history ສຳ ລັບ bash). ຜູ້ໂຈມຕີຜູ້ທີ່ຄຸ້ມຄອງເພື່ອເຂົ້າເຖິງເອກະສານປະຫວັດສາດນີ້ສາມາດເບິ່ງລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ໄດ້ງ່າຍ.

ມັນບໍ່ໄດ້ຖືກແນະ ນຳ ໃຫ້ພິມລະຫັດຜ່ານໃສ່ສາຍ ຄຳ ສັ່ງ, ມີບາງຢ່າງເຊັ່ນນີ້:

# mysql -u root -ppassword_

ເມື່ອທ່ານກວດເບິ່ງພາກສຸດທ້າຍຂອງເອກະສານປະຫວັດສາດ ຄຳ ສັ່ງ, ທ່ານຈະເຫັນລະຫັດຜ່ານທີ່ພິມຢູ່ຂ້າງເທິງ.

# history 

ວິທີທີ່ ເໝາະ ສົມໃນການເຊື່ອມຕໍ່ MySQL ແມ່ນ.

# mysql -u root -p
Enter password:

9. ກຳ ນົດຜູ້ ນຳ ໃຊ້ຖານຂໍ້ມູນສະເພາະ

ສຳ ລັບແຕ່ລະໂປແກຼມທີ່ເຮັດວຽກຢູ່ໃນ server, ໃຫ້ການເຂົ້າເຖິງຜູ້ໃຊ້ທີ່ຮັບຜິດຊອບຖານຂໍ້ມູນ ສຳ ລັບໂປແກຼມທີ່ໃຫ້. ຕົວຢ່າງ: ຖ້າທ່ານມີເວັບໄຊທ໌ wordpress, ສ້າງຜູ້ໃຊ້ສະເພາະ ສຳ ລັບຖານຂໍ້ມູນເວັບໄຊທ໌ wordpress ດັ່ງຕໍ່ໄປນີ້.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email %!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

ແລະຈື່ ຈຳ ທີ່ຈະລຶບບັນຊີຜູ້ໃຊ້ສະ ເໝີ ທີ່ບໍ່ມີການຈັດການກັບຖານຂໍ້ມູນ application ໃນ server.

10. ໃຊ້ Plugins ຄວາມປອດໄພແລະຫ້ອງສະ ໝຸດ ເພີ່ມເຕີມ

MySQL ປະກອບມີໂປແກຼມປອດໄພ ຈຳ ນວນ ໜຶ່ງ ສຳ ລັບ: ຄວາມພະຍາຍາມກວດສອບຄວາມຖືກຕ້ອງຂອງລູກຄ້າເພື່ອເຊື່ອມຕໍ່ກັບ server ຂອງ mysql, ການກວດສອບລະຫັດຜ່ານແລະການເກັບຮັກສາຄວາມປອດໄພໃນການເກັບຂໍ້ມູນ ສຳ ລັບຂໍ້ມູນທີ່ມີຄວາມລະອຽດ, ເຊິ່ງມັນມີຢູ່ທັງ ໝົດ ລຸ້ນຟຣີ.

ທ່ານສາມາດຊອກຫາເພີ່ມເຕີມໄດ້ທີ່ນີ້: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. ປ່ຽນລະຫັດຜ່ານ MySQL ເປັນປະ ຈຳ

ນີ້ແມ່ນ ຄຳ ແນະ ນຳ ກ່ຽວກັບຄວາມປອດໄພຂອງຂໍ້ມູນ/application/ລະບົບ. ເລື້ອຍປານໃດທີ່ທ່ານເຮັດແບບນີ້ແມ່ນຂື້ນກັບນະໂຍບາຍຄວາມປອດໄພພາຍໃນຂອງທ່ານ. ເຖິງຢ່າງໃດກໍ່ຕາມ, ມັນສາມາດປ້ອງກັນ "snoopers" ຜູ້ທີ່ອາດຈະຕິດຕາມກິດຈະ ກຳ ຂອງທ່ານໃນໄລຍະເວລາດົນນານ, ຈາກການເຂົ້າເຖິງເຄື່ອງແມ່ຂ່າຍ 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 Server ເປັນປະ ຈຳ

ຂໍແນະ ນຳ ໃຫ້ຍົກລະດັບຊຸດ mysql/mariadb ເປັນປົກກະຕິເພື່ອຮັກສາຄວາມປອດໄພແລະການແກ້ໄຂຂໍ້ຜິດພາດຕ່າງໆ, ຈາກບ່ອນເກັບມ້ຽນຂອງຜູ້ຂາຍ. ໂດຍປົກກະຕິການຫຸ້ມຫໍ່ໃນຫໍສະມຸດຂອງລະບົບປະຕິບັດການແບບເກົ່າແມ່ນລ້າສະໄຫມ.

# yum update
# apt update

ຫຼັງຈາກເຮັດການປ່ຽນແປງໃດໆໃນ server ຂອງ mysql/mariadb, ໃຫ້ບໍລິການຄືນ ໃໝ່ ສະ ເໝີ.

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

ຫມົດເທົ່ານີ້! ພວກເຮົາຮັກທີ່ຈະໄດ້ຍິນຈາກທ່ານຜ່ານແບບຟອມ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້. ຢ່າແບ່ງປັນກັບພວກເຮົາກ່ຽວກັບ ຄຳ ແນະ ນຳ ດ້ານຄວາມປອດໄພຂອງ MySQL/MariaDB ທີ່ຂາດຢູ່ໃນບັນຊີຂ້າງເທິງ.