2016-04-07 7 views
0

У меня есть две цепные файловые системы FUSE, которые предназначены для совместной работы: оба выполняются как root: процесс P пытается получить доступ к файлу F сначала через FS1; FS1 смотрит на FS2. Теперь FS2 необходимо получить информацию о контексте (pid, user и group) P (а не FS1), чтобы убедиться, что P имеет разрешение на доступ к файлам.ПРЕДУПРЕЖДЕНИЕ: как получить оригинального (не root) пользователя вызывающего процесса при связывании файловых систем на основе FUSE

Каков рекомендуемый способ?

+0

Если они оба используют в качестве корня, ни один знает, кто Р. Какой смысл работать в User Space, если вы собираетесь запускать его как root? Если у вас есть доступ к SSH, и вы хотите, чтобы FS2 знал, кто вы, войдите в систему напрямую. Если вы можете достичь FS2 только через FS1, используйте ssh для туннеля. – LinuxDisciple

+0

Мой вопрос касается файловых систем FUSE в целом, а не sshfs (подразумевается реквизитами вашего комментария.) –

+0

Теперь я вижу, что ошибочно вывел sshfs. – LinuxDisciple

ответ

0

Этот вопрос эффективно ответил здесь: Change UID/GID only of one thread in Linux

операции Filesystem (открытый, статистика и т.д.) из в FS1, что доступ к файлам, принадлежащие FS2 должны быть выполнены как пользователь вызывающего процесса, с тем чтобы обеспечить что разрешения файловой системы соблюдаются. Канонический способ сделать это - использовать API-интерфейс setfsuid и setfsgid, чтобы разрешить FS1 при запуске с правами администратора выполнять операции с файловой системой, как если бы он выполнялся как пользователь без полномочий root. При сбое вызова fs errno следует немедленно снять. После этого setfsuid и setfsgid должны использоваться для возврата эффективного uid/gid обратно в root/root.

Смотрите fs_unlink пример здесь: https://sourceforge.net/p/fuse/mailman/message/29362682/