设置保护 gnome-terminal 免受键盘记录

设置保护 gnome-terminal 免受键盘记录

看起来记录同一用户所有进程的击键很容易。一个基本的键盘记录器是“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]

如果您不知道如何检测系统上的活动键盘记录器,请参阅:

这些方法可能不是最好的解决方案,但我希望能让您了解您可以做什么......

相关内容