如何在 Linux 上“监禁”用户帐户的网络功能?

如何在 Linux 上“监禁”用户帐户的网络功能?

Linux 盒子a通过动态 DNS 注册连接到家庭 DSL 线路,托管tmux多个客户端通过 SSH 以只读模式连接的会话。所有用户使用相同的凭据进行连接: user b

Example: ssh [email protected] tmux attach -t screencast

一切正常,但我有一个用户从盒子里到互联网上做了一些“顽皮”的事情。这是不可接受的,因为我要对与 ISP 签订的互联网合同负责;除了授予使用该帐户在我的计算机上观看会话的能力b之外ssh,如何完全监禁每个用户?tmuxscreencasta

我正在考虑在用户通过 ssh 连接后立即更新 ipchains,仅允许流量返回该 IP 地址,但是...多个查看者共享同一帐户?

答案1

我不完全理解您的要求:用户将被监禁在哪台机器上?他们可以做任何不涉及网络的事情吗?尽管如此,我想我可以告诉你必要的构建模块是什么。

要将用户限制为特定网络连接,请参阅 如何在 Linux 中使用 iptables 限制局域网上特定用户的互联网访问。简而言之,限制用户 1234 的网络流量通过 ssh 连接到 192.0.2.42(机器 A 的 IP 地址):

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -d 192.0.2.42 --dport 22 -j ACCEPT
iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

如果有 IPv6,请记住也阻止它。

在机器 A 上,要将受限用户限制为帐户 B,最有效的方法是安排这些用户不具有其他帐户的凭据。您可以使用Match指令sshd_config限制来自特定 IP 地址的连接以验证特定的用户,但这可能不是一件好事,因为它会阻止您获得管理访问权限。

Match 192.0.2.99
    AllowTCPForwarding No
    AllowUsers B
    PasswordAuthentication No
    X11Forwarding No

要将帐户 B 限制为单个命令,有两种方法:

  • 为用户提供一个私钥(最好每个用户一个),并在authorized_keys带有指令的文件command=

    command="tmux attach-session -r -t screencast" ssh-rsa …
    
  • tmux将用户的 shell 设置为使用正确参数启动的脚本。这样做的优点是您可以允许密码身份验证,但可能更难以不允许用户突破 shell 提示符的方式进行正确操作。

我认为 tmux 认为 tmux 不允许在只读会话中进行 shell 转义,但我不确定,请检查用户此时是否无法转义。

相关内容