背景
我有一堆运行 Linux 的 Raspberry PI 3 设备,由多个工程师共享。为了简单起见,每个Linux机器都有相同的默认用户名/密码(即每个人都以root身份登录)来测试我们开发的软件。这是一个难的要求(即不能改变这一点)。
问题
有时,两个用户(通常一个在办公室工作,另一个通过 VPN 远程工作)会同时登录同一设备,如果两个用户都运行试图获取权限的软件,则这两个用户可能会互相造成问题。对连接到盒子的硬件的独占访问权。此外,有时用户会重新启动系统,这确实会惹恼其他开发人员。虽然我们尝试实施独占访问时间表,但当有人“只需要快速完成检查”时,这些时间表通常会被忽略。
问题
有没有办法,一经请求(即我并不总是希望启用此“功能”),让用户保留使用帐户(即root)进行交互式/非交互式SSH登录,以便只有SSH_CLIENT
与该帐户关联的IP地址(即)个人可以用吗?例如,假设 Bob 和 Alice 都想darkstar
使用 username登录主机root
。 Bob 首先登录,他的 IP 地址是192.168.1.100
。 Bob 想要独占访问darkstar
10 分钟,因此他执行一个特殊命令(即bash /opt/mine_for_10_mins.sh
),在这 10 分钟内:
- Bob 可以创建其他交互式/非交互式 SSH 实例(即通过
ssh
、scp
、sftp
等登录),只要它来自 的相同源 IP 地址192.168.1.100
(或 中存储的任何内容SSH_CLIENT
)。 - 尝试从 IP 登录的 Alice
10.10.0.200
在 10 分钟内无法登录,或者 Bob 注销。理想情况下,我希望两者都拥有,并设置一个上限,这样鲍勃就不能只保留一个盒子 48 小时,周末离开,而让人们无法登录:如果鲍勃早点退出,那就太好了;但他一次不能预约超过 10 分钟(也可能是 12 小时)。
理想情况下,我想用计时器来完成此操作,或者如果它太不切实际/困难,我希望当 Bob 终止他的所有登录会话时结束“保留” 192.168.1.100
。
到目前为止的工作
我尝试过使用touch
'ing /etc/nologin
,但我找不到一种方法来保证它会被自动删除,如果我们的工程师远程工作(灵活的在家工作设置),我不希望每个人都被锁定开箱即用,除非有人远程修复设备(尽管我们正在研究支持网络的 KVM 来解决这个问题)。
还可以运行一个脚本,通过关闭实例来定期(即每 5 秒)从其他 IP 自动启动其他用户sshd
,但我想尝试完全阻止登录,因为人们运行这种情况很常见带有脚本的非交互式ssh
会话可能会干扰同一 Linux 机器上的其他用户,而基于轮询的方法无法阻止这种情况。
谢谢。
答案1
使用您的示例,我将使用 iptables 明确阻止 Alice 的 SSH 访问并接受来自 Bob IP 地址的 SSH 流量。从命令行,您需要输入类似以下内容(或编写脚本):
允许 Bob 的 IP (192.168.1.100) 通过 SSH 连接到默认端口 (22)
$ sudo iptables -I INPUT -s 192.168.1.100 -p tcp -m tcp --dport 22 -m comment --comment "Allow Bob to SSH" -j ACCEPT
并阻止Alice的SSH访问
$ sudo iptables -I INPUT -s 10.1.0.200 -p tcp -m tcp --dport 22 -m comment --comment "Block Alice from using SSH to login" -j DROP
要取消阻止 Alice,您可以使用带有 --list 和 --line-numbers 选项的 iptables 命令来查找包含她的 IP 地址的行,然后从表中删除该行:
$sudo iptables -L --line-numbers | grep 10.1.0.200
num target prot opt source destination
1 DROP tcp -- 10.1.0.200 anywhere tcp dpt:ssh /* Do not allow Alice to SSH in */
$ sudo iptables -D INPUT 1
或者,使用单个命令执行相同操作:
$ sudo iptables -L --line-numbers | grep "10.1.0.200" | awk '{print $1}' | xargs -i iptables -D INPUT {}
并使用相同的命令,将 Alice 的 IP 替换为 Bob 的 IP,以删除 Bob IP 的显式“允许”规则。
我将把脚本留给你。如果您想知道如何最好地启用 10 分钟计时器,请告诉我。