すべてのユーザーがアクセスできるように FUSE (unionfs など) をマウントするにはどうすればよいでしょうか?

すべてのユーザーがアクセスできるように FUSE (unionfs など) をマウントするにはどうすればよいでしょうか?

私は、unionfs を使用して、開発サーバー用のいくつかの開発ツールのインスタンスを複数 (100 以上) 作成しようとしています。使用しているスクリプトは次のとおりです。

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-datarootpermission deniedls

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_rootroot がファイルシステムを使用できるようにします。 このオプションは、allow_other誰でもファイルシステムを使用できるようにします。 これらのオプションは相互に排他的です。後者を希望しているようです。通常のユーザーとして使用するにuser_allow_otherは を配置する必要があることに注意してください。 これは、私の Kubuntu [ mine] のデフォルトからの関連コメントです。/etc/fuse.confallow_otherfuse.confformatting

user_allow_other-allow_otherマウント オプションは、ルートとして正常に機能しますが、ユーザーとして機能させるには、も必要です。(このオプションにより、ユーザーはオプションを使用できますuser_allow_other。) 所有者以外のユーザーがマウントされたヒューズにアクセスできるようにする場合に必要です。このオプションは、1 行に単独で表示する必要があります。値はなく、オプションが存在するだけです。/etc/fuse.confallow_otherallow_other

を呼び出すときにallow_other、オプション引数 (の一部) として を渡します。あなたの場合は次のようになります:-ounionfs

unionfs -o cow,allow_other …

ファイルシステムが特定の一般ユーザーで実行される場合、そのユーザーが実行できる操作 (基盤となるストレージに対して) のみを実行できることに注意してください。たとえば、unionfsとして実行しmanager、ファイルシステムの使用allow_otherを許可した場合www-data、そのユーザーによって作成されたファイルは、いずれにwww-dataしても に属しますmanager。その他の制限が明らかになる可能性があります。

ファイルシステムを実行するとroot役立ちますが、すでにリンクされている回答。 下回って実行することrootはお勧めしません。

一般的にFUSEは、ルート権限を持たないユーザーがファイルシステムをマウントして使用するための一般的な方法として設計されています。彼ら自身実際の管理者に迷惑をかけずに、他のユーザーとファイルシステムを使用するには、カーネルと、 を実行できる管理者からのサポートを受けるのが正しい方法ですmount

私の知る限り、UnionFS をカーネル モジュール (FUSE ではない) として持つことは可能ですが、メインライン カーネルには含まれていないため、自分でビルドする必要があります。私の理解が正しければ、カーネルに実装された UnionFS は期待どおりに動作するはずです。

私のKubuntuではOverlayFS(代替案) はカーネル モジュール (FUSE ではない) として既に存在します。

関連情報