Permissions

為 SFTP 使用者配置 Chroot

  • January 6, 2015

我正在嘗試為一些自動備份配置 SFTP 伺服器。我配置了一個 Ubuntu 14.04 伺服器並取得了部分成功。我想做的想法是這樣的:

  1. 將為每個要備份的特定係統創建一個使用者。僅限 SFTP。
  2. 使用者將被 Chroot,並且無法在其主目錄之外讀取或寫入。
  3. 登錄後,使用者的家將成為“根”。
  4. 使用者將能夠將文件上傳到根目錄。(這就是我卡住的地方。)

我使用以下程式碼片段在 sshd_config 中創建 Chroot,如下所示:

Match Group sftpbackup
  ChrootDirectory /srv/sftpbackup/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

然後我根據要求設置 /srv/sftpbackup 的權限。

# ls -l
total 4
drwxr-x--- 3 root sftpbackup 4096 Jan  5 15:29 user1
# 

現在,使用者可以登錄但不能上傳文件(權限被拒絕)。如果我將目錄所有權更改為如下所示:

# ls -l
total 4
drwxrwx--- 3 user1 sftpbackup 4096 Jan  5 15:29 user1
# 

然後使用者無法登錄,從 auth.log:

sshd[14835]: fatal: bad ownership or modes for chroot directory "/srv/sftpbackup/user1"

看起來,如果使用者的主目錄是 SFTP chroot,則 root 必須擁有該目錄,因此必須創建一個子目錄以便使用者可以寫入它。

無論如何使根可寫?查看各種網站,似乎沒有辦法實現我想要的。我不太明白讓使用者可寫 chroot 目錄和讓子目錄可寫之間有什麼區別。見解將不勝感激。

注意:我的目標是創建一個可以由各種設備儲存備份的伺服器。這些設備將由第三方供應商配置,因此我試圖讓事情變得簡單(每個設備一個使用者名,一旦登錄,所有文件都會轉到“root”)和安全(創建的使用者將擁有最少伺服器的權利)盡可能。如果我的慾望有點僵硬,請道歉。

internal-sftp 要求 chrooted 使用者主目錄駐留在 root 擁有的目錄中:

/some/path/root-owned/user-dir1
                    /user-dir2

根擁有的目錄應具有 555 權限,使用者目錄應由根創建並由特定使用者擁有。在 subdirs 內使用者可以做任何事情,但他不能刪除或重命名 user-dir

$$ 12 $$. 這是 internal-sftp 限制。

引用自:https://serverfault.com/questions/656753