sftp 是 Secure File Transfer Protocol 的縮寫,即安全文件傳送協議,可為傳輸文件提供一種安全的加密方法。
sftp 為 SSH 的一部分,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的 FTP 要低,如果對網絡安全性要求高,可使用 SFTP 代替 FTP。
因為安全需要,有時需要配置sshd以使得只允許sftp登錄,而同時不允許ssh直接登錄。
以下操作步驟在CentOS 7.6實際測試通過,可放心參考使用。
■ 添加用戶組sftpgroup
groupadd sftpgroup
■ 添加用戶sftpuser
useradd -g sftpgroup -d /home/sftp -s /sbin/nologin sftpuser
-s 指定不允許ssh登陸
■ 修改用戶密碼
passwd sftpuser
■ 配置sshd_config文件
vim /etc/ssh/sshd_config
增加或修改如下配置:
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /home/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Match Group sftpgroup 指定以下的子行配置是匹配 sftpgroup 用戶組的。Match user userA,userB 則是匹配用戶
ChrootDirectory /data/sftp/%u 設定用戶訪問的根文件夾。%h 代表用戶 home 目錄,%u 代表用戶名
ForceCommand internal-sftp 該行強制執行內部 sftp,並忽略任何 ~/.ssh/rc 文件中的命令
AllowTcpForwarding no 是否允許 TCP 轉發,默認值為 "yes"
X11Forwarding no 是否允許進行 X11 轉發,默認值是 "no"
■ 設置正確的目錄權限
要實現 Chroot 功能,目錄權限設置非常重要,否則無法登錄,給出的錯誤提示也很奇怪,難以排查、修正,導致踩坑半天,浪費很多時間!
以下為最佳設置實踐,務必以此為准!
chown root:sftpgroup /home/sftp
chmod 755 /home/sftp
可以看到,ChrootDirectory的目錄屬主必須為root,屬組必須為sftpgroup,其他用戶或用戶組為"只讀+執行"
■ 重啟sshd服務
systemctl restart sshd
■ 此時可以sftp登錄
[root@node1:1 /home]# sftp sftpuser@node1
sftpuser@node1's password:
Connected to node1.
sftp> ls
sftp>
sftp>
sftp> pwd
Remote working directory: /
此時可以在sftp的根目錄下建立指定用戶的讀寫目錄,即可正常使用sftp了,以下操作可參考。
sftp> mkdir test
Couldn't create directory: Permission denied
sftp> exit
[root@node1:1 /home]# cd /home/sftp
[root@node1:1 /home/sftp]# mkdir upload
[root@node1:1 /home/sftp]# chown -R sftpuser:sftpgroup upload
[root@node1:1 /home/sftp]# chmod -R 700 upload
[root@node1:1 /home/sftp]# ll
總用量 0
drwx------ 2 sftpuser sftpgroup 6 12月 22 10:55 upload
[root@node1:1 /home/sftp]# sftp sftpuser@node1
sftpuser@node1's password:
Connected to node1.
sftp> pwd
Remote working directory: /
sftp> cd upload
sftp> mkdir test
sftp> ls
test
作者后注:
網上搜到好幾個類似的文章,都不能直接參考使用,再次驗證了網文水平的參差不齊,真是讓人頭疼,浪費大家的時間。所以建議大家發出來的網文,一定要保證是確實可參考使用的,否則只會讓人瞧不起 😃