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

lex*_*sys 4 linux permissions

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

但是如果我创建一个新文件然后rsync它,它将归 user.user 所有,我需要chmod使用sudo它的特权运行。

Ins*_*yte 5

你不能。好吧,无论如何都不会自动。但是,您可以强制执行组权限,通过仔细规划和适当的 umask,可以解决大多数权限问题。如果在/var/www目录上设置 setgid 位,它将确保在该目录下创建的任何新文件都归该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(dialout),24(cdrom)
$ ls -ld 测试
drwxr-xr-x 2 insyte 备份 4096 2009-08-13 04:39 测试
$触摸测试/文件1
$ 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 测试
$触摸测试/文件2
$ 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 位。

当然,这种方法的替代方案是每分钟运行一次并修复/var/www/.