Защита десктопа начинается с самого десктопа.
Идея такая:
Включается компьютер, загружается runlevel 2 или 3, как кривая хакерской мечты ляжет, а вместо привычного /etc/issue и getty на экран "наползает матрица".
Собственно, ничего с этой матрицей поделать нельзя будет до тех пор, пока в компьютер не будет воткнуто "определенное заранее устройство", например, флешка.
Сунул флэш-накопитель - и, на тебе, выкидывает приглашение на ввод логина и пароля (ну, можно и автологин сунуть, опять-таки, как кривая хакерской души лежит).
От слов к делу:
Нам потребуется:
if [ -f $SYSFS/$DEVPATH/manufacturer ]; then LABEL="USB `cat $SYSFS/$DEVPATH/manufacturer` `cat $SYSFS/$DEVPATH/product`" else LABEL="USB product $PRODUCT" fi
echo $PRODUCT > ~/dev.id
Сохраним файл и воткнем флешку в порт.
Теперь, снова корректируем файл /etc/hotplug/usb.agent
и вместо нашей строчки вставим другой код:
# BOF: Autologin Script.
if [ "$PRODUCT" = "xxx/yyyy/zzz" ]; then
/bin/init_mangle;
fi
# EOF: Autologin Script.
Где xxx/yyyy/zzz это идентификатор устройства, который засветился в ~/dev.id
Удалим dev.id
Опять-таки, init_mangle - это скрипт подмены.
Так как версия хотплуга оставляет желать лучшего, то вызов init_mangle произойдет аж два раза. Нам это ни к чему и мы в скрипте это обработаем.
Теория запуска.
Когда ядро передает управление init, второй по своей натуре начинает искать inittab, и если он его находит, то ищет initdefault итд.
Когда система загружена и работает, init может ожидать лишь трех явлений:
Например,: 1:2345:respawn:/sbin/mingetty tty1
Скажет init что на уровнях 2,3,4,5 при смерти mingetty запустить его снова.
Таким образом достигается "перезапуск" getty для перелогинивания другими пользователями.
Если необходимо просто перечитать /etc/inittab, то посылается комманда "init Q".
Но, при этом, потомки продолжают жить.
Значит, скрипт init_mangle должен:
Мы получим смерть нужных потомков старого inittab и бессмертие новых.
Вот, как это выглядит:
[lilo@Fiesta ~]$ cat /bin/init_mangle #!/bin/sh FNAME='/tmp/bitlock-'$(whoami); if ! [ -e "$FNAME" ]; then echo -e "0">"$FNAME"; fi; case $(cat "$FNAME") in 0) echo -e "1">"$FNAME"; ;; 1) echo -e "0">"$FNAME"; ;; *) rm -f "$FNAME"; ;; esac; if [ -e $FNAME ]; then if [ "$(cat $FNAME)" = "0" ]; then /bin/zmatrix & fi; fi;
[lilo@Fiesta ~]$ cat /bin/zmatrix #!/bin/sh cat /etc/inittab.base /etc/inittab.addon.mingetty /etc/inittab.addon.xdm>/etc/inittab.complex ln -fs /etc/inittab.complex /etc/inittab init Q cat /etc/inittab.base /etc/inittab.addon.matrix>/etc/inittab.complex ln -fs /etc/inittab.complex /etc/inittab killall cmatrix 2>/dev/null >/dev/null
Где:
cmatrix - это программа симулирующая с ключем s скринсейвер.
Ее вывод необходимо направлять в нужные нам терминалы.
А /etc/inittab постоянно линкуется на вновь создаваемый /etc/inittab.complex
Все файлы доступны у меня на сайте.
Happy hacking...