2018年10月8日 星期一

在CentOS 7上設立SFTP server

想必大家都有聽過FTP (File Transfer Protocol),能讓你像檔案總管一樣瀏覽伺服器上面放置的檔案。但FTP本身是個純文字的協議,並沒有任何加密功能,所以傳送的內容很容易會被人輕易看到。而FTPS則是FTP的延伸,幫FTP加了一層TLS/SSL加密,不過本身需要開多個port分別負責驗證、傳送檔案等不同的功能。

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/

沒有留言:

張貼留言