CentOS 7で、ルートディレクトリの所有権を持つWordPress Webサイトを作成しましたウェブサイト名:ウェブサイトグループおよびディレクトリ権限755、ファイル権限644デフォルトで設定
開発者がWordPressダッシュボードにログインし、メディアに何かをアップロードしたりプラグインをインストールしようとすると、WordPressは書き込み権限がないと表示します。
次に、wp ルート ディレクトリに g+w 権限を与える必要がありました。そうすると、プラグインをインストールしたり、メディアをアップロードしたりできるようになります。
メディアをアップロードした後、アップロードされたプラグイン/メディアの権限は次のように変更されます。アパッチ:アパッチからウェブサイト名:ウェブサイトグループ
どうやって回避するのですか?
- 開発者がプラグインをインストールしたりメディアをアップロードしたりできるように、wp ルートディレクトリに g+x 権限を付与します
- wp dashboardからのアップロードの所有権はapache:apacheに変更されるべきではありません。
私が試したこと
現在、これを阻止する代替手段は見つからず、毎回g+w権限を与え、開発者の作業後に元に戻す必要がありました。
答え1
Web サーバー (または設定によっては PHP プロセス) には、ディレクトリへの書き込みアクセス権が必要です。唯一の実行可能な方法は、ユーザーとしてそのプロセスを実行することですwebsitename
。
apache
基本的に別のオプションとしては、ACL 経由でユーザーに書き込み権限を与えるか、ユーザーをグループに追加することが考えられますwebsitegroup
が、その場合もアップロードされたファイルの所有者が になりますapache
。すべてのファイルとフォルダーを に所有させたい場合は、websitename
そのユーザーとして Web サーバーを実行する必要があります。
答え2
これがどのようにプロビジョニングされるかについての説明は役に立ちません。最初から始めましょう。
ユーザー:
- apache - PHPランタイムが実行するuid
- dev1、dev2、dev2 - 開発者
- バックアップ - サイトのバックアップを作成するため
- サポート[n] - 問題を調査するため
Wordpress の設計上、「apache」がサイトに対して完全な読み取り/書き込みアクセス権を持っていない限り、操作するのは非常に困難です。
すべての管理がWeb UI経由で行われる場合、開発者はどれでもドキュメント ルート内のファイルへのアクセス。ただし、開発者が更新されたファイルへの CLI アクセスを日常的に使用しているサイトを見たことがあります。そのため、読み取り/書き込みアクセスが必要であると想定します。
バックアップ UID にはファイルへの読み取り専用アクセスが必要です。
サポートにはファイルへの読み取り専用アクセスが必要です。
残るのはサイト ユーザーだけです。これがあなたの構成です。これをどのように使用しているかについての追加情報がなければ、完全に冗長であるように見えます。
したがって、アクセスのクラスは読み取り+書き込みと読み取り専用のみです。ただし、面白半分に、アクセスなしのクラスも追加して、このユーザーを「エイリアン」と呼ぶことにします。
ユーザーの所有権は常にファイルを作成する uid によって決定され、ユーザーごとに単一の値を持ちます。そのため、これをアクセスを許可するメカニズムとして使用することはできません。
ただし、ユーザーは複数のグループに所属することができ、各グループには複数のユーザーを含めることができます。そのため、読み取り/書き込み権限を特定のグループに関連付けることができます。これを webupdate と呼びます。
残るのは読み取り専用アクセス (バックアップとサポート) であり、これは「その他」の権限ビットを介して提供できます。
しかし、それではどうやって「エイリアン」を排除するのでしょうか?エイリアンがアクセスできないディレクトリにサイトを置くことで、エイリアンのいる人々を識別する別のグループが必要になります。いくつかのアクセス。これを Web アクセスと呼びます。
グループのメンバーシップは次のようになります。
- webupdate: apache、dev1、dev2...devn
- webaccess: apache、dev1、dev2...devn、バックアップ、サポート[n]
次に、ディレクトリ、権限、所有権を示します。
drwxr-x--- root:webaccess /var/www/SITENAME
drwxrwxr-x ????:webupdate /var/www/SITENAME/html (document root)
すべて順調ですが、「webupdate」の誰かがドキュメント ルートに新しいファイルまたはディレクトリを作成すると、グループの所有権は webupdate ではなく、そのグループの DEFAULT グループになります。ディレクトリの setgid ビットを使用して、この動作を変更できます。
drwxrwSr-x ????:webupdate /var/www/SITENAME/html
パズルの最後の部分は、webupdate のメンバーの umask が 00x に設定され、新しいファイルとディレクトリが正しい権限を取得することを確認することです。sftp サーバーと対話型シェルの sshd_config でこれを設定することを忘れないでください。
したがって、グループを配置したら、次のコマンドを実行できます。
chown -R apache:webupdate /var/www/SITENAME/html
chmod -r g+s /var/www/SITENAME/html
これで完了です。権限を再度修正する必要はなくなります。