暫時將使用者的登錄限制為單個 IP
背景
我有一堆執行 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 註銷。**理想情況下,我希望兩者都有,並設置一個上限,這樣 Bob 不能只保留一個盒子 48 小時,週末離開,然後讓人們無法登錄:**如果 Bob 提前註銷,那就太好了;但他一次不能保留超過 10 分鐘(或者可能是 12 小時)。理想情況下,我想使用計時器來完成此操作,或者如果它太不切實際/太困難,我希望在 Bob 終止他的所有登錄會話時結束“保留”
192.168.1.100
。工作至今
我試過玩
touch
‘ing/etc/nologin
,但我找不到保證它會被自動刪除的方法,如果我們的工程師正在遠端工作(靈活的在家工作設置),我不希望每個人都被鎖定開箱即用,除非有人進來遠端修復設備(儘管我們正在研究支持網路的 KVM 來解決這個問題)。還有可能執行一個腳本,該腳本定期(即每 5 秒)通過關閉他們的
sshd
實例從其他 IP 自動引導其他使用者,但我想嘗試完全阻止登錄,因為人們執行它很常見帶有腳本的非互動式ssh
會話可能會干擾同一 Linux 機器上的其他使用者,而基於輪詢的方法不會阻止這種情況。謝謝你。
使用您的範例,我將使用 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 分鐘計時器,請告訴我。