1. 認證失敗
原因:用戶密碼錯誤,或用戶未被添加到SFTP專用組(如sftp_users
)。
解決方法:① 確認用戶密碼正確性(可通過passwd
命令重置密碼);② 將用戶添加到sftp_users
組(sudo usermod -aG sftp_users 用戶名
);③ 檢查用戶是否屬于正確組(groups 用戶名
)。
2. 權限不足
原因:用戶家目錄或上傳目錄權限設置不當(如家目錄被其他用戶寫入,或上傳目錄所有者錯誤)。
解決方法:① 設置家目錄權限為755
,所有者為用戶自身(sudo chown 用戶名:用戶名 /home/用戶名
;sudo chmod 755 /home/用戶名
);② 若存在單獨上傳目錄(如/home/用戶名/uploads
),設置所有者為用戶,權限為775
(sudo chown 用戶名:用戶名 /home/用戶名/uploads
;sudo chmod 775 /home/用戶名/uploads
)。
3. 配置文件路徑錯誤
原因:sshd_config
中指定的sftp-server
路徑與實際路徑不符(如系統版本不同導致路徑變化)。
解決方法:① 使用find
命令查找實際路徑(sudo find / -name sftp-server
);② 修改sshd_config
中的Subsystem sftp
行為正確路徑(如Subsystem sftp /usr/lib/openssh/sftp-server
或Subsystem sftp internal-sftp
)。
4. SSH服務未運行或未重啟
原因:修改sshd_config
后未重啟服務,或SSH服務未啟動。
解決方法:① 啟動/重啟SSH服務(sudo systemctl restart ssh
或sudo systemctl restart sshd
);② 檢查服務狀態(sudo systemctl status ssh
),確認服務處于active (running)
狀態。
5. 防火墻/SELinux/AppArmor限制
原因:防火墻阻止SFTP端口(默認22),或SELinux/AppArmor限制SFTP訪問。
解決方法:① 開放防火墻端口(sudo ufw allow 22/tcp
;sudo firewall-cmd --permanent --add-port=22/tcp
;sudo firewall-cmd --reload
);② 臨時禁用SELinux測試(sudo setenforce 0
),若解決問題則調整SELinux策略;③ 檢查AppArmor日志(/var/log/syslog
或/var/log/audit/audit.log
),調整相關 profile 允許SFTP訪問。
6. Chroot目錄配置錯誤
原因:ChrootDirectory
設置不當(如目錄權限為777
,或所有者非root)。
解決方法:① 確保ChrootDirectory
(如%h
或/home/用戶名
)的所有者為root(sudo chown root:root /home/用戶名
);② 設置目錄權限為755
(sudo chmod 755 /home/用戶名
);③ 避免在ChrootDirectory
下存放用戶可寫的文件(上傳目錄需在ChrootDirectory
外或單獨設置權限)。
7. 日志分析困難
原因:未查看系統日志,無法定位具體錯誤原因。
解決方法:① 使用journalctl
查看SSH日志(sudo journalctl -u ssh
);② 查看/var/log/auth.log
(Debian默認認證日志),根據錯誤信息(如“Permission denied”“Invalid user”)針對性解決。