Linux

如何實現使用者對 SSH 的限制訪問

  • July 18, 2021

簡介 這是一個尋求對how-to-restrict-an-ssh-user-to-only-allow-ssh-tunneling答案的擴展的問題

問題陳述 我試圖在參考中實施建議以創建一個沒有 shell 訪問權限的使用者,但我無法以該使用者的名義連接到隧道。

要求 我希望能夠讓不受保護的遠端電腦(機器 A)啟動反向隧道回到我的防火牆。機器 A 是一個沒有使用者輸入的無頭盒子。它在野外,可能在防火牆後面。我的防火牆 (MyFW) 是一台 linux 機器,我有 CLI 根訪問權限。

我需要機器 A 啟動反向 ssh 隧道返回 MyFW。通常會在 MyFW 受保護端的使用者機器 C 上創建本地隧道。本地 ssh 隧道將根據需要連接到 MyFW 的反向隧道。

如果有人闖入機器 A 並找到反向隧道,我不希望他們能夠使用反向隧道在 MyFW 的隧道入口(埠)之外獲得訪問權限。

我試過什麼

我使用 ssh 和隧道已經有幾年了,所以我了解它們的一般配置和操作。為了進行測試,我在辦公桌上設置了兩台機器,機器 A 和 B。兩者都是 linux 機器,也不是防火牆。目的是讓最簡單的設置工作。

我首先在機器 A 上創建 ssh 密鑰:

ssh-keygen

以通常的方式。

將使用者“隧道”添加到充當 MyFW 的機器 B。以下命令由另一個使用者使用 sudo 執行。

useradd tunnel -m -d /home/tunnel -s /bin/true

隧道使用者沒有密碼。我創建了一個主目錄,因為上面的命令沒有。

mkdir /home/tunnel/.ssh

我為使用者隧道創建了 ssh 密鑰並將它們放在/home/tunnel目錄中

ssh-keygen

我手動將公鑰從遠端機器 A 複製到 MyFW 機器 B 中的 /home/tunnel/.ssh/authorized_keys 文件中。

我在 ssh 配置文件中設置了值:

AllowTcpForwarding Yes
GatewayPorts yes
ExitOnForwardFailure=yes

這樣做的目的是在防火牆上創建一個使用者,創建和連結隧道,同時阻止黑客的任何訪問嘗試。真正的遠端機器 A 上沒有任何價值,所以如果黑客破壞了它也沒什麼大不了的。

測試

為了進行測試,我在遠端機器 A 上設置了一個本地隧道,然後嘗試從機器 A SSH 到 MyFW。

這適用於普通的“使用者”:

$ ssh -L 9022:localhost:222 user@172.30.21.157
$ ssh localhost -p 9022

正如預期的那樣,第一個命令創建了隧道。第二個命令將 ssh 隧道連接到另一端機器的 CLI。

但這不適用於受限制的“隧道”:

$ ssh -L 9222:localhost:222 tunnel@172.30.21.157
$ ssh localhost -p 9222

CLI 報告連接關閉。我在 syslog 中看不到任何內容來顯示問題所在。

鑑於隧道使用者沒有外殼,我應該期望隧道 ssh 工作嗎?在我寫這篇文章時,我想也許不是。我應該如何測試隧道?

問題

我究竟做錯了什麼??

有人可以試試這個並在我的中發布一組工作說明或錯誤。

如何測試具有受限使用者的隧道?

編輯

使用者隧道帳戶是在沒有密碼的情況下創建的。這導致使用 ssh 出現問題,因為隧道帳戶被報告為已鎖定。

鎖定帳戶的修復程序位於此連結

似乎創建一個沒有密碼的帳戶以試圖阻止密碼黑客攻擊(如果密碼不存在,則無法破解密碼),這是一個壞主意,並且會削弱安全性。

用於-N建立僅隧道連接

ssh -N -L 9222:localhost:222 tunnel@172.30.21.157 &

在不更改任何配置文件等的情況下,我嘗試了以下命令序列。這些命令建立了從模擬遠端機器到模擬本地防火牆機器的隧道。隧道入口是遠端機器上的埠 9222。

在遠端機器上的終端上:

$ ssh -L 9222:localhost:22 -N tunnel@172.30.21.157

在 IP 172.30.21.157 處建立通往防火牆的隧道。請注意,如果不包括 -N 選項,則連接會自動關閉。隧道使用者只存在於防火牆上,沒有密碼。隧道使用者在遠端機器上不存在。ssh 密鑰已提前交換,因此防火牆接受了與隧道使用者的連接。用於建構隧道的 ssh 命令保留在前台(僅用於測試)。輸入上述命令後,提示沒有出現。cntl-C只有在使用This is expected behavior關閉隧道後才會出現提示。

為了將遠端機器連接到防火牆 CLI,我在另一個終端的遠端機器上執行了以下命令。

$ sudo ssh -p 9222 fwuser@localhost

遠端電腦上的此命令與防火牆電腦上的 fwuser 帳戶在 localhost(遠端電腦)的埠 9222 建立 ssh 連接。這是問題中顯示的我的命令的根本原因問題。我沒有在失敗的命令中指定正確的使用者 (fwuser)。

ssh 認為它是在輸入命令的同一台機器上建立連接。它實際上是在連接到埠 9222 並通過隧道到達隧道另一端以 fwuser 身份登錄。我在遠端機器上執行一個終端,但我有防火牆機器的提示。

一旦隧道建成,隧道使用者對於流經隧道的流量實際上是不可見的。

總之,使用受限使用者,沒有 shell 訪問權限,在建構隧道時就像任何其他使用者一樣工作。交換 ssh 密鑰確實需要更多的努力。-N 選項在建構隧道的命令中是必不可少的。

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