RHEL / CentOS 7 安裝 SFTP


SFTP 是透過 SSH 連線作傳送檔案, 跟傳統的 FTP 不同, SFTP 傳送的內容都經過加密, 而且現在大多在 FTP 軟體都支援 SFTP.

如果系統已經開啟 SSH 伺服器, SFTP 已經內建好, 不需要額外安裝, 但跟 FTP 不同, 在預設的情況下, SSH 伺服器可以允許傳送檔案及使用指令模式。但有些情況是只想給帳號開放上傳/下載檔案, 但不開啟 SSH, 以下是在 RHEL 及 CentOS 7 的設定方法。

如果使用者帳號不存在, 先要建立新的使用者帳號, 以下帳號會設定成只可以用 SFTP, 但不能用 SSH, 以下建立 newuser 帳號:

/linux/adduser

  • $ sudo adduser newuser

給新帳號設定密碼:

/linux/passwd

  • $ sudo passwd newuser

建立一個新目錄, 用作給使用者上傳/下載檔案:

/linux/mkdir

  • $ sudo mkdir -p /var/sftp/uploads

給新建立的目錄設定權限, /var/sftp 的 owner 是 root, /var/sftp/uploads 的 owner 是新帳號:

/linux/chown-chmod

  • $ sudo chown root:root /var/sftp
    $ sudo chmod 755 /var/sftp
    $ sudo chown newuser:newuser /var/sftp/uploads

接著開啟 SSH 的設定檔:

/etc/ssh/sshd_config

  • $ 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

儲存後以上內容後離開文字編輯器。

最後重新啟動 SSH 伺服器設定才會生效:

/linux/restart-sshd

  • $ sudo systemctl restart sshd

現在新帳號只可以用 SFTP 傳送檔案, 但想登入 SSH 伺服器時, 便會出現以下錯誤:


This service allows sftp connections only.
Connection to localhost closed.

Leave a Reply