วิธีแก้ไขปัญหาขั้นตอนการเขียนไฟล์


1

กระบวนการบางอย่างบนเซิร์ฟเวอร์ที่ใช้งานจริงของฉันซึ่งเป็นโครงการที่ฉันสืบทอดมาจากนักพัฒนาเว็บรายอื่นกำลังสร้างการสำรองข้อมูลรายวันของฐานข้อมูล mysql และไฟล์ไซต์ การสำรองข้อมูลถูกจัดเก็บไว้ที่/var/www/html/nightlybackup/และฉันต้องการย้ายไปยัง/var/www/backups/รวมถึงลบไดเรกทอรีที่ไม่มีอยู่แล้วและเพิ่มไดเรกทอรีใหม่

ฉันจะเริ่มเปิดเผยที่กระบวนการนี้ถูกกำหนดไว้อย่างไรเพื่อให้ฉันสามารถเปลี่ยนแปลงได้

ฉันใช้ Debian 8


1
นี่เป็นคำถามที่ดีสำหรับการแชทแต่ไม่ใช่ผู้สมัครที่ดีสำหรับคำถามและคำตอบเพราะมันมีขอบเขตที่กว้างมากและ "อาจเป็นอะไรก็ได้" ที่กล่าวว่าฉันจะโยนคำตอบทิ้ง: P
allquixotic

3
@ allquixotic Reformulated ในฐานะ "ฉันจะทราบได้อย่างไรว่ากระบวนการใดที่กำลังเขียนไฟล์เป็นระยะ" นี่เป็นคำถามที่ดี และอาจซ้ำกัน
Bob

คำตอบ:


3

"สิ่งที่ต้องลอง"

สุ่มตัวอย่าง / poking รอบ ๆ

  • โอกาสในการค้นหาผู้กระทำผิด: 50%
  • นี่คือสิ่งที่สมมติว่าคุณรู้ว่าคุณกำลังดูอะไรอยู่

ดูที่ตำแหน่งต่อไปนี้สำหรับคำสั่งที่ผิดปกติ / ไม่คาดคิด:

  • ~/bin ของผู้ใช้แบบโต้ตอบใด ๆ
  • ps -ef (เหมือนรูท) สำหรับทุกสิ่งที่คุณไม่รู้ว่ามันคืออะไร
  • crontab -eเพื่อแก้ไขไฟล์crontab(ตาราง cron) เพื่อตรวจสอบว่ามันถูกเรียกใช้เป็นงาน cron ทุก ๆ X นาที / ชั่วโมง / วัน
  • ~/.profileหรือ~/.bashrcของผู้ใช้ใด ๆ
  • /usr/local/bin สำหรับไฟล์ใด ๆ ที่ไม่ได้เป็นส่วนหนึ่งของแพ็คเกจที่จัดการ
  • /opt
  • อินสแตนซ์ของภาษาสคริปต์: bash, java, perl, python, ruby ​​และอื่น ๆ - ที่คุณยังไม่ได้เริ่มหรือมีPPID(parent PID) ที่psไม่นำต้นไม้ไปสู่กระบวนการที่คุณคุ้นเคยและรู้จัก ไม่ได้ทำมัน
  • ดูว่าพวกเขาตั้งชื่อไฟล์สคริปต์ / ไฟล์ที่เรียกใช้งานได้เช่นเดียวกับไดเรกทอรี: find / -iname \*nightly\*(อาจส่งคืนผลบวกปลอมจำนวนมากดังนั้นการเพิ่มอาจ| lessจะเป็นการระมัดระวัง)

มีวิธีอื่น ๆ อีกมากมายที่พวกเขาสามารถทำได้เช่นจากเซิร์ฟเวอร์แอปพลิเคชัน Java สคริปต์ Perl CGI ฯลฯ แต่สิ่งเหล่านี้เป็นการเริ่มต้น

Hackish Quick-n-Dirty วิธีการสำรวจความน่าเชื่อถือแบบกึ่ง

  • โอกาสในการค้นหาผู้กระทำผิด: 95%
  • ความยาก: ง่าย (เพียงแค่เรียกใช้สคริปต์นี้ฉันแฮ็คด้วยกันใน 5 นาที)

nohup lsof -r 2 +D /var/www/html/nightlybackup 2>&1 | gzip > nightlybackup-writers.txt.gz &

ในระยะสั้น:

  • nohup ป้องกันไม่ให้บรรทัดคำสั่งออกเมื่อคุณปิดเทอร์มินัลหรือเซสชัน SSH
  • lsof"แสดงรายการไฟล์ที่เปิด" และทำซ้ำในไดเรกทอรี ( +D) ซ้ำๆ เรื่อย ๆ ( -r) และรีเฟรชทุก 2 วินาที
  • gzip ผลลัพธ์ในกรณีที่คุณได้รับมากเพื่อป้องกันการกรอกดิสก์ของคุณอย่างรวดเร็ว
  • คุณสามารถดูผลลัพธ์ได้ด้วยzlessคำสั่ง

คำสั่งนี้อาจมีผลกระทบต่อประสิทธิภาพอย่างมีนัยสำคัญโดยเฉพาะอย่างยิ่งใน (1) เมล็ดเก่าหรือ (2) ระบบที่ใช้ HDD ดังนั้นให้เรียกใช้เป็นเวลาสั้น ๆ และพิจารณาว่าใช้ CPU / ดิสก์มากแค่ไหนและถ้ามันมากเกินไปให้ฆ่ากระบวนการ

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

สุดยอดสวิสกองทัพบก

  • โอกาสในการค้นหาผู้กระทำผิด: 99.999999%
  • ความยาก: สุดขีด (ต้องใช้ความรู้ระดับผู้พัฒนาระบบปฏิบัติการหรือได้รับโชคดีและคัดลอกสคริปต์ที่สร้างไว้ล่วงหน้าตามที่คุณต้องการ)

ทั้งDTraceและSystemTapเป็นเครื่องมือที่ดีที่สุดสำหรับการตรวจสอบระบบสำหรับรูปแบบเฉพาะของกิจกรรม DTrace นั้นดีกว่า arguably แต่หลายคนคิดว่ามันเป็นการโยนหรือ SystemTap นั้นดีกว่าเพราะมันเป็น "native" ของ Linux (DTrace ถูกเพิ่มเข้ามาในภายหลังหลังจากถูกออกแบบมาสำหรับ Solaris)

คุณสามารถสร้างคำสั่ง / สคริปต์ DTrace หรือ SystemTap เพื่อดักจับผู้ที่กำลังเขียนเส้นทางใด ๆ ในไดเรกทอรีนั้น นี่เป็นตัวอย่างที่ผิดพลาดบนเซิร์ฟเวอร์พร้อมกับการเชื่อมโยงที่มีประโยชน์ในการฆ่าของDTrace หนึ่งสมุทร จากนั้นเพียงแค่ให้มันทำงานในพื้นหลัง (เช่นผ่านscreenหรือnohup) และรอจนกว่าการสำรองข้อมูลตีและคุณจะได้รับชื่อกระบวนการและ PID

ถ้าคุณไม่มีรูทคิทและรูทคิทนั้นถูกออกแบบมาเพื่อปกปิดกิจกรรมของมันจาก DTrace / SystemTap และสมมติว่าคุณได้รับคำสั่ง DTrace หรือ SystemTap แล้วสิ่งนี้จะพบสิ่งที่กำลังทำอยู่ แต่มันก็เป็นวิธีที่ยากที่สุด


คุณลืมวิธีแก้ปัญหาสังคม ค้นหานักพัฒนาเว็บและโทรหาเขาเพื่อให้เขามีทักษะที่พิเศษมาก ซึ่งรวมถึงการซื้อเครื่องดื่มให้เขาด้วยถ้าเขาบอกคุณว่ากระบวนการนี้เป็นอย่างไร ...
Journeyman Geek

ง่ายกว่า DTrace / SystemTap เพียงแค่เปิดใช้งาน SELinux ในโหมดอนุญาตขณะที่ 'ปฏิเสธ' การเข้าถึงโฟลเดอร์นั้น ที่ควรบันทึกการพยายามเข้าถึง
Bob

ฉันจะเพิ่มว่าคุณต้องมองหาcrontab -eผู้ใช้ทั้งหมด ฉันมีหนึ่งซับสำหรับสิ่งนั้น แต่ตอนนี้ฉันอยู่ในโทรศัพท์ของฉันดังนั้นฉันจึงไม่สามารถพิมพ์ได้ /var/spool/cronทางลัดก็อาจจะดูมากเกินไปผ่าน
Moshe Katz

ใช่คุณแค่อัปเกรด "คำตอบทิ้ง" นี้ ขวา. มันน่ากลัวที่จะเห็นคนที่คุณคิดและทำงานอยู่ :-)
fixer1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.