ディレクトリに書き込むWebサーバーの正しい解決策は何ですか?

ディレクトリに書き込むWebサーバーの正しい解決策は何ですか?

だから、「配布」ユーザーを持つボックスがあります。展開ユーザーはコードストアを所有し、WordPressはそのシステムで実行されています。

WordPressがプラグインのアップロードなどの操作を試みるとき、ユーザー「www-data」を使用して「wp-content/plugins」に書き込んでいます。明らかにzipファイルをアップロードして解凍してからzipファイルを削除するようです。

WordPressでこれらの操作を実行できない問題が発生しました。私の完全なコードストアが所有者とグループ:「deploy:deploy」に設定されているため、www-dataはそのリポジトリにアクセスできないようです。

だから私の最初の試みは、配布グループにwww-dataを追加することでした。

usermod -a -G deploy www-data

このコマンドを実行した直後、私はもはやボックスにSSHでアクセスできないことを発見しました。私はなぜそんなに混乱しています。誰でも私にこれを教えてもらえますか?だから私は最終的に次のことをしました。

chmod -R go-w ~

その後、再びsshを行うことができます... "groups www-data"を実行すると、オプションの1つとして配布が表示されます。行きました。そうでした。 .....堀を倍増すると完璧に動作します!

しかし、いいえ...プラグインのアップロードに失敗しました。

少し騒ぎの終わりにApacheの設定に行き、APACHE_RUN_USER&GROUPを「配布」に変更しました。

問題が解決しました... 一種の。 Apacheをメインユーザーとして運営するという考え以外は本当にひどいと思います。

とにかくこのように変更した後、プラグインのアップロードが成功し、次の内容が表示されます。

drwxr-xr-x 8 deploy deploy 4096 Oct 22 21:28 wp-crm

したがって、グループには書き込みアクセス権がありません。これがなぜ失敗するのかについてのヒントになる可能性があると思いました...しかし、デプロイメントを使用して書かれたという事実は実際にはヒントではないことを意味します...配布されたumaskがどのように設定されているのか。

だから...解決策が何であるかわかりません...

私のwp-contentグループをwww-dataに変更する必要がありますか?

それともここで別のものを見逃していますか?

答え1

最も簡単な解決策はファイルシステムACLです。私はその設定に同意するかどうかわかりません(ディレクトリが静的ではなく一時データを保存するために別のディレクトリを使用していないため)。しかし、それは別の話です。

www-dataファイルシステムACLを使用すると、一般権限で許可されていない場合でも、ユーザーに特定のディレクトリへのアクセス権を付与できます。

例えば

setfacl -R -m user:www-data:rwx wp-content/plugins
setfacl -d -R -m user:www-data:rwx wp-content/plugins

最初のコマンドは、www-data読み取り+書き込み+実行権限wp-content/pluginsとそれに含まれるすべての権限を(再帰的に)付与します。 2番目のコマンドは、で作成されたすべての新しいファイルとフォルダがwp-content/plugins指定されたACLを持つように(したがって読み取り+書き込み+実行が可能になるようにwww-data)、デフォルト権限を設定します。

答え2

残念ながらusermod -G 変えるユーザーグループ。あなたが欲しいusermod -G -a

関連情報