Новые каталоги и файлы, созданные по умолчанию, наследуют пользователя и группу создавшего процесса. Процесс может явно установить его в какую-то другую группу (, процесс является членом )или если для каталога установлен бит setuid/setgid , владелец/группа устанавливаются в соответствии с каталогом.
Права доступа к файлам по умолчанию определяются процессом' umask . Обычные значения umask(022
и027
)не делают файлы и каталоги доступными для записи всем пользователям.
Поскольку владельцем и группой вашего каталога являются root:root
, вы не можете писать в него. Также по вашему описанию кажется, что вы создали файл как root(с помощью sudo? )вместо пользователя liam .
Также обратите внимание, что проверки прав доступа к файлам в Linux выполняются для полного пути, начиная с текущего каталога. Если каталог в пределах пути не имеет разрешения на выполнение (+x )для пользователя/группы процесса, доступ будет запрещен.
Другим способом установки прав доступа к файлам являются списки контроля доступа POSIX, семантика которых объясняется вman 5 acl
. Поддержка ACL зависит от используемой вами файловой системы, и для включения может потребоваться флаг монтирования.
Вы запускаете этот код в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
не -ноль в коде.