所以我有一个从我的个人计算机同步的网络服务器,我在文件权限方面遇到了问题。
我已经尝试过这两个命令,但没有一个给我我想要的。
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 在评论中建议的。