دستور last در محیط لینوکس، اطلاعاتی را در مورد لاگینهای موفق کاربران ارائه می کند برای مثال، از طریق این دستور می توان آخرین کاربری که به سیستم لاگین کرده است را به همراه آدرس ip آن مشخص کرد:
[root@ol7 ~]# last
این دستور اطلاعات را از فایل var/log/wtmp/ خوانده و به کاربر نمایش می دهد پس در صورت حذف این فایل، اجرای دستور last هم با خطا مواجه خواهد شد:
[root@ol7 ~]# mv /var/log/wtmp /var/log/wtmp-old
[root@ol7 ~]# last
last: /var/log/wtmp: No such file or directory
Perhaps this file was removed by the operator to prevent logging last info.
محتوای فایل wtmp به صورت باینری می باشد و امکان اصلاح محتویات ان با کمک ویرایشگرهای رایج(از قبیل vim)، وجود ندارد:
[root@ol7 ~]# vi /var/log/wtmp
^B^@^@^@^@^@^@^@~^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@~~^@^@reboot^@^@^
با در نظر گرفتن این نکات، فرض کنید فردی قصد دارد اطلاعات ثبت شده برای کاربر oracle را در این فایل حذف کند و یا به جای نام کاربر oracle، کاربر usef را ثبت کند، در این صورت چه راهکاری وجود دارد؟
برای حذف و یا اعمال تغییر در این فایل، می توان از دستور utmpdump استفاده کرد با کمک این دستور، امکان خواندن محتویات لاگ فایلهای باینری نظیر wtmp فراهم می شود برای مثال، دستور زیر سبب نمایش محتوایات فایل wtmp خواهد شد:
[root@ol7 ~]# utmpdump /var/log/wtmp
همانطور که از خروجی دستورات قبلی قابل مشاهده است، اطلاعاتی در مورد زمان لاگین کاربر oracle در فایل wtmp ثبت شده است برای قرار دادن کلمه usef به جای کلمه oracle، خروجی دستور utmpdump را در یک فایل متنی ذخیره می کنیم:
[root@ol7 ~]# utmpdump /var/log/wtmp>/root/myfile.txt
Utmp dump of /var/log/wtmp
فایل myfile.txt را باز کرده و تغییرات لازم را در آن ایجاد می کنیم:
[root@ol7 ~]# vi /root/myfile.txt
:%s/oracle/usef/g
بعد از اعمال تغییرات دلخواه، مجددا از دستور utmpdump به همراه سوییچ r استفاده کرده و محتوای فایل متنی root/myfile.txt/ را بصورت باینری در فایل var/log/wtmp/ ذخیره می کنیم:
[root@ol7 ~]# utmpdump -r </root/myfile.txt >/var/log/wtmp
Utmp undump of /dev/stdin
سپس دستور last را اجرا می کنیم:
[root@ol7 ~]# last
همانطور که می بینید، با تغییرات اعمال شده، نام کاربر usef به جای کاربر oracle در خروجی دستور last نمایش داده شده است.
علاوه بر دستور last، دستورات دیگری هم هستند که اطلاعاتی را در مورد لاگین کاربران ارائه می کنند دستوراتی نظیر lastb که اطلاعاتی را در مورد لاگینهای ناموفق کاربران نمایش می دهد و دستورات w و who که در مورد کاربران متصل به سیستم، اطلاعاتی را نمایش می دهند.
دستور lastb، اطلاعاتش را از فایل باینری var/log/btmp/ خوانده و دو دستور w و who هم از فایل باینری var/log/wtmp/ اطلاعات را نمایش می دهند پس برای تغییر خروجی این دستورات هم باید این دو فایل باینری را با دستور utmpdump تغییر داد.
برای مثال، در دستور زیر، خروجی دستور who را دستکاری می کنیم:
[root@ol7 ~]# who
root pts/0 2019-07-08 23:19 (192.168.56.1)
root :0 2019-07-14 01:30 (:0)
root pts/1 2019-07-14 01:30 (:0)
[root@ol7 ~]# utmpdump /var/run/utmp>/root/current_user.txt
Utmp dump of /var/run/utmp
[root@ol7 ~]# vi current_user.txt
:%s/root/usef/g
[root@ol7 ~]# utmpdump -r </root/current_user.txt >/var/run/utmp
Utmp undump of /dev/stdin
[root@ol7 ~]# who
usef pts/0 2019-07-09 00:19 (192.168.56.1)
usef :0 2019-07-14 02:30 (:0)
usef pts/1 2019-07-14 02:30 (:0)