如何为特定用户禁用终端仿真器?

如何为特定用户禁用终端仿真器?

如何阻止特定用户使用终端仿真器?!

我通过编写脚本来施展技巧,.bashrc该脚本要求用户输入密码才能使用终端仿真器。

但对于一些知道如何使用此技巧的高级用户来说,此技巧并不是完美的方法。

为此,我正在寻找一种方法来完全阻止特定用户使用终端仿真器,这些用户只是没有sudo权限的普通用户。

有什么建议么?!

答案1

为允许使用终端的用户创建一个组,例如terminalusers。找到终端程序(使用which),例如xterm。相应地更改其所有权:

chown root:terminalusers /usr/bin/xterm

允许所有者和组执行。拒绝其他人执行:

chmod 750 /usr/bin/xterm

此时,除非您是 root 或组成员(将自己添加到组中,然后您就可以使用),xterm否则无法使用。对其他终端仿真器应用类似的设置(我想这是您的主要终端仿真器)。现在,这只是另一个terminalusersxtermgnome-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)

如何使用

  1. 将下面的脚本复制到一个空文件中,并将其保存users_apps.py在“普通”用户无法编辑文件的位置。
  2. 在脚本的头部部分,按以下格式设置用户及其被阻止的应用程序:

    ["<username>", "<application>"],
    

对于单个用户,阻止geditgnome-terminal例如

    data = [
        ["jacob", "gedit", "gnome-terminal"],
        ]
  1. 添加一行到/etc/rc.local

    /bin/bash -c "python3 /path/to/users_apps.py&"
    
  2. 通过运行进行测试/etc/rc.local
    注意:使用您的用户帐户中的非必要应用程序进行测试:

    /etc/rc.local
    

    如果您阻止了自己,您将无法运行该应用程序;它可能会瞬间打开,但会立即关闭。

如果用户没有sudo权限,就没有什么可以做的:)

相关内容