Rsync 和文件所有权 - 不要更改服务器上的所有权

Rsync 和文件所有权 - 不要更改服务器上的所有权

所以我有一个从我的个人计算机同步的网络服务器,我在文件权限方面遇到了问题。

我已经尝试过这两个命令,但没有一个给我我想要的。

rsync -a --no-o --no-g --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ [email protected]:/var/www/mysite.com

rsync -a --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ [email protected]:/var/www/mysite.com

这是我想要的解释,以及实际发生的情况,我使用前面提到的两个命令得到了相同的效果。事情应该是这样的,索引可以被 nginx 运行的用户 www-data 读取,也可以被 admin 用户写入。

-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 后更正权限。

所以我想要的是运行 rsync 后服务器上文件中的 GID 不发生变化,手动指定 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

答案1

为了让 rsync 创建具有相同组的更新文件,它们最初分配给管理员用户必须是该组的一部分。

解决方案是运行

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 在评论中建议的。

相关内容