Linuxファイルアクセス権まわりを一気にまとめてみた

chownコマンド分からないんだけど・・・からスタートして、
上司の力を借りながら一気に必要な知識をまとめてみました。


 

ユーザーとグループ

LINUXには、ユーザーとグループという概念が存在します。
グループは、名の通りユーザーの集まりです。
ユーザーはいずれかのグループに所属しています。
 

ファイルの属性

ファイルにはそのファイルの所有者や所有グループ、
パーミッションなどの属性が存在します。
 
基本的にあるユーザーが作ったファイルを他のユーザーが変更したり削除することは不可能です。
もちろん、これを他のユーザーが編集可能とすることもできます。
 
これらの属性はファイルやディレクトリに対するアクセス制御をする上で
とても重要な役割を担っています。
 

パーミッション

パーミッションは、ファイルやディレクトリに対するユーザーのアクセス権のことを言います。
パーミッションは、以下のような情報で構成されています。
 
■ファイルを作成したユーザーのアクセス権

  • 読み取り権限の有無
  • 書き込み権限の有無
  • 実行権限の有無

 
■ファイルを作成したユーザーと同じグループに所属するユーザーのアクセス権

  • 読み取り権限の有無
  • 書き込み権限の有無
  • 実行権限の有無

 
■上記2つ以外のユーザーのアクセス権

  • 読み取り権限の有無
  • 書き込み権限の有無
  • 実行権限の有無

 
パーミッションの変更にはchmodコマンドを使います。

chmod パーミッション値 ファイル名

 

実行中のプログラムのファイルアクセス

このようなアクセス制御は実行中のプログラムが
ファイルアクセスする場合にも有効に働きます。
 
例えばApacheがHTMLファイルにアクセスする場合、
このファイルアクセスはapacheユーザーの権限で実行されます。
 
つまり、apacheユーザーがアクセスできるファイルでないと
apacheはそのファイルにアクセスし、そのファイルの内容を手に入れることができないということですね。
 

phpのプログラムがどのように実行されているのか

phpのプログラムがファイルアクセスする場合を考える前に
apacheがどのようにphpのプログラムを実行しているかを知る必要があります。
 
デフォルトではphpの実行エンジンはapacheのモジュールとしてapacheに登録されています。
つまり、apacheの機能のひとつとしてphpの実行エンジンがある状態になっているということです。
プロセスの様子で見るとapacheプロセスがphpのソースを開き、コードを実行している状態です。
 
phpプログラム内のファイルにアクセスするコード(requireやinclude関数)
によるソースの取り込みがあった場合、実際にはapacheプロセスが目的のファイルにアクセスしています。
 
このとき、目的のファイルのパーミッション設定によっては、
ファイルアクセスに失敗し、phpがエラーを出す結果となってしまいます。
 
ファイルアクセスをするプログラムでは、このような背景の仕組みを知ったうえで
適切にパーミッション設定を行わなければならない、ということですね。
 
 
最初は、何も知らずに触ってたので訳が分からなかったですが、理解すれば簡単ですね。
また気が向いたらLinux周りで深いお話ができたら、と思います。


Tags: