ウェブサイト用サーバーの権限を考える

佐野

佐野 2015年4月7日

最近では、ウェブサイト用サーバーの案件も増えてきたので、
ここらで少し、改めて最適な設定を考えてみる事にしました。

サーバーの用途としては、ユーザーごとに領域を決め、
FTPでファイルをアップロードし、
1サーバーで複数のサイトを構築できる想定です。
いわゆる共用サーバーです。
インストールするソフトウェアは、
「Apache」「vsftpd」などの基本的なソフトウェアです。

まずPHPが動作するユーザーは「apache」です。
PHPファイルは、この「apache」が「読み込み」可能である事が必要となります。

ただし、FTPでファイルをアップロードした際には、
ファイルの所有者・グループ共に、アップロードしたユーザーのものになります。
つまりこの状態では、「apache」は「その他」という立場となり、
「その他」に対する読み込み権限を与える必要があります。

それを解決するには、アップロードしたファイル群の「グループ」を
「apache」に設定すれば、ひとまずは解決するでしょう。

例:ユーザーが「hoge.com」の場合。
「hoge.com」ディレクトリを中身ごと所有者を「hoge.com」に、グループを「apache」に設定する。

# chown -R hoge.com:apache /home/hoge.com

じつは、従来までならこれでよいと思っていました。
しかし、これではFTPでファイルをアップロード後、またこのコマンドを打つ必要が生じてきます。
FTPでは、パーミッションの設定までは行えても、
ファイル・フォルダの所有者・グループ設定までは行えません。
これでは、FTPでファイル転送する意味も希薄です。
自動的にファイル群のグループを「apache」に設定するという
仕組みを組むという手もありますが、それではラグが生じます。

そこで考えました。もっと効率のよい構成はないものかと。
その結果、考えついたのが各ユーザーに「apache」を所属させるという事です。

具体的にLinuxコマンドで示すと・・・

# gpasswd -a apache hoge.com

これで「hoge.com」グループに、「apache」が所属した事になります。
「/etc/group」ファイルを確認し、以下のようになっていると成功です。

# cat /etc/group
hoge.com:x:502:apache

「apache」が各ユーザーのグループに所属した状態になっていると、
ファイルの所有グループを変更する事なく、
グループに対する「読み込み」権限を与えるだけで、動作するようになります。
これならFTP上でも操作可能です。

逆に、「apache」が所有するファイルの操作が「hoge.com」には可能かと言うと、
「その他」のパーミッションが設定されていなければ不可能でした。
これならカンペキですな。

しかし、ここで間違えてはいけないのは、
先ほどとは逆に、「ユーザー」を「apache」に所属させるという事ではないということ。
もしこれを行うと、「apache」が所有する領域に、ユーザーが侵入できるという事になり、
あまり好ましい状況ではありません。
また、この状態では、ユーザーが所有するファイルに、
「グループ」に対する「読み込み」権限を与えても、「apache」が読み込む事は不可能です。