FFFTPで上書きアップロードできるようになるまでの顛末

VPS
この投稿は最終更新から8年以上経過しているため、内容が古くなっている可能性があります。

553 Could not create file

WordPressでフォルダやファイルをアップロードする際に出るエラー「553 Could not create file.」。

頻繁にファイルを書き換えることも無いので、これまではダッシュボード内で作業するか、アップロード可能なディレクトリに一旦ファイルを上げてからコマンドを使って移動させていたのですが、さすがに面倒臭くなってきたのでFFFTPで直接アップロードできるようにパーミッションと所有者を見直してみました。

このブログのWordPressはNginxで動いていますが、Apacheでもやることは同じだろうと思います。
また、今回は「themes」ディレクトリ内について書いていますが、他のディレクトリでも同じです。

はじめに、現在の状況を確認しておきます。

使用しているテーマのディレクトリのパーミッションは「755
所有者は「nginx
グループも「nginx」でした。

これを「ls -la」コマンドで確認すると次のような表示になります。
まずはwp-contentへ移動。

cd /ドキュメントルートへのパス/wp-content

使用しているテーマのディレクトリ名を「hoge_child」ということにして進めます。
ls -la」コマンドでthemesディレクトリのパーミッションと所有権を確認。

ls -la themes
drwxr-xr-x nginx nginx hoge_child

「drwxr-xr-x」はパーミッション755を示しています。
2つ目の「nginx」が所有者で、
3つ目の「nginx」が属しているグループです。

hoge_child」の「パーミッション」と「グループ」は問題無いので、「所有者」を変更します。
FFFTPにログインできるユーザに書き込み権限が無いというのが、今回の原因です。

ここでは、FFFTPにログインできるユーザをmndanglerというID名だとして進めます。

mndanglerは「nginx」グループが所有するディレクトリ内に対する書き込み権限を持っていません。
ですので、単純に所有者をmndanglerに変更しただけでは、上書きアップロードは「553」で拒否されてしまいます。

そこでmndanglerを「nginx」のグループに所属させてあげます。
mndangler = nginx」とすることで権限を得るわけです。

この作業にはroot権限が必要になりますので、あらかじめスーパーユーザに変身しておきます。

su

スーパーユーザになったら、まずは現在のmndanglerのグループ所属状況を確認します。

私の場合は以下の様な所属状況になっていました。

id mndangler
uid=500(mndangler) gid=500(mndangler) 所属グループ=500(mndangler),10(wheel)

結果は人それぞれ異なると思いますが、普段VPSにログインして作業するユーザとFTPを使うユーザが同じIDな場合は、そこから更にSUDOコマンドを使えるように「wheel」グループにも所属しているのではないでしょうか。

上記の例では、所属しているグループは「自分自身(=500)」と「10(wheel)」の2つです。
では早速mndanglerを「nginx」のグループにも所属させましょう。

gpasswdというコマンドを使用します。

gpasswd -a mndangler nginx

gpasswd」コマンドのオプション「-a」でmndanglerを「nginx」グループへ加えています。
順番に気をつけて入力して下さい。

無事に所属できたか確認してみます。

id mndangler
uid=500(mndangler) gid=500(mndangler) 所属グループ=500(mndangler),10(wheel),496(nginx)

所属グループに496(nginx)が追加されていればOKです。

これで「FTPユーザ = mndangler = nginx」が全て同じグループということになりました。

FTPにログインするユーザとVPSの作業用ユーザのIDが異なる場合でも、サーバの実行者である「nginx」と同じ権限を持てれば良いわけなので、「FTPユーザ = nginx」を同じグループにすればOKです。

テーマディレクトリに移動して、所有者を変更します。
mndangler部分は適宜変更して下さい。

cd /ドキュメントルートへのパス/wp-content/themes
chown mndangler:nginx hoge_child

「ls -la」コマンドでも確認します。
1つ上のwp-contentに移動して、

cd ../

確認。

ls -la themes
drwxr-xr-x mndangler nginx hoge_child

これで所有者は「mndangler = FTPユーザ = nginx」、グループは「nginx」となりました。

一段落付いたものの、これで終わりではありません。
実際に上書きしたいファイルやフォルダのパーミッションも変更する必要があります。

上書き保存したいファイルならパーミッションを「664」に、
上書きしたいフォルダならパーミッションを「755」に変更します。

例えば「style.css」を上書きアップロードできるようにしたいのであれば、

chmod 664 style.css

としておけばFFFTPで直接上書きアップロードができるようになっていると思います。

編集作業を終えたあとはセキュリティアップのために、元のパーミッションに戻すなどしておきましょう。