لینوکس فرمان - wtmp را بیاموزید

نام

utmp، wtmp - سوابق ورودی

خلاصه داستان

#include

شرح

فایل utmp اجازه می دهد تا یکی برای کشف اطلاعات در مورد کسانی که در حال حاضر با استفاده از سیستم. ممکن است کاربران بیشتری در حال حاضر از سیستم استفاده می کنند، زیرا همه برنامه ها از ورود به سیستم utmp استفاده نمی کنند.

هشدار: utmp نباید قابل نوشتن باشد، زیرا بسیاری از برنامه های سیستم (احمقانه) به یکپارچگی آن بستگی دارد. اگر 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 ACCOUNTING 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {short int e_termination؛ / * وضعیت خاتمه روند * / کوتاه int e_exit؛ / * وضعیت خروج فرآیند * /} struct utmp {short ut_type؛ / * نوع ورود * / pid_t ut_pid؛ / * pid از روند ورود به سیستم * / char ut_line [UT_LINESIZE]؛ / * نام دستگاه tty - "/ dev /" * / char ut_id [4]؛ / * init id یا اختصار ttyname * / char ut_user [UT_NAMESIZE]؛ / * نام کاربری * / char ut_host [UT_HOSTSIZE]؛ / * hostname برای ورود از راه دور * / struct exit_status ut_exit؛ / * وضعیت خروج فرآیند مشخص شده به عنوان DEAD_PROCESS. * / طولانی ut_session؛ / * session ID، برای windowing استفاده می شود * / struct timeval ut_tv؛ / * زمان ورود ساخته شده است. * / int32_t ut_addr_v6 [4]؛ / * آدرس IP میزبان از راه دور. * / پد فریم [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) می دهد. رشته های رشته با '\ 0' خاتمه می یابد ، اگر آنها کوتاه تر از اندازه فیلد باشند.

اولین نوشته هایی که تا کنون از init (8) پردازش inittab (5) حاصل شده است. قبل از وارد شدن، پردازش می شود، init (8) با ut_type به DEAD_PROCESS ، پاک کردن ut_user ، ut_host و ut_time با بایت های صفر برای هر رکورد که ut_type DEAD_PROCESS یا RUN_LVL نیست و در آن هیچ فرایندی با PID ut_pid موجود نیست، init (8) پاک کردن utmp می شود. اگر یک رکورد خالی با 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 . بسته به گتی (8) و ورود (8)، سوابق ممکن است با ut_line به جای ut_pid ترجیح داده شود.

هنگامی که init (8) می بیند که فرایند خروج می کند، ورودی utmp خود را توسط ut_pid می گیرد ، ut_type را به DEAD_PROCESS می کند و ut_user ، ut_host و ut_time را با بایت های خالی پاک می کند.

xterm (1) و دیگر emulator های ترمینال به طور مستقیم یک رکورد 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 ایجاد کند، زیرا هیچ ترمینال اختصاصی وجود ندارد. اجازه دادن به آن را ایجاد خواهد شد در اشتباهات، مانند 'انگشت: نمی تواند stat /dev/machine.dom'. با این حال، باید نوشته های wtmp را ایجاد کنید، درست مثل ftpd (8).

telnetd (8) یک ورودی LOGIN_PROCESS را ایجاد می کند و بقیه را به صورت معمول وارد می کند (8). پس از اتمام جلسه telnet، telnetd (8) به روش توصیفی utmp را پاک می کند.

فایل wtmp تمام logins و logouts را ثبت می کند. فرمت آن دقیقا همانند utmp است به جز اینکه یک نام کاربری نام کاربری یک خروج از ترمینال مربوطه را نشان می دهد. علاوه بر این، نام ترمینال "~" با نام کاربری "shutdown" یا "reboot" نشان دهنده یک خاموش شدن سیستم یا راه اندازی مجدد سیستم است و نام ترمینال "|" / "}" زمان سیستم قدیمی / جدید را وارد می کند (1) آن را تغییر می دهد. wtmp توسط login (1)، init (1) و برخی از نسخه های getty (1) نگهداری می شود. هیچ کدام از این برنامه ها فایل را ایجاد نمی کنند، بنابراین اگر آن حذف شود، ضبط ثبت شده خاموش می شود.