間違ってファイルを消してしまうのはどう考えても俺が悪い

この記事はだいぶ前に書かれたものなので情報が古いかもしれません

例えばレンタルサーバーの共用プランのような場合

サーバーのroot権限をもらうことはできませんが、自分で管理する範囲の部分っていうのは、全てFTP上からでも操作することができます。や、サーバーのプランとかにもよるんだけど。

ファイルのアップロードも削除もコピーも自由。どこにあるどんなファイルでもたいていは好きにできる。



でもこれが専用サーバーになると……。

FTP用のユーザーを作成して接続する場合は、たぶんですけど、そのユーザーさんが自分でアップロードしたファイルとか、ファイルのパーミッションが777とかになってないと、そのファイルを編集したり削除したりってことはできないはず。

よくあるのが、システムでファイルをアップロードした場合ですかね。管理画面をHTMLとかPHPで作成して、そこにファイルのアップロード画面があって、そこからファイルをアップロードした場合。

この場合、設定を何もいじっていなければ、たぶんファイルの権限は「apache」が持っていると思います。僕の場合はそうでした。ファイルの情報を見ていると、オーナーとかグループがapacheになっていると思うんですよね。それか数字の「48」か。この48っていうのはサーバー上でapacheというユーザーに割り当てられているユーザーIDことなので、いずれにしろapacheが所有者ってことになります。

FTPユーザーを作成した場合は、自分でユーザーIDを割り当てたりしていない限りは、たぶん「500」か、それに近い数字になっているんじゃないかなーと思います。

まあどんな数字であれ、この場合のFTPユーザーは、apacheが所有者になっているファイルを削除したり、ダウンロードしたりってことはできないわけですね。パーミッションを変更するか、SSHでサーバーに接続して、root権限を持っているユーザーでそのファイルの所有者をFTPユーザーに変更するとかしない限りは。

でも消したいことがあるかもしれない。レンタルサーバーの共用プランを使っていた頃と同じように、いつでもFTPから好きなファイルを消せるようにしたいと思うことがあるかもしれない。



それを可能にする方法はいくつかあります。FTPにrootで接続するとか、FTPユーザーを作成した後、そのユーザーのグループにapacheを加えるとか。いや、逆だったかな。ユーザーをapacheのグループに加える、だったかな。

でもrootでFTPに接続するのは危ないと聞きますし、グループに加える方は、ファイルのパーミッションが「755」とかになっていたりするとやっぱり編集や削除ができないので、今回は思いきって、システムでファイルのアップロード処理などを行なった場合に、そのユーザーの所有者がFTPユーザーになるようにしてみたいと思います。

まあ、ようは共用のサーバーを使っていた頃と似たような形になるってことですね。



方法は簡単。httpd.confの中身をちょちょっと書き換えるだけで良い。

httpd.confの中を見ると、こんな項目が見つかると思うんですよ。

User apache
Group apache

このapacheの部分をFTPユーザーに変えて、apacheを再起動すればオーケー。

例えば今、「akatsuki」っていうFTP接続用のユーザーを作るとしましょうか。

//ユーザーの作成
# useradd akatsuki
# passwd akatsuki

//httpd.confの編集
#vi /etc/httpd/conf/httpd.conf

//以下のように変更
User apache
→ User akatsuki
Group apache
→ Group akatsuki

//apacheの再起動
service httpd restart

これで、自分で作成した管理画面などからファイルをアップロードした際、ファイルの所有者はakatsukiになっています。



気をつけたいこととしては、あくまでも所有者がapacheからakatsukiに変わるっていうだけなので、FTP接続用のユーザーを複数作成している場合は、結局akatsuki以外のユーザーにはそのファイルをいじる権限がないってことですね。

だから、サーバーを自分一人だけで管理しているようなら大丈夫だと思うけど、複数人で管理していて、それぞれにFTP接続用のユーザーを振り分けているような場合は、止めといた方が良いかもしれないです。

あと、ここまで書いといてあれだけど、httpd.confでapacheから別のユーザーに書き換えることでどんな影響が出るかとかは調べてないから分かりません。もしかしたら、こういうことはやっちゃいけないのかもしれない。セキュリティ上、やばいとか。



もしこの方法を試すとしたら、何かあっても自分が土下座すれば済むくらいの、個人で運用しているサーバーとかで行なうのが良いかもね。

ま、こんなやり方も実現はできるよってくらいの感覚で読んでいただければと思います。

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?