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

rsynced файлы не получают правильный ACL

Я использую rsync (rsync-3.0.6-5.el6_0.1.x86_64 в Scientific Linux 6) для передачи файлов с диска VFAT в файловую систему ext3, смонтированную по NFS. У меня есть списки ACL, настроенные в системе ext3, и все работает, как ожидалось, например, при создании новых файлов или каталогов (через монтирование NFS, через командную строку или Nautilus). Но при rsync-ing или cp-ing списки ACL не создаются для скопированных файлов в разделе ext3.

Фон - это VFAT от камеры, которая периодически устанавливается, и не создает ACL для каталогов или файлов. Есть ли способ rsync (или даже копирования), который позволяет, например, правилам ACL по умолчанию применять ACL к файлам и каталогам rsync-ed или cp-ed?

После небольшой помощи друзей и долгого скрежета зубов я понял это. Конечно, ответ был на страницах руководства.

Проблема проистекает из того факта, что (из справочной страницы acl): «модификация битов прав доступа к файлу приводит к модификации связанных записей ACL» и наоборот. Поскольку без соответствующего флага rsync использует исходные разрешения, это изменяет ACL на целевом сервере.

Решение в rsync - использовать параметр --chmod. На странице руководства rsync (в разделе --perms):

Чтобы предоставить новым файлам права назначения по умолчанию (при сохранении существующих файлов без изменений), убедитесь, что опция --perms выключена, и используйте --chmod = ugo = rwX (что гарантирует, что все немаскированные биты будут включены).

Однако права, которые нужно использовать, зависят от предполагаемых целевых прав. В качестве примера, в моем случае, исходных разрешений было 700, без ACL. Подкаталог назначения имел следующий список контроля доступа по умолчанию: d:u:user1:rwx,d:u:user2:rwx,u:user1:rwx,u:user2:rwx,d:m:rwx,m:rwx. То есть у него есть два названных пользователя, явная маска, а также идентичные значения по умолчанию. Это равняется 770.

При использовании rsync (или cp-ing) разрешение источника 700 переопределяет маску ACL по умолчанию, устанавливая для нее значение --- вместо того rwx.

Поскольку для этого случая требуются «пользователь» и «группа», но нет «других» разрешений источника, я использовал следующий флаг в rsync: --chmod=ug=rwx. Буквы после первого знака равенства указывают на то, что следующие разрешения применяются к u (ser) и g (roup). Буквы, следующие за вторым знаком равенства, указывают разрешения, которые получают эти пользователи. Это заставляет rsync установить для цели значение 770.

Фактическая команда: rsync -av --chmod=ug=rwX /<source> /<destination>

Несколько замечаний. Во-первых, поведение разрешения rsync зависит от версии на принимающей стороне. Проверьте страницы руководства для окончательного ответа. Во-вторых, важен порядок флагов: -a, -A и т. Д. На самом деле могут использоваться, но ДОЛЖЕН предшествовать флагу --chmod.

Наконец, я не вижу аналогичного флага, доступного для cp, что делает rsync единственной игрой в городе для синхронизации файлов И применения ACL по умолчанию на цели к файлам с разными разрешениями источника.

Как именно вы вызываете rsync? Поскольку ваш источник не поддерживает ACL, вам почти наверняка следует НЕ передавать любые параметры, которые указывают rsync на копирование разрешений.

Так что не используйте -a, -o, -g, или -A.

Вы устанавливаете флаг -A в своей команде rsync?