![www-資料組在sftp之後寫入?](https://rvso.com/image/1413926/www-%E8%B3%87%E6%96%99%E7%B5%84%E5%9C%A8sftp%E4%B9%8B%E5%BE%8C%E5%AF%AB%E5%85%A5%EF%BC%9F.png)
我希望我的 apache 用戶能夠讀取和寫入文件,我的 sftp 用戶能夠上傳可供其他 sftp 用戶和 apache 使用的文件(rwX),其他人都可以讀取。
附言:I know this question comes up a lot, and I've been reading answers and trying many many things for two days now and am now thoroughly confused
。也我知道允許 www-data 寫入訪問我的網站所涉及的安全風險,但這不是我在這裡討論的問題。
這是我的步驟:
usermod -aG www-data tim
mkdir -p /var/www/mysite/public_html
# now upload/untar the site, etc. not shown here #
chown -R www-data:www-data /var/www/mysite
chmod -R u+rwX,go+rwX,g+s,o-w /var/www/mysite
# now make the apache virtual host and so on .. not shown here #
裡面的文件public_html
設定如下 - 群組已寫入:
-rw-rwSr-- 1 www-data www-data favicon.ico
現在,使用 sftp 作為我的“tim”帳戶登錄,我將一個新檔案上傳到 public_html 資料夾,然後查看其權限:
-rw-r--r-- 1 tim wwww-data COPYING.txt
所以我已經遺失的group WRITE,即使我認為我已新增g+s
到父資料夾中,以便它繼承該群組。
顯然這並不意味著它也繼承了組/mask/。我在某處讀到(但丟失了參考資料),SFTP 不支援 umask;這似乎是權限丟失的地方,但我不知道如何修復它。
編輯 找到了 umask 參考並嘗試過 -http://john.parnefjord.se/node/62- 可以看到檔案正在登入後執行,但上傳後遮罩仍然沒有設定為 g+w。
答案1
我沒有檢查太多,但我在本地伺服器上使用不同的群組權限嘗試了 2-3 次。
我在這裡得到的是,本地系統上的文件被授予的權限是完全相同的權限透過遠端伺服器上的檔案取得。
答案2
當進程在 UNIX 上建立檔案時,該進程控制指派給該檔案的權限。此進程在檔案建立系統呼叫中指定一組權限,通常為 0666 或 0777。權限由進程的 umask 修改以產生檔案的實際權限。父目錄上的特殊標誌不是此過程的一部分。進程也可以透過另一個名為 的系統呼叫來更改現有檔案的權限chmod()
。
SFTP 實際上是一種遠端檔案系統協定。當客戶端在伺服器上建立檔案時,客戶端可以準確地告訴伺服器為新檔案授予哪些權限。客戶端也可以chmod()
遠端呼叫來更改現有檔案的權限。據我所知,OpenSSH SFTP 伺服器沒有為伺服器管理員提供任何限制此行為的方法。
我可能要做的是編寫一個 shell 腳本來掃描資料夾並修復檔案權限。您可以cron
每隔幾分鐘執行一次腳本。類似下面的內容應該可以幫助您開始:
#!/bin/sh
cd /var/www/mysite || exit 1
find . -type f ! -perm 0664 -exec chmod 0664 '{}' ';'