Я хочу все файлы в /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/
.