"기본 권한"옵션을 가진 파일 시스템 퓨즈


0

나는 퓨즈를 처음 사용합니다. 다음 명령으로 퓨즈를 장착했습니다.

/home/bin/fusexmp /mnt/fuse -o default_permissions -o allow_other -o nonempty -o hard_remove -d

이제 "test"사용자로 로그인하여 "testfile"이라는 파일을 만들려고했습니다.

test@11540302:/registration> touch testfile
touch: setting times of `testfile': Permission denied

스트 레이스 출력 :

uname({sys="Linux", node="11540302", ...}) = 0
brk(0)                                  = 0x8055000
brk(0x8076000)                          = 0x8076000
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_LARGEFILE, 0666) =    3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, NULL, 0)             = -1 EACCES (Permission denied)
close(0)                                = 0

하지만 "testfile"작성은 소유자가 root 사용자 인 경우

-rw-r--r--  1 root trusted     0 Jan 19 13:51 testfile

퓨즈 응용 프로그램이 루트 수준에서 실행 중이고 소유자가 루트로 파일 생성이 발생했음을 이해할 수 있습니다. 해당 테스트로 인해 사용자는 "testfile"에 대한 작업을 수행 할 수 없습니다.

내 질문:

1. 마운트하는 동안 "allow_other"를 부여했는데 왜 테스트 사용자가 "testfile"에 액세스 할 권한이 없습니까?

2. "test"사용자로 로그인하고 "testfile"을 작성하려고 시도한 후 "test"대신 "root"를 파일의 소유자로 지정하는 이유는 무엇입니까? 마운트하는 동안 "default_permission"을 지정한 후에도 관찰됩니다.

내 이해가 틀렸다면 저를 시정하십시오.


FUSE는 "사용자 공간의 파일 시스템"을 나타내므로 사용자 공간 프로그램이 나타내는 파일 시스템의 총칭입니다. 그중 몇 가지가 있으므로 "퓨즈 마운트"를 할 수 없으므로 항상 특정 파일 시스템 (퓨즈를 통해 구현 됨)을 사용해야합니다. /mnt/fuse명령이 아닙니다. /mnt그리고 그 서브 디렉토리는 파일 시스템을 마운트하는 일반적인 장소입니다. 그래서 나는 당신이 무엇 을 마운트 했는지 확실 하지 않으며, 처음에 달성하고자하는 것을 이해하지 못합니다.
dirkt

답장을 보내 주셔서 감사합니다. 루트 사용자로 퓨즈를 마운트했습니다. 다른 사용자로 로그인하여 파일을 작성하면 소유자가 root 사용자로 작성됩니다. 포인트로 내 질문을 확인하십시오. 내 질문에 분명해지기를 바랍니다.
kayle

답변:


1

알겠습니다. "퓨즈를 마운트하지 않았습니다."예제 프로그램을 사용했습니다.이 프로그램 fusexmp은 모든 작업을 표준 Linux 라이브러리 호출로 전달하는 매우 간단한 퓨즈 프로그램입니다. 이것은 단지 예제 프로그램이며 매우 지루한 프로그램입니다.

이 마운트 조작을 수행 한 사용자에 대해서는 말하지 않았지만, 그렇게하지 않았다고 가정합니다 root(그렇지 않으면 allow_other작동하지 않았고 testfileowner로 작성되지 않았기 때문입니다 root). 원칙적으로 FUSE 파일 시스템을 모든 사용자로 마운트 할 수 있습니다.

따라서 test사용자가를 실행 touch하면 먼저 퓨즈 마운트 파일 시스템에서 파일을 열었습니다. 를 사용했기 때문에 default_permissions시스템 test은 사용자 가이 특정 디렉토리에 파일을 만들 수 있는지 (성공적으로 성공 했는지) 확인한 다음 파일을 만들 수 있는지 확인했습니다 fusexmp. 로 fusexmp실행하면 root이 파일은로 생성됩니다 root.

다음으로 touch날짜를 설정하고 싶었습니다. 를 사용했기 때문에 default_permissions시스템에서 사용자 test가이 특정 파일의 날짜를 설정할 수 있는지 확인했습니다 . 그렇지 않습니다. 따라서 프로그램 fusexmp이 실제로 날짜 (루트로 실행)를 설정할 수 있는지 여부에 관계없이 시스템은 권한 오류로 중단되었습니다 .

여전히이 연습의 요점을 잘 모르겠습니다. 예제 프로그램을 비정상적으로 사용한 다음 결과가 궁금했습니다. 을 지정하면 default_permissions사용자 공간 프로그램이 올바른 소유자 등으로 파일을 작성해야합니다 ( fusexmp그렇지 않은).

사용자 관점에서 퓨즈 파일 시스템을 이해하려면 sshfs 와 같은 실제 예제를 실험 해 보는 것이 좋습니다 . 또는 자체 퓨즈 프로그램을 작성하고 권한 등을 직접 처리하십시오.


0

이 문제에 대한 해결책을 얻었습니다.

이 문제에 대한 자세한 설명

해결책:

@dirkt가 말했듯이 우리는 스스로 권한을 처리해야합니다.

발신자 UID 및 GID를 가져 오는 코드 :

fuse_get_context ()-> uid;

fuse_get_context ()-> gid;

퓨즈 API를 통해 작성하는 동안 호출자 사용자 ID 및 그룹 ID를 가져오고 파일 / 디렉토리의 소유권을 설정하십시오.

항상 개선의 여지가 있습니다. 내가 틀렸다면 친절하게 수정하십시오.

설명해 주셔서 감사합니다.


문제는 권한 을 전혀 처리해야 할 수도 있고 아닐 수도 있다는 것입니다 . 그것은 FUSE 파일 시스템으로 무엇을 표현하려고하는지, 어떤 목적을 위해 전적으로 달려 있습니다. 예를 들어 일부 레트로 컴퓨터의 디스크 이미지가있는 경우 사용자가 FUSE 파일 시스템으로 마운트하도록하고 디스크 이미지에 Linux uid 및 gid와 동등한 것이 없으므로 사용자의 uid 및 gid를 대체합니다. 그것을 장착했다. 데모에 권한 처리를 추가하는 것은 말이되지 않습니다 fusexmp.
dirkt 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.