Linux

努力在已安裝的 HDD 上設置 SFTP 伺服器(client_loop:發送斷開連接:連接重置)

  • May 24, 2021

嘗試在已安裝的硬碟驅動器上設置 SFTP 伺服器,並按照一堆教程中的說明進行操作,登錄時總是得到“client_loop: send disconnect: Connection reset”。

我首先創建了一個名為 sftp 的組,然後將使用者分配到該組,並將其主目錄放在 HDD 中:

sudo useradd -g sftp -d /media/linux/MyHDD/NAS/USERNAME -s /sbin/nologin USERNAME-nas

sudo passwd USERNAME

其中 USERNAME 是我的個人使用者名

然後,我嘗試將 USERNAME 文件夾上方所有內容的所有權設置為 root,將 USERNAME 文件夾的所有權設置為使用者:

sudo chown -R root:root /media

sudo chown -R USERNAME:sftp /media/linux/MyHDD/NAS/USERNAME

編輯 sshd_config 文件以包含:

Subsystem sftp internal-sftp

Match Group sftp
ChrootDirectory /media/linux/MyHDD/NAS/USERNAME
ForceCommand internal-sftp
AllowTcpForwarding no
X11 Forwarding no

不要忘記重啟 sshd 服務

sudo systemctl restart sshd

因為我想在我的 linux 電腦上訪問這個文件夾,所以我將媒體文件夾的權限設置為 777

sudo chmod -R 777 /media

完成所有這些操作後,當嘗試登錄 sftp 並輸入密碼時,我會收到以下問候:

sftp -P PORTNO USERNAME@IP

client_loop: send disconnect: Connection reset
Connection closed

這是權限問題,還是可能是所有權問題,我不知道。我在這方面花了很長時間,似乎無法弄清楚,所以任何幫助將不勝感激。

ChrootDirectory /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chown -R USERNAME:sftp /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chmod -R 777 /media

“ChrootDirectory”功能要求 chroot 目錄及其父目錄具有一定的所有權和權限

ChrootDirectory

指定 chroot(2) 認證後的目錄路徑名。在會話啟動時 sshd(8) 會檢查路徑名的所有組件是否都是 root 擁有的目錄,任何其他使用者或組都不能寫入這些目錄。在 chroot 之後,sshd(8) 將工作目錄更改為使用者的主目錄。ChrootDirectory 的參數接受在 TOKENS 部分中描述的令牌。

設置 chroot 目錄的方式有兩個問題:

首先,/media,/media/linux/MyHDD/NAS/USERNAME和中間的所有目錄都不能是全域或組可寫的。它們需要是模式 755 而不是 777。

其次,/media/linux/MyHDD/NAS/USERNAME它本身必須由 root 擁有。其中的目錄和文件可以歸使用者所有,但USERNAME目錄本身必須歸根使用者所有。

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