我正在使用 Cloud9IDE 的 SSH 工作區,由於多種原因,我們需要以 root 身分建立 SSH 隧道。這並不是真正的問題,但是我們用它創建的文件和目錄實際上位於用戶資料夾下(在本例中,假設用戶是“foobar”,因此文件是在/home/foobar/public_html/ 中創建的)開發)。
問題在於,由於使用者「root」實際上正在建立文件,因此在瀏覽器中導航到這些文件會返回 404,因為伺服器使用使用者「foobar」來提供頁面。
我需要一種方法來確保即使文件是由 root 用戶創建的,用戶 foobar 也應該能夠讀取和執行它們,就像該用戶創建它們一樣。
我嘗試將 setfacl -Rdm 與包含 root 和 foobar 的群組一起使用,結果導致 foobar 無法再為其目錄中的任何檔案提供服務。
例如:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
在本例中,文件「die.html」可以正確提供,但「dies.html」由於所有者和群組的原因會導致 404。
關於如何解決這個問題有什麼想法嗎?重申一下:我需要對所有未來的文件發生這種情況,而不僅僅是當前存在的文件。
答案1
任君選擇:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
因此,要讓建立的所有檔案都歸 foobar 所有,您需要執行以下操作:
運行crontab -e
並輸入:
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
保存,讓cron接管權限
答案2
建立 ssh 隧道後,透過輸入su foobar
foobar 的密碼將您的使用者身分變更為 foobar。
答案3
建立一個新群組,說開發者 並將所有需要對檔案進行讀取/寫入存取權限的使用者放入該群組中。然後將該目錄的群組更改為開發者。
使用此命令:
chgrp -R devs /home/foobar/public_html/dev
在那組之後設定gid使用以下命令進入該目錄:
chmod -R g+s /home/foobar/public_html/dev
從此時起,在該目錄中建立的所有檔案都將歸組所有開發者並且該群組中的所有使用者都將具有對檔案的讀取/寫入存取權限(取決於權限)。
如果你想知道 setgid 是什麼檢查此連結。