เรียนรู้คำสั่ง Linux - wtmp

ชื่อ

utmp, wtmp - บันทึกการเข้าสู่ระบบ

สรุป

#include

ลักษณะ

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

คำเตือน: utmp ต้องไม่สามารถเขียนได้เนื่องจากโปรแกรมระบบจำนวนมาก (โง่เขลา) ขึ้นอยู่กับความสมบูรณ์ของไฟล์ คุณเสี่ยงต่อการปลอมแปลง logfiles ระบบและการปรับเปลี่ยนไฟล์ระบบถ้าคุณปล่อยให้ utmp เขียนได้สำหรับผู้ใช้รายใด

ไฟล์คือลำดับของรายการที่มีโครงสร้างต่อไปนี้ที่ประกาศในไฟล์รวม (โปรดทราบว่านี่เป็นเพียงหนึ่งในคำจำกัดความหลาย ๆ รอบโดยรายละเอียดขึ้นอยู่กับรุ่นของ libc):

#define UT_UNKNOWN 0 #define RUN_LVL 1 # กำหนด BOOT_TIME 2 # define NEW_TIME 3 #define OLD_TIME 4 # ระบุ INIT_PROCESS 5 # define LOGIN_PROCESS 6 # กำหนด USER_PROCESS 7 # กำหนด DEAD_PROCESS 8 #define ACCOUNTING 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {สั้น e_termination int; / * สถานะการสิ้นสุดของกระบวนการ * / int ระยะสั้น e_exit; / * สถานะการออกจากกระบวนการ * /}; struct utmp {short ut_type; / * ชนิดของการล็อกอิน * / pid_t ut_pid; / * pid ของกระบวนการเข้าสู่ระบบ / ut_line ถ่าน [UT_LINESIZE]; / * ชื่ออุปกรณ์ของ tty - "/ dev /" * / ut_id ถ่าน [4]; / * init id หรือ abbrev ttyname * / char ut_user [UT_NAMESIZE]; / * ชื่อผู้ใช้ * / char ut_host [UT_HOSTSIZE]; / * ชื่อโฮสต์สำหรับการล็อกอินจากระยะไกล * / struct exit_status ut_exit; / * สถานะการออกจากกระบวนการที่ทำเครื่องหมายว่า DEAD_PROCESS * / ยาว ut_session; / * ID เซสชันที่ใช้สำหรับหน้าต่าง * / struct timeval ut_tv; / * มีการป้อนข้อมูลเวลา * / int32_t ut_addr_v6 [4]; / * ที่อยู่ IP ของโฮสต์ระยะไกล * / ถ่านแผ่น [20]; / * สงวนไว้สำหรับใช้ในอนาคต * /}; / * hacks ความเข้ากันได้ย้อนหลัง * / # กำหนด ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6 [0]

โครงสร้างนี้ให้ชื่อของไฟล์พิเศษที่เชื่อมโยงกับเทอร์มินัลของผู้ใช้ชื่อล็อกอินของผู้ใช้และเวลาของการเข้าสู่ระบบในรูปแบบ เวลา (2) ฟิลด์สตริงจะถูกยกเลิกโดย '\ 0' หากสั้นกว่าขนาดของฟิลด์

รายการแรกที่สร้างขึ้นจาก init inittab (8) ในการประมวลผล (5) ก่อนที่รายการจะถูกประมวลผลแม้ว่า init (8) จะล้าง utmp โดยตั้งค่า ut_type เป็น DEAD_PROCESS การล้าง ut_user ut_host และ ut_time ด้วยไบต์ null สำหรับแต่ละระเบียนที่ ut_type ไม่ใช่ DEAD_PROCESS หรือ RUN_LVL และไม่มีกระบวนการใดที่มี PID ut_pid อยู่ ถ้าไม่พบระเบียนว่างที่มี ut_id ที่ จำเป็น init จะสร้างไฟล์ใหม่ ตั้งค่า ut_id จาก inittab ut_pid และ ut_time เป็นค่าปัจจุบันและ ut_type ไปที่ INIT_PROCESS

getty (8) ตั้งค่ารายการโดย pid, เปลี่ยน ut_type เป็น LOGIN_PROCESS , เปลี่ยนแปลง ut_time , ตั้งค่า ut_line และรอให้การเชื่อมต่อถูกสร้างขึ้น ล็อกอิน (8) หลังจากที่ผู้ใช้ได้รับการตรวจสอบสิทธิ์แล้วให้เปลี่ยน ut_type เป็น USER_PROCESS เปลี่ยน ut_time และตั้งค่า ut_host และ ut_addr ขึ้นอยู่กับ getty (8) และ login (8) ระเบียนอาจอยู่โดย ut_line แทน ut_pid ที่ ต้องการ

เมื่อ init (8) พบว่าโพรเซสได้ออกมาแล้วจะค้นหาตำแหน่ง utmp โดย ut_pid ตั้งค่า ut_type เป็น DEAD_PROCESS และล้าง ut_user , ut_host และ ut_time ด้วยไบต์โมฆะ

xterm (1) และ emulators เทอร์มินัลอื่น ๆ สร้างระเบียน USER_PROCESS โดยตรงและสร้าง ut_id โดยใช้สองตัวสุดท้ายของ / dev / ttyp % c หรือโดยใช้ p % d สำหรับ / dev / pts / % d หากพบ DEAD_PROCESS สำหรับรหัสนี้พวกเขาจะรีไซเคิลหรือมิฉะนั้นจะสร้างรายการใหม่ ถ้าสามารถทำได้พวกเขาจะทำเครื่องหมายว่า DEAD_PROCESS เมื่อออกและขอแนะนำว่าพวกเขาเป็น null ut_line , ut_time , ut_user และ ut_host ด้วย

xdm (8) ไม่ควรสร้างระเบียน utmp เนื่องจากไม่มีเทอร์มินัลที่กำหนด การปล่อยให้สร้างหนึ่งจะทำให้เกิดข้อผิดพลาดเช่น 'นิ้ว: ไม่สามารถ stat /dev/machine.dom' ควรสร้างรายการ wtmp แม้ว่าเช่นเดียวกับ ftpd (8) ไม่

telnetd (8) ตั้งค่ารายการ LOGIN_PROCESS และปล่อยให้ส่วนที่เหลือ เข้าสู่ระบบ (8) ตามปกติ หลังจากเซสชันเทลเน็ตสิ้นสุดลง telnetd (8) จะทำความสะอาด utmp ในลักษณะที่อธิบายไว้

ไฟล์ wtmp บันทึกการเข้าสู่ระบบและการล็อกเอาต์ทั้งหมด รูปแบบของไฟล์จะเหมือนกับ utmp ยกเว้นชื่อผู้ใช้ที่เป็นโมฆะจะแสดงการล็อกเอาต์บนเทอร์มินัลที่เกี่ยวข้อง นอกจากนี้ชื่อเทอร์มินัล "~" ที่ มีชื่อผู้ใช้ "shutdown" หรือ "reboot" แสดงว่าระบบปิดหรือรีบูตเครื่องและชื่อเทอร์มินัล "|" / "}" จะ บันทึกเวลาของระบบเก่า / ใหม่เมื่อ วันที่ (1) เปลี่ยนแปลง wtmp ถูกเก็บรักษาโดย login (1) init (1) และ getty บางรุ่น (1) โปรแกรมเหล่านี้ไม่สร้าง ไฟล์ ดังนั้นหากนำออกการบันทึกข้อมูลจะปิดอยู่