SFTP 是透過 SSH 連線作傳送檔案, 跟傳統的 FTP 不同, SFTP 傳送的內容都經過加密, 而且現在大多在 FTP 軟體都支援 SFTP.
如果系統已經開啟 SSH 伺服器, SFTP 已經內建好, 不需要額外安裝, 但跟 FTP 不同, 在預設的情況下, SSH 伺服器可以允許傳送檔案及使用指令模式。但有些情況是只想給帳號開放上傳/下載檔案, 但不開啟 SSH, 以下是在 RHEL 及 CentOS 7 的設定方法。
如果使用者帳號不存在, 先要建立新的使用者帳號, 以下帳號會設定成只可以用 SFTP, 但不能用 SSH, 以下建立 newuser 帳號:
- $ sudo adduser newuser
給新帳號設定密碼:
- $ sudo passwd newuser
建立一個新目錄, 用作給使用者上傳/下載檔案:
- $ sudo mkdir -p /var/sftp/uploads
給新建立的目錄設定權限, /var/sftp 的 owner 是 root, /var/sftp/uploads 的 owner 是新帳號:
-
$ sudo chown root:root /var/sftp
$ sudo chmod 755 /var/sftp
$ sudo chown newuser:newuser /var/sftp/uploads
接著開啟 SSH 的設定檔:
- $ sudo vi /etc/ssh/sshd_config
在 /etc/ssh/sshd_config 加入以下內容:
Match User newuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
儲存後以上內容後離開文字編輯器。
最後重新啟動 SSH 伺服器設定才會生效:
- $ sudo systemctl restart sshd
現在新帳號只可以用 SFTP 傳送檔案, 但想登入 SSH 伺服器時, 便會出現以下錯誤:
This service allows sftp connections only.
Connection to localhost closed.