%20%E3%82%92%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
私は、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-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
root がファイルシステムを使用できるようにします。 このオプションは、allow_other
誰でもファイルシステムを使用できるようにします。 これらのオプションは相互に排他的です。後者を希望しているようです。通常のユーザーとして使用するにuser_allow_other
は を配置する必要があることに注意してください。 これは、私の Kubuntu [ mine] のデフォルトからの関連コメントです。/etc/fuse.conf
allow_other
fuse.conf
formatting
user_allow_other
-allow_other
マウント オプションは、ルートとして正常に機能しますが、ユーザーとして機能させるには、も必要です。(このオプションにより、ユーザーはオプションを使用できますuser_allow_other
。) 所有者以外のユーザーがマウントされたヒューズにアクセスできるようにする場合に必要です。このオプションは、1 行に単独で表示する必要があります。値はなく、オプションが存在するだけです。/etc/fuse.conf
allow_other
allow_other
を呼び出すときにallow_other
、オプション引数 (の一部) として を渡します。あなたの場合は次のようになります:-o
unionfs
unionfs -o cow,allow_other …
ファイルシステムが特定の一般ユーザーで実行される場合、そのユーザーが実行できる操作 (基盤となるストレージに対して) のみを実行できることに注意してください。たとえば、unionfs
として実行しmanager
、ファイルシステムの使用allow_other
を許可した場合www-data
、そのユーザーによって作成されたファイルは、いずれにwww-data
しても に属しますmanager
。その他の制限が明らかになる可能性があります。
ファイルシステムを実行するとroot
役立ちますが、すでにリンクされている回答。 下回って実行することroot
はお勧めしません。
一般的にFUSEは、ルート権限を持たないユーザーがファイルシステムをマウントして使用するための一般的な方法として設計されています。彼ら自身実際の管理者に迷惑をかけずに、他のユーザーとファイルシステムを使用するには、カーネルと、 を実行できる管理者からのサポートを受けるのが正しい方法ですmount
。
私の知る限り、UnionFS をカーネル モジュール (FUSE ではない) として持つことは可能ですが、メインライン カーネルには含まれていないため、自分でビルドする必要があります。私の理解が正しければ、カーネルに実装された UnionFS は期待どおりに動作するはずです。
私のKubuntuではOverlayFS(代替案) はカーネル モジュール (FUSE ではない) として既に存在します。