さて、今日もやらかしたので、メモ。今、ubuntu + nginx + hhvm + mariaDB の wordpressサーバーを建てて、何人かの友達に使ってもらう環境を整えている
その時に、wp-content 以下の SFTP 経由で編集出来るようにしようとしたところではまり、また、やらかしちゃいました。このサイトの内容はやらかしたことだらけですね。
やりたいことは、wordpressの管理画面からテーマやプラグインのインストール、画像をアップロードした際に出来るファイルのパーミッションを 644 から 664 に変えたい。
結論から書いてしまうと、本家のデフォルトパーミッションの上書きという項目にやり方の手本が書いていました。簡単に引用すると
wp-config.php に define(‘FS_CHMOD_DIR’, (0775 & ~ umask())); と define(‘FS_CHMOD_FILE’, (0664 & ~ umask()));
を記述するだけです。
すでに、wp-content 以下のディレクトリのパーミッションが 755 で作られているときは、775 に変更しなければ、上記の記述をしても、ファイルは、644で出力されます。
あとは、この解決に至るまでのもろもろを書き記しておきます。お時間あればお付き合いください。
まず、 システムがファイルを作成するときにどういうパーミッションにするか決めてるのが umask です。umask は引数に与えた数値を ディレクトリは 777 から、ファイルは 666 から引いた結果をパーミッションにするというものです。
例えば、umask 022 でファイルを作成すると 666 – 022 = 644 となり、パーミッション 644 のファイルが出来上がります。
ubuntu の umask の初期値は 002 となっているので、そのままでも望み通りの パーミッション 664 のファイルを作ってくるはずでしたが、644 でした。
そこで、まず、nginx がいたずらしていると思い、/etc/init.d/nginx に umask 002 を追記しました。それでも、治らなかったので、今度は hhvm の責任をなすりつけました。/etc/init.d/hhvm に umask 002 を追記しました。それでも、治りませんでした。
つぎに、上位のディレクトリのパーミッションが影響していると考え、plugins ディレクトリより上のディレクトリのパーミッションを全て 775 に変えました。しかしながら、以前として、644 のファイルしか生成してくれません。
しかたがないので。ルートディレクトリで
sudo find ./ -type f -print | xargs grep ‘umask’ > out.txt
と打ち込んでやりました。5分ほどかかりましたが、ubuntu内のファイルの中に umask という文字列を拾い上げることが出来ました。
予想に反して1600個ぐらい引っかかましたが、その中に wordpressのファイルが含まれているのを見つけました。class-ftp.php というファイルです。ftp経由ではつないでないですが、SetUmask と関数は怪しいので、これを書き換えるフックが無いか、探ししたところ、wp-config.php に追記するだけで終わることが判明しました。
結果的は nginx が悪い、hhvm が悪いとおもったところに時間をかけ過ぎてしまいました。まさか wordpressだけで解決できるとは….