Rsync не сохраняет отметку времени, если не удается изменить владельца

Новые каталоги и файлы, созданные по умолчанию, наследуют пользователя и группу создавшего процесса. Процесс может явно установить его в какую-то другую группу (, процесс является членом )или если для каталога установлен бит setuid/setgid , владелец/группа устанавливаются в соответствии с каталогом.

Права доступа к файлам по умолчанию определяются процессом' umask . Обычные значения umask(022и027)не делают файлы и каталоги доступными для записи всем пользователям.

Поскольку владельцем и группой вашего каталога являются root:root, вы не можете писать в него. Также по вашему описанию кажется, что вы создали файл как root(с помощью sudo? )вместо пользователя liam .

Также обратите внимание, что проверки прав доступа к файлам в Linux выполняются для полного пути, начиная с текущего каталога. Если каталог в пределах пути не имеет разрешения на выполнение (+x )для пользователя/группы процесса, доступ будет запрещен.

Другим способом установки прав доступа к файлам являются списки контроля доступа POSIX, семантика которых объясняется вman 5 acl. Поддержка ACL зависит от используемой вами файловой системы, и для включения может потребоваться флаг монтирования.

1
06.12.2019, 02:38
1 ответ

Вы запускаете этот код вrsync.c:

if (am_root >= 0) {
        uid_t uid = change_uid ? (uid_t)F_OWNER(file) : sxp->st.st_uid;
        gid_t gid = change_gid ? (gid_t)F_GROUP(file) : sxp->st.st_gid;
        if (do_lchown(fname, uid, gid) != 0) {
                /* We shouldn't have attempted to change uid
                 * or gid unless have the privilege. */
                rsyserr(FERROR_XFER, errno, "%s %s failed",
                    change_uid ? "chown" : "chgrp",
                    full_fname(fname));
                goto cleanup;
        }

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

Аналогичный пропуск выполняется, если не удается установить другие данные. (Если не удается установить метки времени, установка прав доступа к файлам будет пропущена ).

Что касается того, почему он жалуется на установку группы , а не владельца, я не совсем уверен, поскольку он должен жаловаться на chown, если change_uidне -ноль в коде.

2
27.01.2020, 23:29

Теги

Похожие вопросы