Chrooted SFTP 使用者寫入權限
我有一個僅限 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
- 您不能讓名為“home”的使用者擁有主目錄
/home/home
- 您必須小心遍歷
/home
層次結構並遵循符號連結的腳本。
您需要在使用者的主目錄中創建一個結構,例如 in 和 out 目錄。這些目錄應該歸使用者所有,他可以在那裡放置和獲取文件。