Linuxでapacheやroot所有権のファイルをFTPのユーザーでも上書きや削除をできるようにする方法

Linuxでapacheやroot所有権のファイルをFTPのユーザーでも上書きや削除をできるようにする方法の画像

FTPでファイル操作するのがやっぱり楽なので、上書きとかしちゃいたい時ありますよね?
でも実際にapacheやrootなどスーパーユーザーに所有権があるファイルに対して上書きアップロードなどしてみると、「Permission denied」って怒られたりしたことありませんか?
ありますよね?

以前は、よくわからなかったので僕は仕方なく、SSHでつなげて、所有権を一旦FTPユーザーに一旦変更してから上書きしてまたapacheに所有権を返すというメンドクサイことをやってました。
例えば、
FTPユーザー:hogehoge
上書きしたいファイル名:test.html
ということにすると以下の感じでやってました。

# sudo chown hogehoge text.html

所有権をFTPユーザーに変更する。そしてファイルを更新した後に

# sudo chown apache text.html

apacheに所有権を返す。

うん、めんどくさい。一々SSHで所有権変更とかメンドクサイ。やってられっか。

これの解決方法がありました。
FTPユーザーをapacheのグループに所属させてしまえば全て解決です。
なんでこんな簡単なことをいままで気が付かなかったのだろう。

1. apache のグループにユーザーを追加する。

以下のコマンドを実行してユーザーをapacheグループに所属させます。
※hogehogeはユーザー名

# gpasswd -a hogehoge apache

以下のコマンドで apache グループにユーザーが追加されているか確認する。

# less /etc/group

実行してみて、「apache:x:48:hogehoge」の行があれば問題なく追加されています。

2. 上書きしたいファイルのパーミッションを664に変更する。

ユーザーの権限は、apacheグループに所属しただけなので、通常の644だと何もできません。
グループにも上書きや削除の権限を付与してあげましょう。

# sudo chmod 664 text.html

もし、Movabletypeを使用しているのなら、mt-config.cgiにファイル生成時のパーミッションを指定してあげましょう。

HTMLUmask 0002

これで、再構築されたファイルは664で生成されるようになります。

補足事項・注意事項

apacheグループから削除したい場合

逆に、apacheグループに追加したユーザーを削除したいときは、以下のように -d にすることで削除できます。

# gpasswd -d hogehoge apache

他のやり方(usermod)の場合

なんかよくグループに追加する方法で以下ようなコマンドが紹介されている場合があります。

# usermod -G apache hogehoge

でもこれを意味もよくわからずに安易に実行してしまうと、今までグループ登録していたものを全て消してから、apacheに全移行みたいな動作をしてしまいます。
なにか他のグループたとえば、rootやwheelなどにも所属させているなら絶対にやめたほうがいい。
sudoコマンドとか効かなくなります。