Skip to main content

วิธีการใช้ Unix Command Utmp ใน Linux

คำสั่ง Unix/Linux เบื้องต้น Part 1 (มิถุนายน 2026)

คำสั่ง Unix/Linux เบื้องต้น Part 1 (มิถุนายน 2026)
Anonim

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

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

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

#define UT_UNKNOWN 0 #define RUN_LVL 1 #define BOOT_TIME 2 #define NEW_TIME 3 #define OLD_TIME 4 #define INIT_PROCESS 5 #define LOGIN_PROCESS 6 #define USER_PROCESS 7 #define DEAD_PROCESS 8 #define บัญชี 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) ฟิลด์สตริงจะถูกยกเลิกโดย'' ถ้าสั้นกว่าขนาดของสนาม

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

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

เมื่อ ในนั้น (8) พบว่ากระบวนการได้ออกไปแล้วมันจะค้นหาตำแหน่ง utmp โดยut_pid, ชุดut_type ไปยังDEAD_PROCESSและล้างut_user, ut_host และut_time กับ null bytes

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

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

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

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