CH-J Server Managerการจัดการเซิร์ฟเวอร์ผ่าน SSH
เมนู
คู่มือและบทความทั้งหมด →

ไฟล์ระยะไกลเปลี่ยนระหว่างที่คุณแก้ไข: วิธีหลีกเลี่ยงการเขียนทับ

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

ปัญหาเกิดขึ้นได้อย่างไร

คุณเปิดไฟล์ และระหว่างที่แก้ไขสำเนาของตนเอง มีสิ่งอื่นเขียนลงต้นฉบับ เช่น ผู้ดูแลระบบคนอื่น การทำงานของระบบจัดการการตั้งค่า การอัปเกรดแพ็กเกจ หรือตัวแอปพลิเคชันเอง หากคุณบันทึกในตอนนั้น การเปลี่ยนแปลงของอีกฝ่ายจะหายไปโดยไม่มีข้อผิดพลาดแจ้งเตือน การแก้ไขในเครื่องแล้วอัปโหลดผ่าน SFTP มีความเสี่ยงเป็นพิเศษ เพราะช่วงเวลาระหว่างการอ่านกับการเขียนยาว และการอัปโหลดตามปกติไม่ได้เปรียบเทียบสิ่งใดเลย

บันทึกสถานะก่อนเริ่ม

จดค่า checksum และเวลาที่เปลี่ยนแปลงล่าสุดเมื่อดาวน์โหลดไฟล์ ตรวจทั้งสองค่าอีกครั้งทันทีก่อนอัปโหลด ค่า checksum ที่ต่างไปหมายความว่าไฟล์เปลี่ยนแล้ว และคุณไม่ควรเขียนทับโดยไม่ตรวจดูเสียก่อน

sha256sum /etc/example.conf
stat -c '%y %U %G %a' /etc/example.conf

เปรียบเทียบและรวมการเปลี่ยนแปลง

เก็บสำเนาที่คุณแก้ไขด้วยชื่อใหม่ ดึงเวอร์ชันปัจจุบันมา แล้วเปรียบเทียบกับเวอร์ชันที่ใช้เริ่มต้นและเวอร์ชันของคุณ จากนั้นนำการเปลี่ยนแปลงของคุณไปใช้กับเวอร์ชันปัจจุบันแทนการเขียนทับ คำสั่ง diff3 สามารถแสดงทั้งสามเวอร์ชันร่วมกันได้

diff -u example.conf.orig example.conf.current
diff -u example.conf.orig example.conf.mine
diff3 example.conf.mine example.conf.orig example.conf.current

หาว่าอะไรเป็นตัวเปลี่ยนไฟล์

หากไฟล์เปลี่ยนอยู่เรื่อย ๆ ให้หาต้นเหตุก่อนแก้ไขอีกครั้ง ตรวจว่าใครเปิดไฟล์อยู่ และดู journal กับประวัติแพ็กเกจ หากไฟล์อยู่ภายใต้การควบคุมของระบบจัดการการตั้งค่า ให้แก้เทมเพลตในระบบนั้น มิฉะนั้นการทำงานรอบถัดไปจะเขียนทับสิ่งที่คุณแก้ไข

sudo lsof /etc/example.conf
sudo journalctl --since "1 hour ago" --no-pager | grep example.conf
grep example.conf /var/log/dpkg.log

คำเตือนไม่ใช่การล็อก

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

การป้องกันขณะบันทึกใน CH-J Server Manager

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

เอกสารโดยละเอียด

man: stat →

man: diff →

การปลดล็อกด้วยไบโอเมตริกและความปลอดภัย →