努力在已安裝的 HDD 上設置 SFTP 伺服器(client_loop:發送斷開連接:連接重置)
嘗試在已安裝的硬碟驅動器上設置 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
目錄本身必須歸根使用者所有。