ฉันต้องการวิ่ง
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
ในงาน cron ฉันจะทำอย่างปลอดภัยได้อย่างไร
ฉันรู้ว่าฉันสามารถใส่คำสั่งได้ที่นั่น แต่ใครก็ตามที่เข้าถึงเครื่องจะเห็นได้ทันทีผ่าน crontab มีวิธีที่ดีกว่าที่จะทำหรือไม่
ฉันต้องการวิ่ง
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
ในงาน cron ฉันจะทำอย่างปลอดภัยได้อย่างไร
ฉันรู้ว่าฉันสามารถใส่คำสั่งได้ที่นั่น แต่ใครก็ตามที่เข้าถึงเครื่องจะเห็นได้ทันทีผ่าน crontab มีวิธีที่ดีกว่าที่จะทำหรือไม่
คำตอบ:
ตามที่ระบุในman mysqldump
: ดู6.1.2.1 แนวทางสำหรับผู้ใช้เพื่อความปลอดภัยของรหัสผ่านในคู่มืออ้างอิง MySQL
ไฟล์ตัวเลือกเป็นการเดิมพันที่ปลอดภัยที่สุดไม่น้อยไปกว่าการอ้างอิงข้างต้น การให้ข้อความธรรมดาใน crontab นั้นไม่ดีไม่น้อยตั้งแต่บรรทัดคำสั่งกระบวนการโดยค่าเริ่มต้นสามารถมองเห็นได้โดยps
ผู้ใช้รายอื่น เช่นเดียวกับที่ใช้กับตัวแปรสภาพแวดล้อมตามที่อธิบายไว้ในการอ้างอิง
เก็บรหัสผ่านของคุณในไฟล์ตัวเลือก ตัวอย่างเช่นบน Unix คุณสามารถแสดงรายการรหัสผ่านของคุณใน
[client]
ส่วนของ.my.cnf
ไฟล์ในโฮมไดเร็กตอรี่ของคุณ:[client] password=your_pass
เพื่อให้รหัสผ่านปลอดภัยใคร ๆ ก็ควรไม่สามารถเข้าถึงไฟล์ได้ยกเว้นตัวคุณเอง เพื่อให้แน่ใจว่านี้ตั้งค่าโหมดการเข้าถึงไฟล์ไปยังหรือ
400
600
ตัวอย่างเช่น:shell> chmod 600 .my.cnf
หากต้องการตั้งชื่อจากบรรทัดคำสั่งไฟล์ตัวเลือกเฉพาะที่มีรหัสผ่านให้ใช้
--defaults-file=file_name
ตัวเลือกโดยที่file_name
ชื่อพา ธ แบบเต็มไปยังไฟล์ ตัวอย่างเช่น:shell> mysql --defaults-file=/home/francis/mysql-opts
ส่วน4.2.3.3,“ การใช้ไฟล์ตัวเลือก” , กล่าวถึงไฟล์ตัวเลือกโดยละเอียด
รัน cronjob ในฐานะผู้ใช้เฉพาะและใช้ตรรกะ Bash แบบง่าย ๆ เพื่อแยกรหัสผ่านจากไฟล์ข้อความธรรมดาที่เก็บไว้ที่ใดที่หนึ่งในระบบด้วยสิทธิ์ที่อนุญาตให้ผู้ใช้ (หรือกลุ่มอาจ) เข้าถึงเท่านั้น
PASS=`cat /path/to/pwdfile`
mysqldump -u aUser -p $PASS--all-databases > backup.sql
ดังนั้นหาก cronjob ทำงานเป็น 'ตัวอย่าง' ของผู้ใช้ความเป็นเจ้าของของไฟล์ควรเป็น "example: example" และได้รับอนุญาต 0400
นอกจากนี้คุณยังสามารถใช้ฟังก์ชันที่คล้ายกันโดยใช้. my.cnfระดับผู้ใช้
read PASS < /path/to/pwdfile
เป็นสิ่งที่สะอาดกว่าปกติในการทำสิ่งเดียวกัน (ฉันเดาว่าใช้ superuser.com/q/323060/49184 )
ARGMAX
มันใช้กระบวนการพิเศษแทนการใช้เชลล์ในตัวมันอาจล่อลวงโครงสร้างเช่นfor i in `cat file`; do ...
ปัญหาของตัวเองเป็นต้น แต่แน่นอนว่า กับสิ่งต่าง ๆ ส่วนใหญ่: ถ้าใครรู้ว่าเกิดอะไรขึ้นคนหนึ่งมีอิสระที่จะทำตามที่เลือก ฉันไม่ได้อยู่ในสงครามครูเสดที่นี่ไม่ว่ามันจะปรากฏได้อย่างไร :-D
ทุกคนที่มีสิทธิ์เข้าถึงเครื่องมีระดับการเข้าถึง/var/spool/cron/crontabs/
เหมือนกับที่/var/lib/mysql
คุณอนุญาตให้มี ดังนั้นตั้งค่าสิทธิ์ที่เหมาะสมในไดเรกทอรีและทำ ทุกคนที่มีสิทธิ์เข้าถึงรูทสามารถเข้าถึงไฟล์ฐานข้อมูลได้โดยตรง ใครก็ตามที่คุณไม่ไว้ใจให้เข้าถึงเครื่องควรไม่สามารถเข้าถึงเครื่องได้เลย
โดยปกติคนจะเห็นเพียง cronjobs crontab -l
ของตัวเองผ่านทาง
เพื่อวัตถุประสงค์ในการสำรองข้อมูลให้พิจารณามีผู้ใช้แบบอ่านอย่างเดียวใน mysql เช่นนั้น
CREATE USER bUser IDENTIFIED BY 'p4ss';
GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;
mysqldumpต้องการเพียงSELECT
และLOCK TABLES
สิทธิพิเศษในการทำงาน