มีวิธีใดในยูนิกซ์ที่จะค้นหาว่าใครเข้าใช้ไฟล์บางไฟล์ในช่วง 1 สัปดาห์ที่ผ่านมา? อาจเป็นผู้ใช้หรือบางสคริปต์ ftp ไปยังที่อื่น ฉันจะได้รับรายชื่อผู้ใช้ที่เข้าถึงไฟล์บางไฟล์ได้หรือไม่? ฉันจะรู้ได้อย่างไรว่าใครกำลังเข้าถึงไฟล์บางไฟล์
มีวิธีใดในยูนิกซ์ที่จะค้นหาว่าใครเข้าใช้ไฟล์บางไฟล์ในช่วง 1 สัปดาห์ที่ผ่านมา? อาจเป็นผู้ใช้หรือบางสคริปต์ ftp ไปยังที่อื่น ฉันจะได้รับรายชื่อผู้ใช้ที่เข้าถึงไฟล์บางไฟล์ได้หรือไม่? ฉันจะรู้ได้อย่างไรว่าใครกำลังเข้าถึงไฟล์บางไฟล์
คำตอบ:
นอกจากว่าคุณจะมีนโยบายการบันทึกที่ผิดปกติอย่างยิ่งผู้เข้าใช้งานไฟล์ใดที่ไม่ได้บันทึกไว้ (ซึ่งจะเป็นข้อมูลจำนวนมาก) คุณสามารถค้นหาผู้ที่เข้าสู่ระบบในเวลาใดในบันทึกของระบบ last
คำสั่งช่วยให้คุณมีประวัติเข้าสู่ระบบและบันทึกอื่น ๆ เช่น/var/log/auth.log
จะบอกคุณว่าผู้ใช้สิทธิ์และจากการที่พวกเขาได้เข้าสู่ระบบ (ซึ่งสถานีหรือที่โฮสต์ถ้าระยะไกล)
วันที่แฟ้มถูกอ่านสุดท้ายคือที่เรียกว่าเวลาในการเข้าถึงหรือ atime สำหรับระยะสั้น ระบบไฟล์ unix ทั้งหมดสามารถจัดเก็บได้ แต่หลาย ๆ ระบบไม่บันทึกเพราะมีประสิทธิภาพ (มักจะเล็ก) ls -ltu /path/to/file
หรือstat /path/to/file
แสดงเวลาเข้าถึงของไฟล์
หากผู้ใช้เข้าถึงไฟล์และไม่ได้พยายามซ่อนแทร็คประวัติเชลล์ของเขา (เช่น~/.bash_history
) อาจมีเงื่อนงำ
หากต้องการทราบว่าเปิดไฟล์ใดหรือใครใช้lsof /path/to/file
อยู่
หากต้องการบันทึกสิ่งที่เกิดขึ้นกับไฟล์ในอนาคตมีสองสามวิธี:
ใช้inotifywait inotifywait -e access /path/to
จะพิมพ์บรรทัดเมื่อมีคนอ่าน/path/to/ ACCESS file
file
อินเทอร์เฟซนี้จะไม่บอกคุณว่าใครเข้าใช้ไฟล์บ้าง คุณสามารถโทรได้lsof /path/to/file
ทันทีที่บรรทัดนี้ปรากฎ แต่มีสภาพการแข่งขัน (การเข้าถึงอาจจบลงเมื่อเวลาผ่านไป)
LoggedFSเป็นระบบไฟล์แบบเรียงซ้อนได้ที่ให้มุมมองของแผนผังระบบไฟล์และสามารถทำการบันทึกที่ยอดเยี่ยมกว่าในการเข้าถึงทั้งหมดผ่านมุมมองนั้น การกำหนดค่าให้ดูLoggedFS ไวยากรณ์แฟ้มการกำหนดค่า
คุณสามารถใช้ระบบย่อยการตรวจสอบของ Linux เพื่อบันทึกสิ่งต่าง ๆ จำนวนมากรวมถึงการเข้าถึงระบบไฟล์ ตรวจสอบให้แน่ใจภูตจะเริ่มต้นจากนั้นกำหนดสิ่งที่คุณต้องการเข้าสู่ระบบด้วยauditd
auditctl
การดำเนินการที่บันทึกไว้แต่ละครั้งจะถูกบันทึกเป็น/var/log/audit/audit.log
(ในการแจกแจงทั่วไป) วิธีเริ่มดูไฟล์โดยเฉพาะ:
auditctl -w /path/to/file
หากคุณวางการเฝ้าดูในไดเรกทอรีไฟล์ในนั้นและไดเรกทอรีย่อยจะถูกเรียกซ้ำด้วยเช่นกัน
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
ตัวอย่างข้างต้นด้วย inotifywait ควรเป็นหนึ่งใน (ดูหน้าคนสำหรับข้อมูลเพิ่มเติม):
inotifywait /path/to/file
inotifywait -e open /pat/to/file
หรือด้วยโหมดการตรวจสอบและการประทับเวลา:
inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'
คำตอบก่อนหน้าไม่ใช่วิธีปฏิบัติที่ดีที่สุดสำหรับการทำสิ่งที่คุณถาม Linux มี API สำหรับสิ่งนี้ inotify
API http://linux.die.net/man/7/inotify
inotify
API โดยตรงinotify
inotify
เฉพาะ Linux) และคุณกำลังใช้งาน Java JNotify สามารถทำงานได้บนทุกแพลตฟอร์ม (Linux, Mac, Windows) โดยสรุป API พื้นฐานของระบบปฏิบัติการauditd
(อย่างไรก็ตามแม้จะไม่ได้ช่วยให้ทราบว่าใครเป็นผู้เข้าถึงไฟล์เมื่อสัปดาห์ที่แล้วเว้นแต่คุณได้auditd
ทำงานมาแล้วเมื่อสัปดาห์ที่แล้ว
โดยทั่วไปไม่เป็นไปได้ ฉันเคยเห็นระบบไฟล์ที่มีการตรวจสอบเพียงพอที่จะทำให้เป็นไปได้ในทางเดียวหรืออื่น ๆ แต่มันไม่ใช่สิ่ง Unix ทั่วไปไม่ใช่