如何允許 SSH 進入 Linux 伺服器,但不允許從 Linux 伺服器傳輸檔案?

如何允許 SSH 進入 Linux 伺服器,但不允許從 Linux 伺服器傳輸檔案?

我有一個 Linux 伺服器(Ubuntu 16.04),我在其中運行一些模擬。我想授予員工訪問此伺服器的權限,以便他可以測試他的程式碼(他將從他的個人電腦遠端存取它),但不允許他從伺服器下載任何檔案到他的系統上。

這些文件非常大(多個 GB),所以我不擔心他將文件的全部內容手動複製並貼上到他的電腦中。

那麼我該如何允許他進行 SSH 訪問,但不允許他進行 SCP/WinSCP 訪問呢?

答案1

我不確定如果他們真的想移走數據你可以這樣做。您也許能夠阻止運行scpsftp,但這仍然留下許多其他傳輸文件的方式。

首先,真正簡單的文件傳輸協定是這樣的:

ssh user@hostname 'cat /some/remote/file' > /some/local/path

你可以cat用幾乎任何程式來替換,哎呀,甚至cp somefile /dev/stdout看起來可行。

評論中提出了在特定時間或傳輸特定資料量後斷開會話的建議。如果您也限制使用者可以建立的連線數量,那麼從表面上看這似乎是有效的。每天允許 10 個連接,每個連接限制為 1 MB,這將限制它們僅移動 10 MB。如果正常的預期用途需要比不需要的場景少得多的資料傳輸,那麼也許可以使類似的東西起作用。

但如果他們只是將文件發送到其他地方怎麼辦?在其他地方設定 SSH/FTP/任何伺服器並透過該伺服器發送檔案應該很容易。或透過 HTTP(S),至少有和 之curl類的選項,並且設定伺服器端應該不難。如果刪除已經存在的工具,如果它們在系統上運行的程式在/而不是處理資料時將資料發送出去怎麼辦?--data @filename--upload-file


您需要做的是限制有權存取資料的程式可以使用某種沙箱執行的操作。

安排程式碼在無法存取外部的虛擬機器中運行,除了用於上傳程式碼和下載結果的某些介面之外,並對哪些內容被接受為有效上傳和有效結果進行適當的控制。或使用類似的東西seccomp限製程式碼可以執行的操作。

答案2

您可以將 /etc/ssh/sshd_config 編輯為以下內容

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

並從伺服器中刪除 scp 並刪除對其帳戶的 sudo 存取權限。您可以根據需要重新新增 scp。

布萊德和麥克的回答來自https://serverfault.com/questions/28858/is-it-possible-to-prevent-scp-while-still-allowing-ssh-access

相關內容