我希望目录中的所有文件/var/www
都归 nginx.devel 所有。我已经执行了chmod
一次并使用 更新了这些文件rsync
。
但是如果我创建一个新文件然后rsync
它,它将归 user.user 拥有,并且我需要chmod
以sudo
它的权限运行。
答案1
你不能。好吧,无论如何都不是自动的。你能但是,通过仔细规划和适当的 umask,强制执行组权限可以解决大多数权限问题。如果您在目录上设置 setgid 位,/var/www
它将确保在其下创建的任何新文件都归该devel
组所有。
请注意,根据您使用的标志,rsync
可能会覆盖此行为并复制源文件的所有权。
要设置 setgid 位:
$ ls -ld 测试 drwxr-xr-x 2 insyte insyte 4096 2009-08-13 04:39 测试 $ chmod g+s 测试 $ ls -ld 测试 drwxr-sr-x 2 insyte insyte 4096 2009-08-13 04:39 测试
行为演示:
$id 复制代码 uid=1000(insyte)gid=1000(insyte)组=4(adm)、20(拨出)、24(cdrom) $ ls -ld 测试 drwxr-xr-x 2 insyte 备份 4096 2009-08-13 04:39 测试 $ touch 测试/file1 $ ls -l 测试 共 0 -rw-r--r-- 1 insyte insyte 0 2009-08-13 04:43 file1 $ sudo chmod g+s 测试 $ ls -ld 测试 drwxr-sr-x 2 insyte 备份 4096 2009-08-13 04:43 测试 $ touch 测试/file2 $ ls -l 测试 共 0 -rw-r--r-- 1 insyte insyte 0 2009-08-13 04:43 file1 -rw-r--r-- 1 insyte 备份 0 2009-08-13 04:44 file2
效果也是递归的;设置 setgid 位后创建的任何新目录也将设置 setgid 位。
当然,这种方法的替代方法是每分钟运行一次 cron 作业,并修复 下文件的权限/var/www/
。