0

シナリオは次のとおりです。

特定のディレクトリにPDFファイルを書き込むWebアプリケーション(php、mysql)があります:/ var/www/myapp/tmp。次に、Gearman (端末から実行されるワーカー php スクリプト) を使用して、これらの pdf ファイルからプレビュー画像を生成します。ワーカー スクリプトは、/var/www/myapp/tmp ディレクトリにシンボリック リンクされている (ワーカー スクリプトが myapp と同じサーバーで実行されている場合) か、NFS を使用してそこにマウントされている /etc/mount/tmp の tmp ディレクトリにアクセスできます (ワーカー スクリプトが別のサーバーで実行されている場合)。

アプリは chmod 0777 で tmp にサブフォルダーを作成します。これらのサブフォルダーに pdf ファイルが配置されます。ワーカーは共有 tmp ディレクトリからファイルを取得し (問題ありません)、プレビュー イメージを生成し、共有 tmp ディレクトリにプレビュー イメージを書き込む必要があります。

問題

すべてをローカル(クライアント、ジョブサーバー、ワーカー)で実行すると、この問題が発生するため、シンボリックリンクされた tmp フォルダーを使用すると、次のようになります。

サブディレクトリは書き込み可能ではないため、結果を書き込むことができず、ワーカーは失敗します。

これで、pdf ファイルは Web アプリ/gearman クライアントによって書き込まれ、ユーザー _www によって所有されます。ワーカースクリプトはApacheを介して実行されず、別の所有者(端末にログインしている私)の下で実行されるため、これらの権限の問題が発生すると思います。

0777 のアクセス許可を使用してフォルダーを作成したため、フォルダーが書き込み可能ではない理由がよくわかりません。シンボリックリンクはこれと関係がありますか?

いずれにせよ、この問題を適切に修正する方法がわからないため、クライアントとワーカーの両方が同じフォルダー内でアクセス許可の問題なしに作業できます。誰でも助けることができますか?


アップデート

最初の問題は umask のようで、それを 0 に設定するとフォルダーは書き込み可能になりますが、それでもパーミッションを 0777 に設定する必要があります。どうすればより安全にアプローチできますか?

4

1 に答える 1

1

同じフォルダーに書き込むためにApacheやその他のサービスが必要な同様の状況に遭遇しました。そこで、必要なすべてのユーザーを「ファイラー」グループに追加することを選択し、必要なフォルダーのファイラー グループに rwx 権限を与えました。

mpurcell@service1 ~ $ -> id apache
uid=48(apache) gid=48(apache) groups=48(apache),507(filer),509(logger)

mpurcell@service1 ~ $ -> id mpurcell
uid=500(mpurcell) gid=502(mpurcell) groups=502(mpurcell),10(wheel),501(webdev),507(filer),509(logger)

mpurcell@service1 ~ $ -> ls /home/db/permfile/
total 12
drwxrwsr-x. 3 filer filer 4096 Feb 13  2012 .
drwxrwxr-x. 4 filer filer 4096 May  5  2012 .. 
drwxrwsr-x. 6 filer filer 4096 Dec 24 00:41 app

私はまだ Gearman をいじっていませんが、あなたの特定の例では、ワーカーが実行しているユーザーと Gearman サービスも Filer グループに追加する必要があります。

于 2013-02-20T18:41:23.243 に答える