題 如何限制ssh端口轉發,而不否認它?


假設我創建了一個帳戶,其登錄shell實際上是一個不允許交互式登錄的腳本,並且只允許遠程執行非常有限的特定命令集。

儘管如此, ssh 允許該帳戶的用戶轉發端口,這是一個漏洞。

現在,扭曲的是我實際上希望該帳戶在設置特定的端口轉發配置時 ssh 會議成立。但是必須配置任意端口轉發。

(如果允許的端口轉發配置無條件地建立為每個會話的一部分,則這是可接受的解決方案。)


6
2017-12-07 20:18


起源


如果沒有人在幾天內挺身而出,我會接受我自己的答案。也許正在努力。 - Kaz
如果你保持不接受/打開一段時間,那麼你將得到更多的關注。有些人喜歡週末度過 別的地方 比SO :) - Sampo Sarrala
我的原始答案是一個提議的補丁,但OpenSSH中的現有功能可以完成這項工作。 - Kaz
哎呀,這屬於serverfault,不是嗎!很容易忘記這裡的“超級用戶”並不意味著“root”或“sysadmin”。 - Kaz


答案:


事實證明,OpenSSH有一個功能,限制 -L 樣式在服務器端打開。該功能有兩種方式。

  1. 在服務器配置文件中有一個 PermitOpen 選項。此選項可用於指定可以建立轉發的主機和端口。此選項可在a內使用 Match 阻止,因此可以受用戶,組或主機名或IP地址模式的限制。

  2. 在一個 authorized_keys 文件,選項可以與特定鍵相關聯。有一個 permitopen 選項與server-config類似。

注意事項/限制:

  • 選項 AllowTcpForwarding 禁用所有雙向轉發,防止在服務器上設置偵聽端口,以及活動轉發。

  • 沒有 PermitOpen 訪問控制 -R 風格連接。這可能還可以。這意味著用戶可以使用 ssh 打開各種非特權端口以在服務器上偵聽。這些連接在SSH連接的另一端是客戶端的問題。如果我們限制轉發 -L 方向,用戶無法使用它們 -R 港口(至少不通過 ssh,如果該用戶無法創建任意交互式會話)。

  • 似乎沒有辦法創建允許打開的空列表,以防止用戶進行任何打開 -L 風格的聯繫。但是,解決方法是使用無害,不存在或不可能的主機名,例如空字符串。具體而言, permitopen=":1234" 訣竅。


7
2017-12-07 22:08



因為我可以沒有細粒度的訪問控制 -R這對我有用。 - Kaz


似乎沒有辦法創建一個允許的空列表   打開,以防止用戶進行任何-L樣式連接   任何。但是,解決方法是使用無害,不存在或   不可能的主機名,例如空字符串。具體而言,   permitopen =“:1234”就可以了。

“any”的參數可用於刪除所有限制並允許任何轉發請求。參數“none”可用於禁止所有轉發請求。默認情況下,允許所有端口轉發請求。


0
2018-02-24 10:13