FTPでファイル操作ができない時の対策: 所有グループの編集

2013年5月17日

皆さんこんばんわ。夜にブログを更新するのは久々です。
金曜なのに飲んでもいないのか寂しい奴だとか思わないでください。もともと飲めません(爆)

このあいだ自分用にTransmitを買いました!動きがいちいちスタイリッシュ(?)でかっこいい。
これからどんどん使っていくぞ☆と言いたいところなんですが、FTPが使いこなせない現象にぶち当たっているので、そこの改善から…(;´ρ`)

FTPでファイル操作ができない

WordPressのバックアッププラグインについて書いていたときに、ファイルの所有者問題でFTPソフトでのファイル操作ができないことに気付きました。
それとほぼ同時にやってきたお問い合わせ。

パーミッションの影響と思いますが、ログイン後一切のファイル変更の操作が行えません。
「情報を見る」メニューで確認すると、すべてのファイルが「755」の状態です。
Webminとか使って設定できたりするのでしょうか?

サトさんのブログには特に書いてないんですよね、この辺のことは…。
この後WordPressのインストールをやりたいと思っています。


俺ぁぁ申し訳ねえ!知識不足で申し訳ねえ!!自分でも気付かなかったんだよ…(;´Д⊂)
サポートセンターはいつもの「ノンマネージドなので自力で頑張ってねー」な回答でしたが、ここはサト自身も解決しなきゃいけない問題なので、体験記として書いておきます。

ファイル操作ができない原因

「ファイル所有者がapacheになっている」
WordPressのインストールはブラウザ上で行いました。
WordPressによって自動生成された大量のファイルやディレクトリの所有者(オーナー)は全てapache。

apacheのみが読み書き実行OK、それ以外のユーザーは書き込み不可。
FTPに一般ユーザーでログインしている状態では、何の操作も行えません。

試してみたこと

失敗談も全部書いておきます。
単純に、所有者を一般ユーザーに変更しようとしました。コマンドラインでとりあえずhtmlディレクトリ内全部。
# chown -R username:username /var/www/html
あかーん、サイトが真っ白ー!!
そうか、WEBサーバーソフトウェアであるapacheから権限を奪ってしまうとサイト表示もできないのか。
じゃあFTPで実際に操作するwp-contentディレクトリのみにしてみたらどうだ?いったん元に戻してから
# chown -R username:username /var/www/html/wp-content
今度はちゃんと表示されてる。
でもapacheに権限がないということは、wp-content内にあるpluginsにも書き込みできないから、管理画面からプラグインインストールができなくなっているということか…?
試しに何かインストール。

いつぞやのHello Dolly。

やっぱり…。インストールのたびに接続情報を入力するのはめんどくさい。
uploadsディレクトリもこの中だから、管理画面から画像のアップロードもできなくなってるかも。FTPソフトでファイル操作ができたとしても、管理画面がこれじゃあ実用的じゃない。
ということで所有者設定を元に戻して別の策を…。

一般ユーザーをapacheグループに所属させる

一般ユーザーをapacheグループに追加して、ディレクトリのパーミッションをグループ書き込みOKにしたら解決できました。

グループの追加

まず現在の一般ユーザー(usernameとします)の所属グループを確認してみます。groupsというコマンドで確認できます。
# groups username
username : username
左側がユーザー名で、右側が所属グループ名。基本はユーザー名と同じ名前のグループに所属しています。
apacheの場合は…
# groups apache
apache : apache
これも同じで、apacheという名前のグループに所属しています。
じゃあusernameをapacheグループに追加しましょう。
usermod(ユーザー情報を編集する) -G(サブグループを指定) apache(このグループに入れる) username(この人を)
# usermod -G apache username
usernameの所属グループを確認してみると…
# groups username
username : username apache
2つめのグループとして、apacheグループに入ることができました!

ディレクトリのパーミッション変更

例えば、前回ファイルをアップロードすることができなかったbackup-dbディレクトリ。
以前書いたパーミッションの見方の図を参考にするとわかると思いますが、所有者と所有グループに全ての権限を付与し、その他ユーザーからの書き込みを禁止する場合のパーミッションは775になります。
backup-dbディレクトリは現在755で、グループの書き込みが禁止されているので、これを775に変更してみます。
chmod(アクセス権を変更する) -R(中身のファイルも含めて全部) 775 ディレクトリの場所
# chmod -R 775 /var/www/html/wp-content/backup-db
変更できました!

FTPソフトからファイルをアップロードしたりファイル名を編集したり、削除もやってみましたが、問題なくできました。

ただし既存ファイルのパーミッションの変更は行えませんでした。でもこれはセキュリティや誤操作防止的にもこれでいいような気もする。

逆のグループにも入れてみた

成功したのはapacheグループにusernameを追加する方法ですが、ファイルの所有者をusernameにし、usernameグループにapacheを追加する方法も試してみました。
でもこれは失敗。原因はわかりませんが、WordPressの管理画面で「FTPにアクセスできない」と言われました。
ですので「ユーザーをapacheグループに」が良いようです。

人によって環境は違います

  • ディレクトリの所有者はapache
  • 一般ユーザーはapacheグループに所属する
上記によって、WordPress管理画面からのプラグインインストールも、一般ユーザーでのFTPソフトからのファイル操作も行えるようになりました。
でも全ての方がサトと同じ結果になるとは限りません。そしてこれが最適な方法なのかもサトにはわかりません。
1人でサーバーを使うか、権限を分けて複数人で使うかでも設定が変わってくるし、WordPressの運用方法によっても最適環境は変わると思います。
私のように無理矢理一般ユーザーでFTPログインしようとせずとも、apache自体でログインするという方法もあります(運用的にどうなのかわかりませんが)。
1人の体験記として、参考にしていただけたら幸いです。
もっと良い方法を知ってる方、是非教えてオシエテ(´Д`人)

——————–

頭沸いちゃわない程度に頑張ります。