Похоже, что легко регистрировать нажатия клавиш всех процессов одного и того же пользователя. Основной кейлоггер - «xinput».
xinput test-xi2
Команда генерирует журнал всех нажатий клавиш. К сожалению, сюда входят пароли в gnome-терминале. Гугл предположил, что захват клавиатуры может помешать другим окнам захватывать нажатия клавиш.
Есть ли способ предотвратить вход XI2 в gnome-терминал? Или есть X-терминал, который имеет эту функцию?
Не совсем. Даже если вам как-то удастся захватить клавиатуру в X (я не знаю, возможно ли это вообще, я сомневаюсь в этом), утилита кейлоггера, работающая от имени пользователя root, всегда будет иметь доступ к клавиатуре.
Это невозможно, поскольку любые нажатия клавиш, передаваемые на X-сервер, будут доступны для xinput / любой произвольной программы. (На самом деле это часть дизайна). Новые серверы отображения, такие как Wayland и Mir, исправляют такие проблемы безопасности в X. Единственным реальным решением было бы использовать Wayland или Mir вместо X. В этом сообщении в блоге подробно описана эта проблема.
Как другие сказали здесь, не возможно защитить только программу как терминал гнома или другой терминал от ключевого входа, только если Вы ограничиваете типичных пользователей для выполнения любого клавиатурного перехватчика или если Вы останавливаетесь/приостанавливаете какой-либо процесс клавиатурного перехватчика.
Затем я покажу Вам, как можно сделать их в случае xinput
команда, но те же методы может использоваться для любого другого клавиатурного перехватчика. Если клавиатурный перехватчик использует xinput
команда, не необходимо применить метод на него, пока Вы применяете его на xinput
.
xinput
командаМожно ограничить типичных пользователей для использования xinput
команда с помощью следующей команды:
sudo chmod go-x /usr/bin/xinput
xinput
команда с test-xi2
аргументМожно ограничить типичных пользователей для использования xinput
команда с test-xi2
аргумент путем записи обертки для этой команды. Чтобы сделать это, войдите в терминал и следуйте инструкциям ниже:
Получите права пользователя root:
sudo -i
Переместиться xinput
файл в другом каталоге, который не находится в ПУТИ никакого пользователя (например, /opt
):
mv /usr/bin/xinput /new/path/to/xinput
Создайте свою обертку для xinput
команда в /usr/bin
:
gedit /usr/bin/xinput
Добавьте следующий сценарий внутри:
#!/bin/bash
if [ "$@" != "${@/test-xi2/}" -a "$(whoami)" != "root" ]; then
echo "`basename $0` $@: Permission denied"
else
/new/path/to/xinput $@
fi
Сохраните файл и закройте его.
Сделайте новый исполняемый файл обертки:
chmod +x /usr/bin/xinput
В то время как первый метод является безопасностью, с помощью второго метода, пользователь может все еще обойти его путем вызова оригинала xinput
непосредственно, если он знает его новое местоположение.
xinput
процессМожно остановиться или пауза любой xinput
процесс прежде для ввода пароля или чего-либо еще, что Вы не хотите быть зарегистрированными. Чтобы сделать это, добавьте следующую функцию удара в конце Вашего ~/.bashrc
файл:
processof () {
xinput_pids=" $(pidof $1) "
if [ "$xinput_pids" = " " ]; then
echo "Nothing to stop/pause/continue. $1: no such process!"
return
fi
for pid in $xinput_pids; do
case $2 in
"stop")
kill $pid
echo "$1: stopped"
;;
"pause")
kill -stop $pid
echo "$1: paused"
;;
"continue")
kill -cont $pid
echo "$1: continue"
;;
*)
echo "$1 is runnig"
;;
esac
done
}
Теперь после повторного открытия терминала каждый раз, когда Вы хотите, с помощью этой функции, Вы можете:
остановитесь/уничтожьте все xinput
процессы:
processof xinput stop
пауза все xinput
процессы:
processof xinput pause
возобновите все xinput
процессы:
processof xinput continue
На самом деле с этой функцией можно остановиться/приостановить, любой процесс делают Вы хотите прежде сделать что-то (такие как ввод пароля):
processof [process_name] [stop|pause|continue]
Если Вы не знаете, как обнаружить, как обнаружить активный клавиатурный перехватчик в Вашей системе, см.:
Эти методы, возможно, не являются лучшими решениями, но я надеюсь дать Вам общее представление о том, что можно сделать...