Answers:
这是不可能的,因为传递给X服务器的任何击键都可用于xinput /任意程序。(实际上,这是设计的一部分)。诸如Wayland和Mir的新显示服务器正在解决X中的此类安全问题。唯一真正的解决方案是使用Wayland或Mir代替X。此博客文章详细介绍了此问题。
并不是的。即使您设法以某种方式在X内抓取键盘(我也不知道这样做是否可行,我对此表示怀疑),以root身份运行的keylogger实用程序将始终可以访问键盘。
就像其他人在这里说的那样,仅当您限制标准用户执行任何按键记录程序或停止/暂停任何按键记录程序时,才可能仅保护gnome-terminal或其他终端等程序免受按键记录。
接下来,我将向您展示如何在xinput
执行命令的情况下执行这些操作,但是相同的方法可用于任何其他按键记录器。如果按键记录器使用xinput
命令,则只要在上应用该方法,就不必在其上应用该方法xinput
。
xinput
命令您可以限制标准用户使用xinput
命令使用以下命令:
sudo chmod go-x /usr/bin/xinput
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
知道其新位置,则仍可以通过直接致电原件来规避它。
xinput
进程您可以先停止或暂停任何xinput
过程,然后再输入密码或不想登录的其他任何内容。为此,请在~/.bashrc
文件末尾添加以下bash函数:
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]
如果您不知道如何检测如何检测系统上的活动键盘记录程序,请参阅:
这些方法可能不是最好的解决方案,但是我希望给您一个关于您可以做什么的想法。
xinput
甚至都不是SUID(-rwxr-xr-x 1 root root 48504 2012年8月15日/ usr / bin / xinput)