
嘗試在已安裝的硬碟上設定 SFTP 伺服器,並遵循大量教學課程中的說明,在登入時始終收到「client_loop:傳送斷開連線:連線重設」。
我首先建立一個名為 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
我不知道這是權限問題還是所有權問題。我在這方面花了很長時間,似乎無法弄清楚,所以任何幫助將不勝感激。
答案1
ChrootDirectory /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chown -R USERNAME:sftp /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chmod -R 777 /media
“ChrootDirectory”功能要求 chroot 目錄及其父目錄具有某些所有權和權限:
Chroot目錄
指定身份驗證後 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
目錄本身必須由root擁有。