看起来记录同一用户所有进程的击键很容易。一个基本的键盘记录器是“xinput”。
xinput test-xi2
该命令会生成所有按键的日志。不幸的是,这包括 gnome-terminal 中的密码。谷歌搜索表明,抓取键盘可能会阻止其他窗口捕获按键。
有没有办法阻止 XI2 登录 gnome-terminal?或者有没有具有此功能的 X 终端?
答案1
这是不可能的任何传递给 X 服务器的按键将可供 xinput 或任何任意程序使用。(事实上,这是设计的一部分)。Wayland 和 Mir 等新显示服务器正在修复 X 中的此类安全问题。唯一真正的解决方案是使用 Wayland 或 Mir 代替 X。这博客文章详细介绍了这个问题。
答案2
不是的。即使你设法在 X 中获取键盘(我不知道这是否可能,我对此表示怀疑),以 root 身份运行的键盘记录器实用程序始终可以访问键盘。
答案3
正如其他人在这里所说的,只有当您限制标准用户执行任何键盘记录器或者停止/暂停任何键盘记录器进程时,才有可能保护 gnome-terminal 或其他终端之类的程序免受键盘记录的影响。
接下来我将向您展示如何在命令的情况下执行这些操作xinput
,但相同的方法也可用于任何其他键盘记录器。如果键盘记录器使用xinput
命令,则无需在其上应用该方法,只要将其应用于即可xinput
。
1.限制标准用户使用xinput
命令
你可以限制标准用户使用xinput
命令使用以下命令:
sudo chmod go-x /usr/bin/xinput
2.限制标准用户使用带参数xinput
的命令test-xi2
你可以限制标准用户使用xinput
命令test-xi2
带参数通过为此命令编写包装器。为此,请进入终端并按照以下说明操作:
获取root权限:
sudo -i
将文件移动到
xinput
不在任何用户的 PATH 中的另一个目录中(例如/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
虽然第一种方法是安全的,但是使用第二种方法,如果用户知道原始方法的新位置,他仍然可以通过直接调用原始方法来解决。
3. 停止/暂停任何xinput
进程
您可以xinput
在输入密码或任何其他您不想记录的内容之前停止或暂停任何进程。为此,请在文件末尾添加以下 bash 函数~/.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]
如果您不知道如何检测系统上的活动键盘记录器,请参阅:
这些方法可能不是最好的解决方案,但我希望能让您了解您可以做什么......