如何使目录中的所有新文件归特定用户所有?

如何使目录中的所有新文件归特定用户所有?

我希望目录中的所有文件/var/www都归 nginx.devel 所有。我已经执行了chmod一次并使用 更新了这些文件rsync

但是如果我创建一个新文件然后rsync它,它将归 user.user 拥有,并且我需要chmodsudo它的权限运行。

答案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/

相关内容