AWS EC2 Linux实例使用rsync同步文件到nginx站点目录权限报错如何解决
解决方案
方案一:共享用户组(推荐,长期稳定,不影响nginx正常访问)
你的思路完全正确,通过共享用户组的方式可以同时满足ec2-user写入、nginx读取的需求,操作步骤如下:
- 登录EC2服务器,创建共享用户组
sudo groupadd www
- 将ec2-user和nginx用户都加入该组
sudo usermod -aG www ec2-user sudo usermod -aG www nginx
- 修改/var/www目录的所属组和权限,保留nginx作为文件所有者保证服务正常读取,同时给用户组开放读写权限,额外设置setgid位保证后续新写入的文件自动继承目录组权限
# 修改目录所属组 sudo chown -R nginx:www /var/www # 给所有子目录设置权限:所有者读写执行、组读写执行、其他读执行,开启setgid位 sudo find /var/www -type d -exec chmod 2775 {} \; # 给所有文件设置权限:所有者读写、组读写、其他读 sudo find /var/www -type f -exec chmod 0664 {} \;
- 权限生效操作:退出当前EC2登录会话,重新登录后组权限才会生效,也可以执行
newgrp www临时生效。 - 验证:登录后执行
touch /var/www/html/technology/test.txt,如果无报错说明权限配置正确,直接执行原有rsync命令即可正常同步。
方案二:临时sudo提权(适合短期一次性同步使用)
如果不想修改目录权限配置,可以给ec2-user开放rsync的免密sudo权限,直接通过提权完成同步:
- 登录EC2服务器,执行
sudo visudo,在文件末尾添加如下配置
ec2-user ALL=(ALL) NOPASSWD: /usr/bin/rsync
保存退出后生效。
2. 本地rsync命令添加--rsync-path参数指定服务器端用sudo执行rsync:
rsync -azP -e "ssh -i /Users/username/devwork/company/comp.pem" --rsync-path="sudo rsync" company_technology/ ec2-user@1.2.3.4:/var/www/html/technology
注意事项
不要修改/var目录的默认权限,该目录默认归属root、权限755,已经足够ec2-user正常进入访问,修改上层目录权限可能引发其他系统服务异常。
内容的提问来源于stack exchange,提问作者John David
相关产品推荐
相关产品推荐

