دستکاری خروجی دستورات last، lastb، who و w

دستور 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)

ارتباط با نویسنده:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.