架設網站伺服器須知 - 如何限制 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