SFTP 安裝與配置


SFTP 安裝與配置

sftp 是 Secure File Transfer Protocol 的縮寫,安全文件傳送協議。可以為傳輸文件提供一種安全的加密方法。SFTP 為 SSH 的一部分,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的 FTP 要低得多,如果您對網絡安全性要求更高時,可以使用 SFTP 代替 FTP。

一、sftp 搭建

(1) 創建 sftp 組

groupadd sftp
# -g 用戶組; -d 指定家目錄; -s 不登陸; -M 不創建家目錄 
useradd -g sftp -d /data/sftp/sftpuser -s /sbin/nologin sftpuser
echo 123456 | passwd --stdin sftpuser

(2) 修改 sshd_config 配置

vim /etc/ssh/sshd_config

#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp

# 下面兩項是與安全有關
AllowTcpForwarding no
X11Forwarding no
  • Match Group sftp 這一行是指定以下的子行配置是匹配 sftp 用戶組的。Match user userA,userB 則是匹配用戶。
  • ChrootDirectory /data/sftp/%u 設定屬於用戶組 sftp 的用戶訪問的根文件夾。%h 代表用戶 home 目錄,%u 代表用戶名。
  • ForceCommand internal-sftp 該行強制執行內部 sftp,並忽略任何 ~/.ssh/rc 文件中的命令。
  • AllowTcpForwarding no 是否允許 TCP 轉發,默認值為 "yes", 禁止 TCP 轉發並不能增強安全性,除非禁止了用戶對 shell 的訪問,因為用戶可以安裝他們自己的轉發器。
  • X11Forwarding no 是否允許進行 X11 轉發。默認值是 "no",設為 "yes" 表示允許。如果允許 X11 轉發並且 sshd(8)代理的顯示區被配置為在含有通配符的地址(X11UseLocalhost)上監聽。那么將可能有額外的信息被泄漏。由於使用 X11 轉發的可能帶來的風險,此指令默認值為"no"。需要注意的是,禁止 X11 轉發並不能禁止用戶轉發 X11 通信,因為用戶可以安裝他們自己的轉發器。

(3) 權限設置

要實現 Chroot 功能, 目錄權限的設置非常重要 。否則無法登錄,給出的錯誤提示也讓人摸不着頭腦,無從查起。我在這上面浪費了很多時間。

ChrootDirectory:定義了用戶通過認證以后的 chroot 目錄,此目錄及其所有子目錄的屬主必須是 root,且這些目錄只有 root 帳號可以進行寫操作,其他任何組和帳號都不可寫。chroot 以后,sshd 會將用戶的工作目錄轉到 chroot 目錄中用戶自己的主目錄。如果 ChrootDirectory 定義的目錄下沒有相應的 /home/username 目錄,則會直接轉到 chroot 的 / 目錄下。

chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

目錄權限設置上要遵循2點:

  • ChrootDirectory 設置的目錄權限及其所有的上級文件夾權限,屬主和屬組必須是 root;
  • ChrootDirectory 設置的目錄權限及其所有的上級文件夾權限,只有屬主能擁有寫權限,權限最大設置只能是 755。

(4) 建立 SFTP 用戶可寫目錄

由於 /data/sftp/sftpuser 的用戶是 root,其它用戶都沒有寫的權限,所有要有該目錄下新建一個目錄用於文件的上傳下載。

mkdir -p /data/sftp/sftpuser/upload
chown sftpuser:sftp /data/sftp/sftpuser/upload
chmod 755 /data/sftp/sftpuser/upload

(5) 測試

sftp -P2022 sftpuser@172.16.16.126
sftp> pwd
Remote working directory: /upload
sftp> lls
1  anaconda-ks.cfg  zookeeper.out
sftp> put anaconda-ks.cfg 
Uploading anaconda-ks.cfg to /upload/anaconda-ks.cfg
anaconda-ks.cfg                                         100% 1839    39.4KB/s   00:00    

二、SFTP 配置

2.1 MaxStartups 1000:30:3000

同時允許幾個尚未登入的聯機畫面,所謂聯機畫面就是在你 ssh 登錄的時候,沒有輸入密碼的階段

MaxStartups 10:30:100    # start:rate:full
  • start:表示未完成認證的連接數
  • rate:當未完成認證的連接數超過 start 時,rate/100 表示新發起的連接有多大的概率被拒絕連接。
  • full:如果未完成認證的連接數達到 full,則新發起的連接全部拒絕。

查看 sshd 配置參數:

sshd -T | grep -i startup

2.2 maxsessions 1000

同一地址的最大連接數,也就是同一個 IP 地址最大可以保持多少個鏈接。

如下以上兩個參數配置不正確,可能出現如下錯誤:

ssh_exchange_identification: Connection closed by remote host

《SSH 服務的幾個超時參數配置》: https://yq.aliyun.com/articles/57903?spm=5176.11156381.0.0.68684403ani1fa

三、踩過的坑

問題 1: Couldn't read packet: Connection reset by peer

sftp 輸入密碼后報錯:

[root@sdw1 ~]# sftp sftpuser@sdw1
sftpuser@sdw1's password: 
packet_write_wait: Connection to 192.168.2.111 port 22: Broken pipe
Couldn't read packet: Connection reset by peer
[root@sdw1 ~]# sftp sftpuser@sdw1
sftpuser@sdw1's password: 
Connected to sdw1.

原因:/data/sftp/sftpuser(ChrootDirectory) 的用戶必須為 root,參考 sftp 安裝 (3)

chown root:sftp /data/sftp/sftpuser

問題 2: remote readdir("/"): Permission denied

sftp 登陸成功后,沒有讀的權限

sftp> ls
remote readdir("/"): Permission denied

原因:/data/sftp/sftpuser(ChrootDirectory) 組 sftp 必須要有讀的權限,參考 sftp 安裝 (3)

chmod 755 /data/sftp/sftpuser

每天用心記錄一點點。內容也許不重要,但習慣很重要!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM