SFTP則是另一套完全不同的傳輸協議。它的作用雖然和FTP一樣能讓你瀏覽伺服器上的檔案,但技術上的協議內容運作模式完全不一樣(使用了更加節省bandwidth的binary protocol),因此一個程式支援FTP或FTPS不代表它支援SFTP。由於SFTP是經SSH(兩部電腦之間加密通訊的協議,一般用於遠端控制Linux主機)運行的,所以我比較喜歡以SSH File Transfer Protocol作為SFTP的全名,更能反映SFTP的特性。
如果想要設立SFTP伺服器的話,建議在Linux上設立,因為Windows對於SSH的支援比較差,一般需要安裝額外軟件,連帶一堆麻煩的設定,而Linux則對SSH和SFTP均有原生的支援,一般來說不必安裝額外軟件,只要小心設定便可。
這次我們以CentOs 7作例子安裝SFTP伺服器。一般來說CentOs 7安裝的時候會自動帶有SSH功能,如果不肯定可以用以下Command檢查一下:
rpm -qa|grep ssh
(-qa代表query all,列出所有已安裝的package,grep ssh則是列出帶有ssh這三個字的package)
看到有libssh2、opeenssh(包括server和clients)基本上就沒問題了。
接下來我們會建立一個只能存取SFTP的user:(記得把myusername改成自己想要的賬戶名稱。)
groupadd sftpusers useradd -g sftpusers -d /upload -s /sbin/nologin myusername passwd myusername
(-g sftpusers代表把user加到這個sftpusers群組內)
(-d /upload代表設立user的main directory為/upload)
(-s /sbin/nologin代表把user加進nologin這個shell,讓他無法登入這部電腦,確保只能存取SFTP)
然後我們可以建立這個user專用的資料夾,並設定權限:(同樣記得把myusername改成自己想要的賬戶名稱)
mkdir -p /data/mysftpuser/upload chown -R root:sftpusers /data/myusername chown -R mysftpuser:sftpusers /data/myusername/upload
最後,在/etc/ssh/sshd_config這個設定檔下新增一些設定:
Match Group sftpusers ChrootDirectory /data/%u ForceCommand internal-sftp
(Match Group sftpusers代表下方的設定套用到sftpusers群組身上)
(ChrootDirectory代表更改user的root directory,讓他只能使用我們指定的目錄)
(ForceCommand internal-sftp代表啟用SFTP subsystem)
最後重啟SSH:
service sshd restart
安裝完成,你可以直接試試打sftp來試試連接自己電腦的SFTP server,或者用FileZilla之類的SFTP client軟件來連接。
參考資料:
https://www.howtoforge.com/tutorial/how-to-setup-an-sftp-server-on-centos/
沒有留言:
張貼留言