wordpress のセキュリティーとパーミッション

色々試していくうちに問題が出てきました。プラグインのインストールでエラーが出たりしていました。結局 https://qiita.com/holdout0521/items/f4d81f27886b623c5ef0 を参考に所有者を変更しました。色々権利を見ても何でapacheが書き込み権限を持たないといけないのか理解できない部分が沢山あるのですが?(例:ルート直下のwp-config.php と .htaccess 以外は書き込み権限が必要?。又 wp-includes/images の各ファイル。images ディレトリーに書き込み権限が必要なのはわかるのですが、なんでファイル自体に必要なの?)兎も角、上記のWEBを参考に変更しましたが、勿論nginxとグループはapacheに、そしてファイルは600、directory は700、wp-config.php と .htaccess は400(selinuxをdisable にしてから root で変更出来る。自宅にサーバーがあるのでrootになれる)
というわけで、ここから下は参考にしないでね!!

最初にお断りしておきますが、これから述べる事はあまり自身がありませんので、まったくの私見として捉えて下さい。又、エキスパートの方からご意見を頂けると幸いです。
先ずは大前提です。私のWEBサーバーは自宅にあり、KVMを使いサブホストで運用しています。なのでroot権限があります。多くのワードプレス関連のセキュリティーページを見ると一番大事なファイルであるワードプレスのルート領域にあるwp-config.phpを600とか400にしろとあります(でもファイルのオーナーには触れていないので、これでは誰がオーナーなのかわかりませんでした)。でも私の場合はapacheに読み込み権限を与えないと画面が真っ白になります。

私の場合は前に述べたようにroot権限がありますので、apacheにする必要は無いし、ワードプレス本体のサーバーへのインストールも直接ダウンロード→コピペができます。私の理解では全てのファイルやディレクトリーはapacheが読めること、一部のディレクトリーはapacheが書き込むので書き込み権限があること。という事で設定
オーナーとグループを設定。
# chown -R LINUXのユーザー:apache ワードプレスのルートのパス
例:chown -R abcd:apache /var/www/wp
次に全てのファイルのパーミッションを変更
# find ワードプレスのルートのパス -type f -print | xargs chmod 640
次にディレクトリー
# find ワードプレスのルートのパス -type d -print | xargs chmod 750
次にapacheが書き込むディレクトリー
# find ワードプレスのルートのパス/wp-conrtent/plugins -type d -print | xargs chmod 770
# find ワードプレスのルートのパス/wp-conrtent/themes -type d -print | xargs chmod 770
# find ワードプレスのルートのパス/wp-conrtent/updraft -type d -print | xargs chmod 770     → これは私がUPDRAFTをインストールしているので無い環境もある
# find ワードプレスのルートのパス/wp-conrtent/upgrade -type d -print | xargs chmod 770
# find ワードプレスのルートのパス/wp-conrtent/uploads -type d -print | xargs chmod 770
# find ワードプレスのルートのパス/wp-conrtent/wpdm-assets -type d -print | xargs chmod 770     → これは必ずしもアルトは限らない。

最後にルート直下にあるwp-config.phpのパーミッションの変更(念の為)
# chmod 440 ワードプレスのルートのパス/wp-config.php
ユーザーも書き込めないがrootになれば変更できる

この作業の後に確認(参考:https://www.nedia.ne.jp/blog/tech/2017/08/22/9188
*WordPress管理画面へのログイン
*記事の投稿及び画像のアップロード
*プラグインの追加と削除
*テーマの変更

ここでプラグインをインストールしようとするとFTPの画面になり直接インストール出来無いので、wp-config.php の最後に
/** プラグインのインストール時にFTPになる時に追記 */
define(‘FS_METHOD’,’direct’);
を追記。この原因は不明、試しにオーナーをapacheにすると問題ないので、どこかのファイルかフォルダーに書き込み権限がいるんだろう?
又、テストの為テーマをインストールしようとすると最後に
インストールに失敗しました。ファイルをコピーできませんでしたとなる。
でも何もせず再読み込みをするとエラーは無く。又wp-content/themaes/インストールしたテーマ は出来ているし、ディレクトリー関係は755でファイルたちは644だった。だとしたら問題ないのでは、テーマを切り替えても大丈夫の様だ(テストなのでトップページしか見てないが)。テーマの削除も問題なく出来る。

2022-2-28 追記:
上記の方法の他に
# find ワードプレスのルートのパス/wp-conrtent/wpdm-assets -type d - exec chmod 770 {} \;
とする方法もあるみたい。
find の -exec を使うか | xargs を使うかは https://techblog.kyamanak.com/entry/2018/02/12/202256 が参考になります。
ただ、ファイル名にスペースが含まれているものがあると、xargs ではエラーが出た。これはfind がファイル名をスペースで区切って違うファイルとして扱うから。例えばファイル名に2つのスペースがあると、ファイルが3つあると解釈する。-exec ではエラーが出ない。

f-otake について

1947年生れ、東京電機大学二部電気通信工学科卒、最後はスリランカ航空で営業だったのですが2018年に㈱インパック・ジャパンに再就職。趣味:登山、スキー、車いじり、コンピューター
カテゴリー: WordPress関連メモ パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください