Кастомные фс с libfuse и владельцем файла - PullRequest
0 голосов
/ 31 октября 2019

Когда пользователь создает файл, вызывается обратный вызов создания:

int (*create) (const char *, mode_t, struct fuse_file_info *);

подробности см. По ссылке https://github.com/libfuse/libfuse/blob/74596e2929c9b9b065f90d04ab7a2232652c64c4/include/fuse.h#L609

Но где нет информации о том, какой пользователь хочет создать файл,означает, что файл всегда будет создаваться пользователем-владельцем, с которого запускается процесс fuse.

Например, я запустил процесс fuse как root, но создал файл от моего пользователя:

$ echo $USERNAME
 myuser
$ echo 'f' > f
$ ll
$ ll
total 4,0K
-rw-r--r-- 1 root root

1 Ответ

1 голос
/ 31 октября 2019

Вы можете получить uid и gid вызывающего пользователя, используя глобальный контекст предохранителя:

        struct fuse_context *cxt = fuse_get_context();
        if (cxt)
            uid = cxt->uid;
            gid = cxt->gid;

От fuse.h :

/** Extra context that may be needed by some filesystems
 *
 * The uid, gid and pid fields are not filled in case of a writepage
 * operation.
 */
struct fuse_context {
    /** Pointer to the fuse object */
    struct fuse *fuse;

    /** User ID of the calling process */
    uid_t uid;

    /** Group ID of the calling process */
    gid_t gid;

    /** Process ID of the calling thread */
    pid_t pid;

    /** Private filesystem data */
    void *private_data;

    /** Umask of the calling process */
    mode_t umask;
};
...