Linux 盒子a
通过动态 DNS 注册连接到家庭 DSL 线路,托管tmux
多个客户端通过 SSH 以只读模式连接的会话。所有用户使用相同的凭据进行连接: user b
。
Example: ssh [email protected] tmux attach -t screencast
一切正常,但我有一个用户从盒子里到互联网上做了一些“顽皮”的事情。这是不可接受的,因为我要对与 ISP 签订的互联网合同负责;除了授予使用该帐户在我的计算机上观看会话的能力b
之外ssh
,如何完全监禁每个用户?tmux
screencast
a
我正在考虑在用户通过 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 转义,但我不确定,请检查用户此时是否无法转义。