Linux

Rsync 和文件所有權 - 不要更改伺服器上的所有權

  • October 10, 2017

所以我有一個從我的個人電腦同步到的網路伺服器,我在文件權限方面遇到了問題。

我已經嘗試了這兩個命令,但它們都沒有給我想要的東西。

rsync -a --no-o --no-g --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ admin-user@mysite.com:/var/www/mysite.com

rsync -a --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ admin-user@mysite.com:/var/www/mysite.com

這是我想要的解釋,以及實際發生的情況,我使用前面提到的兩個命令得到了相同的效果。應該是這樣,索引可由執行 nginx 的使用者 www-data 讀取,並且可由管理員使用者寫入。

-rw-r-----  1 admin-user www-data 127 M D mm:ss index.html

這是執行 rsync 後實際發生的情況:

-rw-r-----  1 admin-user admin-user 128 M D mm:ss index.html

這顯然會導致訪問網站時出現 404,目前我必須在執行 rsync 後執行一個更正權限的腳本。

所以我想要的是伺服器上文件中的 GID 在我執行 rsync 後不會更改,我手動指定 GID 的解決方案也不起作用,因為其他程序使用的其他文件需要設置為其他團體。基本上 rsync 應該修改文件中的數據,但不要觸及其他任何內容

這也不應該需要超級使用者權限,因為該文件可由我登錄的使用者寫入。

OS: Ubuntu 16.04 Server and Desktop
rsync --version (home computer): 3.1.2  protocol version 31
rsync --version (server): 3.1.1  protocol version 31

為了使 rsync 創建具有相同組的更新文件,它們最初分配給 admin 使用者必須是該組的一部分。

解決方案是執行

usermod -aG www-data admin-user

在網路伺服器上。

我剛剛嘗試過,它似乎工作得很好。我為 rsync 使用了以下選項:

rsync -a --no-o --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/site/ admin-user@remote:/var/www/site

這最初是由@Thomas 在評論中提出的。

引用自:https://unix.stackexchange.com/questions/397195