在 Linux 上建立一個 SFTP Server

Ray Lee | 李宗叡
Learn or Die
Published in
Nov 9, 2019

My Blog

English version

前言

本篇記錄如何在 Linux 上建立一個 SFTP Server, 需滿足以下幾點條件:

  • 使用者不可經由 SSH 登入
  • 使用者經由 SFTP 登入
  • 使用者只可在指定目錄活動
  • 使用者上傳下載指定目錄內的檔案

環境

GCP Ubuntu 18.04 以下操作皆默認 root 操作, 請在前面加上 sudo 如果你不是使用 root 操作

建立 SFTP 群組

  • 建立 group
  • 確認 group 有正確被建立

建立 SFTP 使用者

  • 建立使用者

-g: 預設 group -d: 預設家目錄 -s: 預設 shell, nologin shell 一般用於系統帳號, 表示不可經由 ssh 登入

  • 確認使用者有正確被建立
  • 如果使用者早已建立, 可直接更改使用者設定即可

SSH 設定

  • 打開 SSH 設定檔
  • 複製 Subsystem 以作修改用, 並註解原本的
  • 指定群組根目錄
  • ChrootDirectory: 設定該群組根目錄
  • %u: user 的意思, 所以任何該群組下的 user 登入之後的根目錄就會變成 user 的名稱, 以這個例子來看, 根目錄就是 /home/sftp-users/test
  • ForceCommand: 強制使用 internal-sftp
  • 以上 Match 的設定, 請置於檔案的最末處, 否則會有語法錯誤。

上傳下載資料夾建立

  • 建立使用者上傳下載用資料夾

-d: 類型為資料夾 -o: owner -g: group

使用者只能在這個剛剛建立的 upload 資料夾裡頭, 才有權限上傳跟下載。 根據 SSH 安全規則, chrootDirectory 的 owner 必須是 root 才行, 且權限只有 root 才可以有 w 的權限, 如果這邊沒有設定為 root, 使用者是無法登入的

大功告成

請不吝你的掌聲

如果覺得本文寫得不錯, 或是有幫到你的地方, 掌聲不用錢, 但是對我來說是很大的鼓勵!

普通: 拍個 10 下意思意思!
還可以: 拍個 20 下交代交代!
不錯誒: 稍微有感情的 30 下!
很好: 真誠的 40 下!
棒透了: 瘋狂的 50 下連擊!

小技巧: 按著不放就可以連拍哦, 輕鬆愜意~

Write Medium in Markdown? Try Markdium!

--

--

Ray Lee | 李宗叡
Learn or Die

It's Ray. I do both backend and frontend, but more focus on backend. I like coding, and would like to see the whole picture of a product.