この記事を三行にまとめると
所有者がapache先輩のファイルを上書きしたい先輩のグループに入って書き込み権限をもらおう
人の女にはむやみに手を出しちゃダメ
FTPでファイルを上げたり落としたりしていますと、ときどき「パーミッションがないからそのファイルは操作できないよ〜」的なことを言われることがあります。
よくあるのが、SSHで接続してスーパーユーザーで作成したファイルとか、ウェブサービス経由でアップロードしたファイルとかですかね。rootで作成した場合、当然ながらファイルの所有者はrootですし、ウェブからアップした場合は、設定を自分でいじったりしていなければ、まずapacheになりますね。
例えば今、これらのファイルを上書きしたい。編集したものをFTP経由で上書きしたい。下っ端のしがないFTPユーザーごときわたくしが、root部長やapache先輩が所有しているファイルを上書きしたい。上司の奥さんや先輩の彼女に欲情して上にまたがってしまうかのごとく上書きしたい。人の女を自分色に上書きしたい。まあ、よくあることです。
あるいは逆に、FTP経由でアップロードしたファイルを、apache先輩が上書きする場合。これも、ファイルのパーミッション次第では権限がないって言われて変更とかできない場合がある。Wordpressなんかでたまにあるような気がするんだけど、パッケージを一式、FTPからアップして、後日、管理画面からバージョンアップの更新とか行なうと、権限がないからアップデートできませんでしたみたいなことを言われることがある。
まあとにかく、そんなときはどうするかっていう話。
方法はいくつかある。
権限がないのは仕方ないし、もしかしたら下手に上書きとかするとまずいファイルかもしれないから、基本的にそういうファイルはFTPから操作しない方が無難って場合もあると思う。
それでもどうしても上書きしたいってときには、SSHで接続するとかして、スーパーユーザーがそのファイルをのパーミッションを変更する。FTPユーザーでも上書きできるように「chmod」コマンドでパーミッションを変えるか、「chown」コマンドでファイルの所有者を変えるか。
例えば、変更したいファイルが「sample.txt」で、FTPユーザーの名前が「akatsuki」だとしましょうか。
こうですね。変更が終わったら、またスーパーユーザーで権限を元に戻すか、まあ問題なければそのままでも良いですけど。
場合によっては毎回この操作をしなきゃいけないから面倒だけど、それくらいは我慢できるっていうのなら、こんなやり方もありますね。
間違ってファイルを消してしまうのはどう考えても俺が悪い
httpd.confの中には「User」と「Group」っていう設定項目があって、デフォルトではこれがapache先輩になってます。だから、これをFTPユーザーに変えてしまう。
これでapacheを再起動すればオーケー。ウェブ上のフォームから上げたりしたファイルの所有者がakatsukiになるので、FTP上でも上書きができる。
ただこれは、前回も書いたし、未だによく分かってないけど、何か良くない影響が出るかもしれない。だから、やりたければ自己責任でってくらいに認識しといた方が良いかも。
でも勇気を出してapache先輩のグループに入れてもらえば、ファイルの所有者がapache先輩でも、グループの書き込み権限のあるファイルはFTPユーザーが上書きできるようになる。
やり方は簡単です。「お願いします先輩!」って言うだけでオーケーもらえるくらい簡単。「先輩の彼女を抱かせてください!」ってお願いするよりも遥かに簡単。
これでapache先輩のグループに入れてもらえました。不良に絡まれても大丈夫。「てめーどこ中だ、あーん?」とかメンチ切られても「良いのかよ、俺にそんな口聞いて。おめー、apache先輩知ってんだろ? 俺、あの人の下についてっからよー」とか言い返せば、ビビって手を出してこないはずだ。
ただしグループに入れてもらえたからと言って、ファイルのパーミッションが「644」とかだと、結局のところ、書き込み権限はないです。「664」とかじゃないとダメ。
なので、もしPHPでファイルのアップロード処理を書いたりしているのであれば、アップロード後にPHPのchmod関数を使って、パーミッションを変更するのが良いですね。
こんな感じでしたっけね。
ちなみに、usermod以外にも、gpasswdっていうコマンドでも追加できる。こっちは追加だけじゃなくて、追加したユーザーを削除とかもできるから、こっちを覚えた方が良いのかもしれないね。
usermodのときは「グループ名・ユーザー名」の順番だったけど、gpasswdは逆になってるので注意っすね。
ついでに、これはインストールしているFTPサーバーがvsftpdだったらっていう前提になりますけど……vsftpd.confの設定で、FTPからファイルをアップロードしたときのパーミッションを変えることができます。
基本的に初期の状態では、FTPからアップロードしたとき、ファイルのパーミションは「644」になってると思います。実際にFTPにファイルを上げて、確認してみれば分かります。
これは、vsftpd.confでそういう風に設定されているからなんですね。だからこれを変更して、FTPからアップするファイルのパーミッションを「664」にしてみる。
たぶん、vfstpd.confは「/etc/vsftpd/」の下にあると思いますので、それをviモードで開いて「local_umask」という項目を探し、「022」ってなってたら「002」に変更する。022ってのはパーミッションが644で、002ってのはパーミッションが664の状態を表す。編集が完了したらvsftpdを再起動。
これでFTP経由でファイルをアップした場合は、パーミッションが「664」になりますので、グループの書き込みが許可された状態になります。
もちろん、このファイルをapache先輩が上書きとかしたいなら、さっきのusermodとかgpasswdで、apache先輩をFTPユーザーのグループに追加してください。
まあ、vsftpdじゃなくても、unixにはumaskってコマンドがありますから、それでファイルのデフォルトのパーミッションをいろいろと変更することができます。
でも今回はそれをやらなかったので、それについてはまたいずれ。書く機会があれば。今のとこは、もうしわけねっすけど、各自ググってくだせえ。
こんな感じですねー。
まあ方法は一つじゃないってことで、どうしてもムラムラが抑えられないときには、いろんな手段を模索して鎮めるのがよろしいってことですね。
でも上司の奥さんとか先輩の彼女に手を出すのは止めた方が良いと思います。納期直前なのに全然終わりの目処が立たなくて派手にデスマってるプロジェクトくらいの修羅場を迎えることになるから。
よくあるのが、SSHで接続してスーパーユーザーで作成したファイルとか、ウェブサービス経由でアップロードしたファイルとかですかね。rootで作成した場合、当然ながらファイルの所有者はrootですし、ウェブからアップした場合は、設定を自分でいじったりしていなければ、まずapacheになりますね。
例えば今、これらのファイルを上書きしたい。編集したものをFTP経由で上書きしたい。下っ端のしがないFTPユーザーごときわたくしが、root部長やapache先輩が所有しているファイルを上書きしたい。上司の奥さんや先輩の彼女に欲情して上にまたがってしまうかのごとく上書きしたい。人の女を自分色に上書きしたい。まあ、よくあることです。
あるいは逆に、FTP経由でアップロードしたファイルを、apache先輩が上書きする場合。これも、ファイルのパーミッション次第では権限がないって言われて変更とかできない場合がある。Wordpressなんかでたまにあるような気がするんだけど、パッケージを一式、FTPからアップして、後日、管理画面からバージョンアップの更新とか行なうと、権限がないからアップデートできませんでしたみたいなことを言われることがある。
まあとにかく、そんなときはどうするかっていう話。
方法はいくつかある。
一つ。我慢する
たとえ上司の奥さんや先輩の彼女がものすっっごい美人で、もう何がどうあっても欲情せずにはいられない状態だとしても、とりあえずは我慢してみる。「ムラムラして抑えられない。もう我慢できない。でも今の自分には彼女いないし……」ってときには、うーん……本当にどうしてもってんなら、お店にでも行けば良いじゃない。権限がないのは仕方ないし、もしかしたら下手に上書きとかするとまずいファイルかもしれないから、基本的にそういうファイルはFTPから操作しない方が無難って場合もあると思う。
それでもどうしても上書きしたいってときには、SSHで接続するとかして、スーパーユーザーがそのファイルをのパーミッションを変更する。FTPユーザーでも上書きできるように「chmod」コマンドでパーミッションを変えるか、「chown」コマンドでファイルの所有者を変えるか。
例えば、変更したいファイルが「sample.txt」で、FTPユーザーの名前が「akatsuki」だとしましょうか。
//chmodの場合
# chmod 777 sample.txt
//chownの場合
# chown akatsuki:akatsuki sample.txt
こうですね。変更が終わったら、またスーパーユーザーで権限を元に戻すか、まあ問題なければそのままでも良いですけど。
場合によっては毎回この操作をしなきゃいけないから面倒だけど、それくらいは我慢できるっていうのなら、こんなやり方もありますね。
一つ。httpd.confをいじる
これは以前、↓でも書いたことがあるんですが、httpd.confの設定で、ウェブとかからアップするファイルの所有者を、FTPユーザーにしてしまうやり方です。間違ってファイルを消してしまうのはどう考えても俺が悪い
httpd.confの中には「User」と「Group」っていう設定項目があって、デフォルトではこれがapache先輩になってます。だから、これをFTPユーザーに変えてしまう。
//httpd.confを編集
#User apache
#Group apache
User akatsuki
Group akatsuki
これでapacheを再起動すればオーケー。ウェブ上のフォームから上げたりしたファイルの所有者がakatsukiになるので、FTP上でも上書きができる。
ただこれは、前回も書いたし、未だによく分かってないけど、何か良くない影響が出るかもしれない。だから、やりたければ自己責任でってくらいに認識しといた方が良いかも。
一つ。先輩のグループに入れてもらう
特に何も設定をいじってなければ、サーバーに登録されてるユーザーってのは、基本的にみんな一匹狼です。孤高の戦士たちです。でも勇気を出してapache先輩のグループに入れてもらえば、ファイルの所有者がapache先輩でも、グループの書き込み権限のあるファイルはFTPユーザーが上書きできるようになる。
やり方は簡単です。「お願いします先輩!」って言うだけでオーケーもらえるくらい簡単。「先輩の彼女を抱かせてください!」ってお願いするよりも遥かに簡単。
# usermod -G apache akatsuki
これでapache先輩のグループに入れてもらえました。不良に絡まれても大丈夫。「てめーどこ中だ、あーん?」とかメンチ切られても「良いのかよ、俺にそんな口聞いて。おめー、apache先輩知ってんだろ? 俺、あの人の下についてっからよー」とか言い返せば、ビビって手を出してこないはずだ。
ただしグループに入れてもらえたからと言って、ファイルのパーミッションが「644」とかだと、結局のところ、書き込み権限はないです。「664」とかじゃないとダメ。
なので、もしPHPでファイルのアップロード処理を書いたりしているのであれば、アップロード後にPHPのchmod関数を使って、パーミッションを変更するのが良いですね。
chmod('sample.txt', 0644);
こんな感じでしたっけね。
ちなみに、usermod以外にも、gpasswdっていうコマンドでも追加できる。こっちは追加だけじゃなくて、追加したユーザーを削除とかもできるから、こっちを覚えた方が良いのかもしれないね。
//ユーザーの追加
# gpasswd -a akatsuki apache
//ユーザーの削除
# gpasswd -d akatsuki apache
usermodのときは「グループ名・ユーザー名」の順番だったけど、gpasswdは逆になってるので注意っすね。
一つ。vsftpd.confをいじる
これは主に、FTPユーザーが上げたファイルを、apache先輩が上書きする場合に有効な方法になりますかね。ついでに、これはインストールしているFTPサーバーがvsftpdだったらっていう前提になりますけど……vsftpd.confの設定で、FTPからファイルをアップロードしたときのパーミッションを変えることができます。
基本的に初期の状態では、FTPからアップロードしたとき、ファイルのパーミションは「644」になってると思います。実際にFTPにファイルを上げて、確認してみれば分かります。
これは、vsftpd.confでそういう風に設定されているからなんですね。だからこれを変更して、FTPからアップするファイルのパーミッションを「664」にしてみる。
//viモードでvsftpd.confを開く
# vi /etc/vsftpd/vsftpd.conf
//vsftpd.confを編集
local_umask=022
→local_umask=002
//vsftpdを再起動
# service vsftpd restart
たぶん、vfstpd.confは「/etc/vsftpd/」の下にあると思いますので、それをviモードで開いて「local_umask」という項目を探し、「022」ってなってたら「002」に変更する。022ってのはパーミッションが644で、002ってのはパーミッションが664の状態を表す。編集が完了したらvsftpdを再起動。
これでFTP経由でファイルをアップした場合は、パーミッションが「664」になりますので、グループの書き込みが許可された状態になります。
もちろん、このファイルをapache先輩が上書きとかしたいなら、さっきのusermodとかgpasswdで、apache先輩をFTPユーザーのグループに追加してください。
まあ、vsftpdじゃなくても、unixにはumaskってコマンドがありますから、それでファイルのデフォルトのパーミッションをいろいろと変更することができます。
でも今回はそれをやらなかったので、それについてはまたいずれ。書く機会があれば。今のとこは、もうしわけねっすけど、各自ググってくだせえ。
こんな感じですねー。
まあ方法は一つじゃないってことで、どうしてもムラムラが抑えられないときには、いろんな手段を模索して鎮めるのがよろしいってことですね。
でも上司の奥さんとか先輩の彼女に手を出すのは止めた方が良いと思います。納期直前なのに全然終わりの目処が立たなくて派手にデスマってるプロジェクトくらいの修羅場を迎えることになるから。