모든 사용자가 액세스할 수 있도록 FUSE(예: Unionfs)를 마운트하는 방법은 무엇입니까?

모든 사용자가 액세스할 수 있도록 FUSE(예: Unionfs)를 마운트하는 방법은 무엇입니까?

저는 개발 서버를 위한 몇 가지 개발 도구의 여러(100개 이상의) 인스턴스를 생성하기 위해 Unionfs를 사용하려고 합니다. 내가 사용하는 스크립트는 다음과 같습니다.

PROJECT=$1
DEPLOYMENT=$2
TOOL=$3

DIR_TOOL="/var/www/tools/${TOOL}"
DIR_CONFIG="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/config"
DIR_TMP="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/tmp"
DIR_MERGED="/var/www/tools-instances/${PROJECT}/${DEPLOYMENT}/${TOOL}/merged"

mkdir -p "${DIR_CONFIG}"
mkdir -p "${DIR_TMP}"
mkdir -p "${DIR_MERGED}"

unionfs -o cow "${DIR_TMP}"=RW:"${DIR_CONFIG}"=RO:"${DIR_TOOL}"=RO "${DIR_MERGED}"

그런 다음 다음과 같이 사용하십시오.

create-tool-overlay.sh "project-1" "staging" "phpmyadmin"

모든 것이 잘 작동하지만 manager사용자에게만 해당됩니다. www-data(이 액세스 권한이 필요한 사람) 및 root(모든 것에 대한 액세스 권한이 있어야 하는 사람)을 포함하여 다른 사용자로 폴더에 액세스하려고 하면 permission denied. 그리고 이 폴더에서 실행하려고 하면 ls다음과 같은 이상한 결과가 나타납니다.

root@app-1:/var/www/tools-instances/project-1/staging/phpmyadmin# ls -al
ls: cannot access 'merged': Permission denied
total 32
drwxrwxr-x+ 5 manager manager 4096 Dec 16 15:51 .
drwxrwxr-x+ 3 manager manager 4096 Dec 14 15:29 ..
drwxrwxr-x+ 2 manager manager 4096 Dec 14 15:29 config
d?????????? ? ?       ?          ?            ? merged
drwxrwxr-x+ 2 manager manager 4096 Dec 16 15:51 tmp

답변1

unionfs사용한 실행 파일 이파일 시스템사용자 공간(퓨즈). 파일 시스템을 관리하는 프로세스는 특정 사용자(귀하의 경우: manager)에 의해 실행되며 다른 사용자는 액세스할 수 없습니다. 다른 사용자에게 액세스 권한을 부여하는 것은 덜 안전합니다. 에 대해 읽다보안 문제.

보안을 낮출 수 있습니다. 보다 man 8 fuse. 이 옵션을 사용 allow_root하면 루트가 파일 시스템을 사용할 수 있습니다. 이 옵션을 사용 allow_other하면 누구나 파일 시스템을 사용할 수 있습니다. 이러한 옵션은 상호 배타적이므로 후자를 원하는 것 같습니다. 일반 사용자로 사용하려면 user_allow_other에 배치해야 합니다 . 이것은 내 Kubuntu [ mine] 의 기본값과 관련된 설명입니다 ./etc/fuse.confallow_otherfuse.confformatting

user_allow_other- allow_other마운트 옵션을 사용하면 루트로서도 잘 작동하므로 필요한 사용자로도 작동할 수 user_allow_other있습니다 /etc/fuse.conf. (이 옵션을 사용하면 사용자가 해당 옵션을 사용할 수 있습니다 .) 장착된 퓨즈에 소유자 이외의 사용자가 접근할 수 있도록 하려면 allow_other필요합니다 . allow_other이 옵션은 한 줄에 단독으로 나타나야 합니다. 가치는 없고 옵션만 있을 뿐입니다.

를 호출하는 동안 allow_other옵션 인수(의 일부)를 에 전달합니다 . 귀하의 경우에는 다음과 같습니다:-ounionfs

unionfs -o cow,allow_other …

파일 시스템이 특정 일반 사용자로 실행되는 경우 해당 사용자가 수행할 수 있는 작업만 (기본 저장소에 대해) 수행할 수 있습니다. 예를 들어 unionfs다음으로 실행 manager하고 파일 시스템 사용을 allow_other허용하는 경우 에서 만든 모든 파일은 여전히 ​​해당 파일 시스템에 속합니다 . 다른 제한 사항이 나타날 수도 있습니다.www-datawww-datamanager

파일 시스템을 실행하면 root도움이 될 수 있지만이미 연결된 답변. 아래로 달리는 것은 root권장되지 않습니다.

일반적으로 FUSE는 루트 액세스 권한이 없는 사용자가 파일 시스템을 마운트하고 사용하기 위한 일반적인 방법으로 설계되었습니다.그들 자신, 실제 관리자를 괴롭히지 않고. 다른 사용자와 함께 파일 시스템을 사용하려면 커널과 이를 수행할 수 있는 관리자의 지원을 받는 것이 올바른 방법입니다 mount.

AFAIK UnionFS를 FUSE가 아닌 커널 모듈로 사용할 수 있지만 메인라인 커널에는 없으므로 직접 빌드해야 합니다. 내가 올바르게 이해했다면 커널에 구현된 UnionFS는 예상한 대로 작동해야 합니다.

내 쿠분투에서는 OverlayFS(다음 중 하나)를 사용할 수 있습니다.대안)은 이미 커널 모듈(FUSE 아님)로 존재합니다.

관련 정보