Кто-нибудь пробовал мониторить kbfs с incrond?

Пока я могу бежать unison -batch keybase и все отлично работает, я попробовал это на вкладке Incron:

/run/user/1000/keybase/kbfs/ IN_ALL_EVENTS flock -n /tmp/synclock unison -batch keybase

с результатом системного журнала:

Nov 24 03:53:05 ThinkPad incrond[5820]: access denied on /run/user/1000/keybase/kbfs/ - events will be discarded silently
Nov 24 03:53:05 ThinkPad incrond[5820]: cannot create watch for user me: (13) Permission denied

incrond работает от имени root и "не ограничен", что, как я предполагаю, относится к selinux (?)

$ ps -eo euser,ruser,suser,fuser,f,comm,label | grep incron
root     root     root     root     5 incrond         unconfined

Есть мысли о том, что может происходить?

1 ответ

Решение

Оказывается, что /run/user/1000/keybase/kbfs/ - это файловая система FUSE, которая монтируется без опции "allow_root", поэтому она доступна только через пользователя, который смонтировал FS. Добавление "allow_root" в /etc/fuse.conf не решает проблему, так как код kbfs не проходит через эту опцию. Для этого вам нужно отредактировать код и перекомпилировать.

Также оказывается, что даже если kbfs разрешил доступ с правами root - а incron или inotify действительно нуждаются в доступе с правами root - FUSE также не имеет возможности сообщать о событиях файловой системы. Хотя это, по-видимому, было бы возможно, разработчики пометили его как "не исправить". Это означает, что запуск базы ключей в качестве пользователя root также не решит проблему.

Мое решение - просто запустить задание cron, которое синхронизирует каталоги каждые 60 секунд. В / keybase есть файл, который всегда присутствует, даже если он не отображается в ls: /keybase/kbfs.error.txt. Содержимое этого может использоваться, чтобы определить, смонтирован ли kbfs. Если это так, пакетное задание может быть запущено для синхронизации каталогов с помощью unison.

Другие вопросы по тегам