Linux

如何在不重新載入服務的情況下暫時禁用 sftp?

  • May 29, 2017

我已經設置了一個 chroot 使用者,該使用者只能通過 sshd 的 sftp 訪問 1 個目錄,以便我的一位同事可以上傳某些類型的文件。然後,我將設法通過 HTTP 觸發命令,該命令將在文件上執行一個長程序,並且我需要在程序執行時禁用 sftp。

有沒有可以用來禁用 sftp 的命令,而無需更改 sshd_config 文件並重新載入服務?我正在考慮進行埠阻塞,但我仍然需要訪問 ssh。

我閱讀了有關使用 禁用使用者帳戶的資訊passwd -l,但如果它已經通過 sftp 登錄,它仍然允許修改。

有什麼建議麼?

編輯:

經過更多的嘗試後,我發現我可以ps -axl | grep $user@notty發送一個kill -9到 PID 以斷開使用者與目前會話的連接,然後要麼passwd -l username阻止使用者再次登錄,要麼按照 Martin 的建議刪除到 sftp-server 二進製文件的符號連結.

但最後我接受了 Mike 的建議,只是將文件移到了其他地方,而不是在 chroot 目錄中執行該程序。

您可以暫時刪除對該文件夾的寫入權限。


如果要完全禁用 SFTP,可以創建sftp-server二進制符號連結。並將使用者配置為將該符號連結用作 SFTP 二進製文件。然後你可以暫時刪除符號連結,這將有效地禁用 SFTP。

Match User theuser
   ForceCommand /path/to/sftp/symlink

請注意,在系統範圍內禁用 sftp 可能是不理想的,因為 sftp 對所有其他可能的任務(使用目前設計和未來設計)完全不可用。更好的設計(保持長期的靈活性)可能是控制某些數據的“寫入”權限(正如Martin Prikryl 更好的多解決方案答案的第一個解決方案所指出的那樣)。

我選擇不複製(或嘗試完成)Martin Prikryl 更好的多解決方案答案,它不涉及更改 sshd_config 文件或重新載入服務。

但是,為了教育/熟悉,我將分享另一種選擇。

無需更改 sshd_config 文件並重新載入服務?

您可以更改 sshd_config 文件,但不能重新載入服務。(因此,根據要求,您不會同時做這兩個。)

然後向父 sshd 服務發送 SIGHUP。(確保它是父程序:SIGHUPping 另一個 sshd 服務可能會終止連接。)辨識哪個程序是父程序的簡單方法可能是使用 PID 文件。

例如,如果 sshd 正在製作這個 pid 文件:

sudo kill -HUP $( sudo cat /var/run/sshd.pid )

(PID 文件的預設名稱/位置可能因作業系統而異。)

SIGHUPping 父級將導致 sshd 重新載入配置文件(因為這就是 sshd 的設計方式)。請注意,這可能不會停止任何目前正在執行的 sftp 會話(並且修改磁碟上的二進製文件也可能不會這樣做),因此請確保在您進入敏感的 can’t-have-sftp-running 程序之前已對其進行了處理。

引用自:https://serverfault.com/questions/852858