Программа может получить доступ к файлу, если любое из следующих условий верно для этого файла, а также для любых каталогов, которые необходимо пройти:
(На самом деле это верно не во всех случаях, но здесь это достаточно хорошее приближение.)
Обратите внимание на то, какие пользователи являются членами каких групп, не всплывает. Эта информация используется только тогда, когда пользователь входит в систему :, она заставляет программы в этом сеансе входа работать как эти группы. Таким образом, добавление пользователя в группу не может решить вашу проблему.
Вам необходимо предоставить пользователю rslsync
доступ к каталогу resilio
, а также ко всей цепочке каталогов, ведущих туда. Для доступа к /home/liam/sync/resilio
программе требуется атрибут разрешения на обход каталога (x
, что означает «выполнение» для обычных файлов )на /
, /home
, /home/liam
, /home/liam/sync
и /home/liam/sync/resilio
, а также разрешение на чтение /home/liam/sync/resilio
.
Это можно сделать с помощью списка контроля доступа:
setfacl -m u:rslsync:x /home/liam /home/liam/sync
setfacl -R -m u:rslsync:rx /home/liam/sync/resilio
setfacl -R -d -m u:rslsync:rx /home/liam/sync/resilio
Первая строка гарантирует, что rslsync может пройти через ведущие каталоги. Вторая строка дает rslsync доступ ко всему дереву каталогов с корнем /home/liam/sync/resilio
. Третья строка с флагом -d
задает ACL по умолчанию для вновь созданных файлов — без этого rslsync не сможет прочитать ни один вновь созданный файл.
Некоторые приложения могут создавать файлы с более строгим ACL, чем ACL по умолчанию. Это может особенно произойти, когда файлы копируются из другого места. В этом случае rslsync не сможет прочитать эти файлы. Существует другой подход, который гарантирует, что rslsync всегда сможет прочитать файлы, который заключается в создании альтернативного представления дерева в /home/liam/sync/resilio
с другими разрешениями. Вы можете сделать это с помощью bindfs . Обратите внимание, что вы должны выполнить монтирование от имени пользователя root, чтобы разрешить другому пользователю доступ к файловой системе bindfs. Вы можете использовать следующую строку в/etc/fstab
:
bindfs#/home/liam/sync/resilio /var/lib/rslsync/resilio fuse ro,force-user=rslsync,perms=u+rD:go=