前言
本篇記錄如何在 Linux 上建立一個 SFTP Server, 需滿足以下幾點條件:
- 使用者不可經由 SSH 登入
- 使用者可經由 SFTP 登入
- 使用者只可在指定目錄活動
- 使用者可上傳下載指定目錄內的檔案
環境
GCP Ubuntu 18.04
以下操作皆默認 root 操作, 請在前面加上 sudo 如果你不是使用 root 操作
建立 SFTP 群組
- 建立 group - group add sftp-users 
- 確認 group 有正確被建立 - grep 'sftp-users' /etc/group
建立 SFTP 使用者
- 建立使用者 - useradd -g sftp-users -d /upload -s /sbin/nologin test- -g: 預設 group- -d: 預設家目錄- -s: 預設 shell, nologin shell 一般用於系統帳號, 表示不可經由 ssh 登入
- 確認使用者有正確被建立 - grep test /etc/passwd
- 如果使用者早已建立, 可直接更改使用者設定即可 - usermod -g sftp-users -d /upload -s /sbin/nologin test
SSH 設定
- 打開 SSH 設定檔 - vim /etc/ssh/sshd_config 
- 複製 Subsystem 以作修改用, 並註解原本的 - # Subsystem sftp /usr/lib/openssh/sftp-server
 Subsystem sftp internal-sftp
- 指定群組根目錄 - Match Group sftp-users 
 ChrootDirectory /home/sftp-users/%u
 ForceCommand internal-sftp
- ChrootDirectory: 設定該群組根目錄
- %u: user 的意思, 所以任何該群組下的 user 登入之後的根目錄就會變成 user 的名稱, 以這個例子來看, 根目錄就是 /home/sftp-users/test
- ForceCommand: 強制使用 internal-sftp
- 以上 - Match的設定, 請置於檔案的最末處, 否則會有語法錯誤。
上傳下載資料夾建立
- 建立使用者上傳下載用資料夾install -d -o test -g sftp-users /home/sftp-users/test/upload-d: 類型為資料夾-o: owner-g: group
使用者只能在這個剛剛建立的 upload 資料夾裡頭, 才有權限上傳跟下載。
根據 SSH 安全規則, chrootDirectory 的 owner 必須是 root 才行, 且權限只有 root 才可以有 w 的權限, 如果這邊沒有設定為 root, 使用者是無法登入的
留言