Назад | Перейти на главную страницу

Как сделать так, чтобы все новые файлы в каталоге принадлежали конкретному пользователю?

Я хочу все файлы в /var/www каталог должен принадлежать nginx.devel. Я выполнил chmod один раз и обновите эти файлы, используя rsync.

Но если я создам новый файл, а затем rsync он будет принадлежать user.user, и мне нужно запустить chmod с участием sudo привилегии на это.

Вы не можете. Во всяком случае, не автоматически. Вы жестяная банкатем не менее, принудительное применение разрешений для групп, которое при тщательном планировании и соответствующей маске может решить большинство проблем с разрешениями. Если вы установите бит setgid на /var/www каталог, он гарантирует, что все новые файлы, созданные в нем, принадлежат devel группа.

Обратите внимание, что в зависимости от того, какие флаги вы используете, rsync может переопределить это поведение и воспроизвести право собственности на исходные файлы.

Чтобы установить бит setgid:

$ ls -ld test
drwxr-xr-x 2 insyte insyte 4096 2009-08-13 04:39 test
$ chmod g+s test
$ ls -ld test
drwxr-sr-x 2 insyte insyte 4096 2009-08-13 04:39 test

Демонстрация поведения:

$ id
uid=1000(insyte) gid=1000(insyte) groups=4(adm),20(dialout),24(cdrom)
$ ls -ld test
drwxr-xr-x 2 insyte backup 4096 2009-08-13 04:39 test
$ touch test/file1
$ ls -l test
total 0
-rw-r--r-- 1 insyte insyte 0 2009-08-13 04:43 file1
$ sudo chmod g+s test
$ ls -ld test
drwxr-sr-x 2 insyte backup 4096 2009-08-13 04:43 test
$ touch test/file2
$ ls -l test
total 0
-rw-r--r-- 1 insyte insyte 0 2009-08-13 04:43 file1
-rw-r--r-- 1 insyte backup 0 2009-08-13 04:44 file2

Эффект также рекурсивный; любые новые каталоги, созданные после установки бита setgid, также будут иметь установленный бит setgid.

Альтернативой этому подходу, конечно же, было бы задание cron, которое запускается каждую минуту и ​​фиксирует разрешения для файлов в /var/www/.