Linux

暫時將使用者的登錄限制為單個 IP

  • January 19, 2019

背景

我有一堆執行 Linux 的 Raspberry PI 3 設備,由多個工程師共享。為簡單起見,每個 Linux 機器都有相同的預設使用者名/密碼(即每個人都以 root 身份登錄)來測試我們開發的軟體。這是一個硬性要求(即無法更改)。


問題

有時,兩個使用者(通常一個在辦公室工作,另一個通過 VPN 遠端)會同時登錄到同一設備,如果兩個使用者都執行試圖獲取獨占訪問連接到盒子的硬體。此外,有時使用者會重新啟動系統,這確實會惹惱其他開發人員。雖然我們嘗試實施獨占訪問計劃,但當有人“只需要快速完成檢查”時,這些計劃通常會被忽略。


問題

有沒有一種方法,按需(即我並不總是希望啟用此“功能”),讓使用者保留使用帳戶(即 root)進行互動式/非互動式 SSH 登錄,這樣只有SSH_CLIENT可以使用與該個人關聯的IP 地址(即)?例如,假設 Bob 和 Alice 都想darkstar使用 username登錄主機root。Bob 先登錄,他的 IP 地址是192.168.1.100。Bob 想要獨占訪問darkstar10 分鐘,因此他執行了一個特殊命令(即bash /opt/mine_for_10_mins.sh),在這 10 分鐘內:

  • Bob 可以創建額外的互動式/非互動式 SSH 實例(即通過sshscpsftp等登錄),只要它來自相同的源 IP 地址192.168.1.100(或儲存在 中的任何內容SSH_CLIENT)。
  • 嘗試從 IP 登錄的 Alice10.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 分鐘計時器,請告訴我。

引用自:https://unix.stackexchange.com/questions/464538