僅有權存取特定資料夾的 SFTP 使用者 - 建立檔案的權限被拒絕

僅有權存取特定資料夾的 SFTP 使用者 - 建立檔案的權限被拒絕

因此,我嘗試建立一個只能存取我的public_html資料夾中的特定資料夾的使用者。我已成功建立使用者並且可以登入。一開始我在登入時遇到了一些麻煩,因為在 sftp 用戶可以進行 sftp 之前,該資料夾必須由 root 擁有。

所以我遵循了這個指南:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component- 指示我將資料夾的擁有權更改為 root。

執行此操作後,我可以成功登錄,但是,一旦登錄,我無法在此資料夾中新增檔案或執行任何操作,因為它由 root 使用者擁有。

我嘗試建立一個群組,並將 root 使用者和 sftp 使用者新增為該群組的成員,但這也不起作用。

我的解決方法是使用root 用戶在sftp 資料夾內創建另一個目錄,然後將所有權更改為sftp 用戶,但這對我來說似乎太老套了,並且在樹結構中添加了另一個資料夾,我不是一個超級粉絲的。

有什麼想法如何允許 sftp 用戶對資料夾進行寫入訪問,同時 root 仍然是所有者嗎?

答案1

在一些堆疊交換網站上有很多關於此類事情的討論。但萬一這不是重複的......

在我的 CentOS 7 中,當您使用 ChrootDirectory 將使用者限製到某個目錄時,目錄必須由 root 擁有,並且它不能允許透過權限或 FACL 對任何其他使用者進行寫入存取。您可以設定符號鏈接,但如果 sftp 用戶僅限於某個目錄,則他/她將無法追蹤它。所以你必須這樣做。

創建用戶

useradd ftp_user

設定密碼

passwd ftp_user

設定權限。他的家將成為他的監獄。

chown root:root /home/ftp_user
chmod 0755 /home/ftp_user

現在將用戶限制在該監獄中

vi /etc/ssh/sshd_config

改變這個:

#Subsystem sftp /usr/lib/openssh/sftp-server

Subsystem sftp internal-sftp

添加

Match User ftp_user
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

儲存並退出 vi。

不要忘記:

systemctl restart sshd 

現在我們欺騙他們。假設您的客戶有一個網站,您將讓他繼續使用網站,地址為 /var/www/corny_website

確保他對該目錄有權限

setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website

現在您安裝它而不是符號連結。

mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/

現在當用戶sftps。他不會收到管道損壞的錯誤,他只能看到 /home/ftp_user ,而且,他只能上傳到 /var/www/corny_website 或從 /var/www/corny_website 下載,他將其視為 /老土的網站。

相關內容