Каковы загадочные отношения между `fchown ()` и `flock ()`? - PullRequest
2 голосов
/ 16 января 2020

Читая справочные страницы для fchown, я нахожу это утверждение:

Системный вызов fchown () особенно полезен, когда используется вместе с примитивами блокировки файлов (см. Flock). (2)).

Вот загадка: в справочной странице для flock(2) не упоминается fchown или даже как владение влияет на нее в целом.

Так может кто-нибудь объяснить, что происходит, когда fchown и flock используются вместе и почему это так "полезно?"

Я занимаюсь разработкой для macOS (Дарвин), но я нахожу то же утверждение (и отсутствие объяснения) в Linux, BSD, POSIX и практически во всех других справочных страницах * NIX, которые я искал.

Backstory (потому что каждый великий злодей имеет предысторию):

У меня есть вспомогательный процесс set-UID, который выполняется как root, но большую часть своего времени работает как пользователь . Пока он работает как пользователь , создаваемые файлы принадлежат пользователь . Пока все хорошо.

Тем не менее, иногда ему нужно создавать файлы, работая как root. Когда это происходит, файлы принадлежат root, и я хочу, чтобы они принадлежали user . Поэтому я планировал создать + открыть файл, а затем позвонить fchown(), чтобы изменить владельца обратно на user .

Но некоторые из этих файлов являются общими, и я использую flock() чтобы заблокировать одновременный доступ к файлу, и теперь мне интересно, что будет с моей паствой.

...