Development Log

Back →

2020-04-23 後端工程師 Silver Chen 架設網站伺服器須知 - 如何限制 SFTP 的登入位置

SFTP是甚麼,跟FTP一樣嗎?

SFTP(Secure File Transfer Protocol)基本語法和FTP差不多。SFTP是SSH的一部分,在SSH軟體包中,已經包含了SFTP的安全文件傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(Port 默認是22)來完成相應的連接操作(FTP 使用的 Port 為 21);由於這種傳輸方式使用了加密/解密技術,文件傳送相對來說是很安全的,但是它的傳輸效率比FTP要低得多。

要如何設定SFTP登入的資料夾?

SFTP可以針對使用者或是群組進行限制,這邊兩種都會進行說明。

 

1. 那首先我們先來創立一個群組 userGroup 跟使用者 userName 當作範例

groupadd userGroup -g 1000

useradd userName -u 1000 -g 1000 -d /home/userName

 

2. 現在有兩種選擇,一是讓ftp使用者ftp進入後為家目錄,或者為其他任何一個目錄,先介紹家目錄,我們首先要把 /home/userName 的許可權屬主設定為 root:userGroup ,換句話說就是使用者SFTP登入後的根目錄所在目錄,和這個目錄所有的上層目錄,其所屬主必須是root,/home 的許可權至少應為755,當然linux系統預設就是這個。

然後 /home/userName 預設情況下 userName:userGroup ,許可權為700,現在應該改為 root:userGroup 許可權755

chown root:userGroup /home/userName

chmod 755 /home/userName

 

3. 修改 sshd_config 的值,通常sshd_config 的位置會在 /etc/ssh/sshd_config

vi /etc/ssh/sshd_config

 

進入後需要將下面這一行字註解,不然無法啟動 sshd 的功能

Subsystem sftp    /usr/libexec/openssh/sftp-server

 

然後在下面加入這幾行,可以針對使用者登入位置進行設定

Match User userName

    ChrootDirectory /home/userName/

    ForceCommand internal-sftp

    AllowTcpForwarding no

    X11Forwarding no

 

或是加入以下幾行,針對群組的用戶登入位置進行設定

Match Group userGroup

    ChrootDirectory /home/userName/

    ForceCommand internal-sftp

    AllowTcpForwarding no

    X11Forwarding no

 

ChootDirectory 就是使用者能進入的資料夾了,那是不是設定讓使用者使用 /home 以外的資料夾,答案是可以的,但記得,設定的資料夾所有上層的目錄所屬都要設定成 root ,不然就會碰到sftp連線馬上被關閉的情況。

 

4. 修改完後記得重啟 sshd

systemctl reload sshd


Customer Service

Customer Service

LINE Contact