Linux

Chrooted SFTP 使用者寫入權限

  • January 10, 2019

我有一個僅限 sftp 使用者的設置:

Match Group sftponly
   ChrootDirectory %h
   ForceCommand internal-sftp
   AllowTcpForwarding no

我在secure.log 中收到以下消息:

fatal: bad ownership or modes for chroot directory

使用 match 關鍵字會帶來一些安全性…目錄需要由 root 擁有,並且目錄需要 chmod 755 (drwxr-xr-x)。因此,如果由於 ssh 的安全性而僅對使用者 root 可寫並設置為對組不可寫,則使用者不可能對文件夾具有寫權限。

有人知道一個好的工作嗎?

我們最近發現了一種解決方法,如下所示:

/etc/ssh/sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
   ChrootDirectory /home
   AllowTCPForwarding no
   X11Forwarding no
   ForceCommand internal-sftp

目錄權限:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

現在/home滿足限制使用者的要求ChrootDirectory並且不能被限制使用者列出,但是sftponly如果他們的主目錄像往常一樣設置()使用者將無法登錄/home/$LOGNAME:在chrooted環境下他們的主目錄不在裡面/home而是直接在下面根 ( /)。

解決方法 1

將受限使用者的首頁設置為它們在 chroot 下的顯示方式:

root@server:~ # usermod -d /username username

警告 1

如果任何不受限制的使用者或某些管理腳本使用 bash 的波浪號擴展,就像~username它會擴展到/username現在一樣,這不是這個意思。

此外,創建sftponly使用者的管理員必須記住使用非預設首頁。可以用腳本解決。管理員必須記住使用它。

解決方法 2

這是我們最終使用的前一個的替代方案:

root@server:~ # ln -s . /home/home

/home那就是在自己的目錄名中創建一個符號連結。現在在 chroot 下/home/username指向與沒有 chroot 相同的目錄。對於使用 sftp 登錄的受限使用者,它將顯示為/username. 該目錄對其所有者(受限使用者)是可寫的。受限使用者不能按名稱列出任何兄弟姐妹的父目錄或主目錄。

使用者唯一的特別之處sftponly在於它對組的參與sftponly。我們發現它比解決方法 1 更容易處理。

警告 2

  1. 您不能讓名為“home”的使用者擁有主目錄/home/home
  2. 您必須小心遍歷/home層次結構並遵循符號連結的腳本。

您需要在使用者的主目錄中創建一個結構,例如 in 和 out 目錄。這些目錄應該歸使用者所有,他可以在那裡放置和獲取文件。

引用自:https://unix.stackexchange.com/questions/147676