結合不同的 ftp 目錄 chmod 設置,是什麼解釋了這種 sftp 登錄成功/失敗行為?
如果我開始 -
sudo groupadd test_group sudo useradd -g test_group -s /sbin/nologin test_user sudo passwd test_user ...(some password)... sudo mkdir -p /testdir/dev
我也有 ‘/etc/ssh/sshd_config’ 如下 -
Include /etc/ssh/sshd_config.d/*.conf ChallengeResponseAuthentication no UsePAM yes X11Forwarding no PrintMotd no AcceptEnv LANG LC_* Subsystem sftp internal-sftp Match User test_user ChrootDirectory /testdir PermitTunnel no ForceCommand internal-sftp -d /dev X11Forwarding no AllowTcpForwarding no
也沒有任何“iptables”規則,然後我可以成功地從另一台機器進行 SFTP 連接(在這種情況下,它是一台 windows pc,使用 filezilla),指定“test_user”使用者名和密碼,它會顯示並限制我僅到 /testdir/dev 目錄的內容。
但是,我注意到 SFTP 會話僅列出目錄內容;它沒有實際發送/寫入文件的權限。即我有 -
drwxr-xr-x root root ... /testdir drwxr-xr-x root root ... /testdir/dev
很公平。所以現在我想加強所有權和權限,以便我的“test_user”可以在“/testdir”下讀寫,任何“test_group”使用者都可以讀取,其他人沒有任何訪問權限。然後我做 -
sudo chown -R test_user:test_group /testdir sudo chmod -R 640 /testdir
現在,我之前成功的 SFTP 連接現在失敗了,說“錯誤:無法連接到伺服器”。
不知道為什麼,但更自由、免費的所有權限怎麼樣 -
sudo chown -R test_user:test_group /testdir sudo chmod -R 777 /testdir
我的“test_user”連接同樣的 sftp 失敗。
有點困惑,我把所有權放回原來的情況,但現在有了更廣泛的訪問權限——
sudo chown -R root:root /testdir sudo chmod -R 775 /testdir
這仍然無法連接,記住之前使用user:rwx, group:rx, other:rx root root成功,我現在有user:rwx, group:rwx, other:rx root root,它更廣泛但現在 SFTP 失敗。
然後,為了確認,我通過 -
sudo chown -R root:root /testdir sudo chmod -R 755 /testdir
我的 sftp/filezilla ’test_user’ + pw 連接再次成功,顯示 /testdir/dev 目錄的內容,儘管仍然不允許寫入權限。
我顯然誤解了所有權和訪問權限,可能還有 sftp 服務最終試圖在這裡做的事情的機制。有人可以解釋 -
- ‘chmod -R 640 /testdir’ 和所有者 ’test_user:test_group’ (rw- r– — test_user test_group) 情況似乎是我應該需要的(’test_user’ 可以讀寫以及 ’test_group’ 的其他成員可以閱讀)-對嗎?- 但是為什麼這會導致 sftp 連接失敗呢?
- 如果“d rwx rx rx root root”案例啟用成功的 sftp 連接,與使用者“test_user”連接,那麼為什麼只將權限擴大到“d rwx r w x rx root root”(775)然後導致 sftp 連接失敗?
- 什麼是允許我的“test_user”通過 SFTP 連接對這些“/testdir/…”目錄進行讀/寫訪問而不能訪問其他(非 root)使用者的正確/最佳方式?
- 在 sftp 伺服器上的整個 SFTP 連接/身份驗證階段,是否有更詳細的步驟和過程序列(可能在不同使用者下執行)的描述,可以更清晰、更直覺地了解這裡發生的情況?
sshd 選項的文件
ChrootDirectory
部分說明:在會話啟動時,sshd(8) 會檢查路徑名的所有組件是否都是 root 擁有的目錄,任何其他使用者或組都不能寫入這些目錄。
換句話說,您的
/testdir
目錄必須由 root 擁有,沒有組或其他的寫權限。如果不滿足這些條件,我相信sshd
會放棄會議。這些限制僅適用於 chroot 目錄及其父目錄。
/testdir
您可以在其中創建具有您喜歡的任何所有權和權限的文件和目錄。