如何阻止特定用户使用终端仿真器?!
我通过编写脚本来施展技巧,.bashrc
该脚本要求用户输入密码才能使用终端仿真器。
但对于一些知道如何使用此技巧的高级用户来说,此技巧并不是完美的方法。
为此,我正在寻找一种方法来完全阻止特定用户使用终端仿真器,这些用户只是没有sudo
权限的普通用户。
有什么建议么?!
答案1
为允许使用终端的用户创建一个组,例如terminalusers
。找到终端程序(使用which
),例如xterm
。相应地更改其所有权:
chown root:terminalusers /usr/bin/xterm
允许所有者和组执行。拒绝其他人执行:
chmod 750 /usr/bin/xterm
此时,除非您是 root 或组成员(将自己添加到组中,然后您就可以使用),xterm
否则无法使用。对其他终端仿真器应用类似的设置(我想这是您的主要终端仿真器)。现在,这只是另一个terminalusers
xterm
gnome-terminal
诡计:它阻止的是终端仿真器,而不是终端(确实有细微的差别)。
在 UNIX 环境中,终端是系统的主要接口。阻止它们很可能会干扰许多应用程序,而不仅仅是命令行应用程序。阻止终端仿真器只不过是一种权宜之计。请记住,如果权限足够,用户终端不会对您的计算机造成任何不良影响:只有 root 权限才能搞乱一切。
笔记:与xterm
,据说这会导致问题utmp
。
答案2
尤其是当你的“目标”用户没有sudo
权限时,下面的解决方案非常“防水”。它不仅可以用于阻止用户使用终端,而且(任何用户)使用任何应用。
这是什么
解决方案是使用一个简单且非常轻量的后台脚本,您可以灵活地使用它来阻止用户使用应用程序。
该脚本在启动时启动/etc/rc.local
(请参阅下文)
剧本
#!/usr/bin/env python3
import subprocess
import time
data = [
["jacob", "gedit", "thunderbird", "gnome-terminal"],
["William", "gedit"],
]
def user_appcheck(userdata):
try:
user = userdata[0]; apps = userdata[1:]
applist = subprocess.check_output(["ps", "-u", user]).decode("utf-8").splitlines()
matches = sum([[l.split()[-1] for l in applist if app in l] for app in apps], [])
for match in matches:
subprocess.Popen(["pkill", match])
except:
pass
while True:
for userdata in data:
user_appcheck(userdata)
time.sleep(4)
如何使用
- 将下面的脚本复制到一个空文件中,并将其保存
users_apps.py
在“普通”用户无法编辑文件的位置。 在脚本的头部部分,按以下格式设置用户及其被阻止的应用程序:
["<username>", "<application>"],
对于单个用户,阻止gedit
和gnome-terminal
例如
data = [
["jacob", "gedit", "gnome-terminal"],
]
添加一行到
/etc/rc.local
:/bin/bash -c "python3 /path/to/users_apps.py&"
通过运行进行测试
/etc/rc.local
注意:使用您的用户帐户中的非必要应用程序进行测试:/etc/rc.local
如果您阻止了自己,您将无法运行该应用程序;它可能会瞬间打开,但会立即关闭。
如果用户没有sudo
权限,就没有什么可以做的:)