تعلم قيادة لينكس - wtmp

اسم

utmp ، wtmp - سجلات تسجيل الدخول

ملخص

#include

وصف

يتيح ملف utmp لأحد اكتشاف معلومات حول من يستخدم النظام حاليًا. قد يكون هناك المزيد من المستخدمين الذين يستخدمون النظام حاليًا ، لأنه لا تستخدم جميع البرامج تسجيل utmp.

تحذير: يجب ألا يكون utpet قابل للكتابة ، لأن العديد من برامج النظام (أحمق) تعتمد على سلامتها. أنت تخاطر بخروج ملفات النظام المزيفة وتعديلات ملفات النظام إذا تركت 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 # تعريف USER_PROCESS 7 #define DEAD_PROCESS 8 # تعريف الحساب 9 # تعريف UT_LINESIZE 12 # تعريف UT_NAMESIZE 32 # تعريف UT_HOSTSIZE 256 struct exit_status {short int e_thmination؛ / * حالة إنهاء العملية. * / قصير int e_exit؛ / * معالجة حالة الخروج. * /}؛ struct utmp {short ut_type؛ / * type of login * / pid_t ut_pid؛ / * pid لعملية تسجيل الدخول * / char ut_line [UT_LINESIZE]؛ / * device name of tty - "/ dev /" * / char ut_id [4]؛ / * id id أو abbrev. ttyname * / char ut_user [UT_NAMESIZE]؛ / * اسم المستخدم * / char ut_host [UT_HOSTSIZE]؛ / * اسم المضيف لتسجيل الدخول عن بعد * / struct exit_status ut_exit؛ / * حالة الخروج لعملية وضعت عليها علامة DEAD_PROCESS. * / ut_session طويل / * معرف جلسة العمل ، المستخدم للنوافذ * / struct timeval ut_tv؛ / * تم إدخال الوقت. * / int32_t ut_addr_v6 [4]؛ / * عنوان IP للمضيف البعيد. * / char pad [20] ؛ /* محجوزة للاستخدام في المستقبل. * /}؛ / * الاختراقات التوافق إلى الوراء. * / #define 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). يتم إنهاء حقول السلسلة بواسطة \ \ إذا كانت أقصر من حجم الحقل.

أول إدخالات خلق نتيجة من init (8) معالجة inittab (5). قبل معالجة أي إدخال ، على الرغم من ذلك ، يقوم init (8) بتنظيف utp عن طريق تحديد ut_type إلى DEAD_PROCESS ، ومسح ut_user ، و ut_host ، و ut_time مع وحدات البايت الفارغة لكل سجل لا يكون 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 ، أو set ut_line ، أو الانتظار حتى يتم تأسيس الاتصال. تسجيل الدخول (8) ، بعد أن تتم مصادقة المستخدم ، يتغيير ut_type إلى USER_PROCESS ، يغير ut_time ، ويعين ut_host و ut_addr . اعتمادًا على getty (8) وتسجيل الدخول (8) ، قد تكون السجلات موجودة بواسطة ut_line بدلاً من ut_pid المفضل.

عندما يجد init (8) أن إحدى العمليات قد خرجت ، فإنه يحدد موضع إدخال utp الخاص به بواسطة ut_pid ، ويقوم بتعيين ut_type إلى DEAD_PROCESS ، ويزيل ut_user ، و ut_host و ut_time مع البايتات الخالية.

يقوم xterm (1) ومحولات المحطة الطرفية الأخرى بإنشاء سجل USER_PROCESS مباشرةً وإنشاء ut_id باستخدام الحرفين السابقين من / dev / ttyp ٪ c أو باستخدام p ٪ d لـ / dev / pts / ٪ d . إذا عثروا على DEAD_PROCESS لهذا المعرف ، فسيعيدون تدويره ، وإلا فسيخلقون إدخالًا جديدًا. إذا كان بإمكانهم ذلك ، فسيتم وضع علامة عليه على أنه DEAD_PROCESS عند الخروج ، ويُنصح باستخدامهم ut_line و ut_time و ut_user و ut_host أيضًا.

لا يجب أن يقوم xdm (8) بإنشاء سجل utmp ، نظرًا لعدم وجود محطة مخصصة. سيؤدي تركه لإنشاء واحد إلى حدوث أخطاء ، مثل "finger: لا يمكن stat /dev/machine.dom". يجب إنشاء إدخالات wtmp ، رغم ذلك ، مثلما يفعل ftpd (8).

telnetd (8) إعداد إدخال LOGIN_PROCESS ويترك الباقي لتسجيل الدخول (8) كالمعتاد. بعد انتهاء جلسة عمل telnet ، تقوم telnetd (8) بتنظيف utmp بالطريقة الموصوفة.

يسجل ملف wtmp جميع عمليات تسجيل الدخول والخروج. الشكل الخاص به هو بالضبط مثل utmp إلا أن اسم مستخدم فارغ يشير إلى الخروج على المحطة الطرفية المرتبطة. علاوة على ذلك ، يشير اسم المحطة الطرفية "~" مع اسم المستخدم "إيقاف التشغيل" أو "إعادة التشغيل" إلى إيقاف تشغيل النظام أو إعادة التشغيل وزوج أسماء المحطة الطرفية "|" يسجل / "}" وقت النظام القديم / الجديد عند تغيير التاريخ (1) عليه. يتم الاحتفاظ wtmp عن طريق تسجيل الدخول (1) ، init (1) ، وبعض إصدارات getty (1). لا ينشئ أي من هذه البرامج الملف ، لذلك إذا تمت إزالته ، يتم إيقاف حفظ السجلات.