roy > naoya > ファイルのアクセス権

ファイルのアクセス権

ファイルのアクセス権について

CGIスクリプトとして働くRubyプログラムは、cgi-binディレ クトリに保存した上で、ktermより次のコマンドを入力しなければ正しく動かす ことが出来なかった。

sime{c11xxxx}% chmod 755 ◯◯.rb[Return]

chmodコマンドはファイルへのアクセス権を設定するコマンドである。では、その後の755は何を意味するのだろうか。これを理解するためには、まずアクセス権について理解する必要がある。

ファイルのアクセス権

ktermを使い、lsコマンドに引数-laをつけ、ディレクトリ内のファイル一覧を表示してみよう。どのディレクトリで行っても構わない。コマンドを入力すると、ファイル名以外に-rw-r--r--というような不思議な記号が表示されることが確認できる。

sime{c11xxxx}% ls -la[Return]
drwxr-xr-x   2 naoya    st2005       512  9月 29日  19:10 ./
drwxr-xr-x  13 naoya    st2005      1024  9月 29日  16:03 ../

-rw-r--r--   1 naoya    st2005        46  9月 24日  16:09 .htaccess
-rw-r--r--   1 naoya    st2005      3743  9月 29日  19:10 10-access.htm
-rw-r--r--   1 naoya    st2005      5934  2月 15日 2008年 10-css.htm
-rw-r--r--   1 naoya    st2005      2319  2月 15日 2008年 10-image.htm
-rw-r--r--   1 naoya    st2005      4828  9月 29日  19:06 10-open.htm
-rw-r--r--   1 naoya    st2005     22966  9月 29日  18:42 10.htm

-rw-r--r--   1 naoya    st2005     22501  9月 24日  16:19 9.htm
-rwxr-xr-x   1 naoya    st2005       807  9月 24日  16:45 kakaku.rb*
-rw-rw-rw-   1 naoya    st2005       144  9月 29日  19:06 open-cgi.dat
-rwxr-xr-x   1 naoya    st2005       887  9月 29日  19:01 open-cgi.rb*

これが各ファイルのアクセス権を示したものである。先頭は、「-」または「d」となっているが、これはファイルとディレクトリを区別するもので、「-」はファイル、「d」はディレクトリとなる。

先頭の1桁を除外すると、残りは9桁である。これは3桁×3つに分割することができる。最初の3桁は自分自身(u)のアクセス権、次の3桁は自分と同一グループのユーザー(g)のアクセス権、最後の3桁は他のユーザー(o)のアクセス権である。

u (User) g (Group) o (Other)
rwx rwx rwx

ここで、rはReadの略であり読み込む権利を、wはWriteの略であり編修する権利を、xはeXecuteの略で実行する権利を表している。r、w、xと表示されている場合はその権利があり、-の場合はその権利がないという意味になる。

ファイルを作成した直後のアクセス権の設定は、rw-r--r--となっているが、これは次のような意味となる。

  • 自分(u):r(読み込み)とw(編集)のみ可
  • グループ(g):r(読み込み)のみ可
  • 他人(o):r(読み込み)のみ可

CGIスクリプトとして使用するRubyプログラムは、自分だけでなく他人が使用する可能性があるため、gやoに実行する権利を与える必要があるし、CGIの中でopenメソッドを使ってファイルの読み書きをする場合は、gやoにファイルを読み込む権利や編修する権利を与える必要がある。

アクセス権の変更

アクセス権の変更方法[1] ビットパターンによる指定

u, g, oそれぞれについて3種類の権利を設定することができる。許可する場合を1、許可しない場合を0とした場合、u, g, oそれぞれについて000, 001, 010, 011, 100, 101, 110, 111という8種類の組み合わせが想定できる。これを3桁の2進数と見なし、10進数に直した値を使って指定しようとする方法である。

組み合わせr(Read)w(Write)x(eXecute)10進数
000---0
001--OK1
010-OK-2
011-OKOK3
100OK--4
101OK-OK5
110OKOK-6
111OKOKOK7
sime{c11xxxx}% chmod 755 hoge.rb[Return]

この場合、hoge.rbに対して、Userはr,w,xいずれも許可、GroupとOtherはr,xのみ許可という設定をしていることになる。

アクセス権の変更方法[2] シンボルを用いて指定

ユーザーを表すu, g, oと、アクセス権を表すr, w, xを組み合わせて指定する方法である。例を示しながら説明する。

sime{c11xxxx}% chmod u+x hoge.rb[Return]
#=>Userにx(eXecute)を追加
sime{c11xxxx}% chmod o-r hoge.rb[Return]
#=>Otherからr(Read)を除去
sime{c11xxxx}% chmod +x hoge.rb[Return]
#=>User、Group、Otherにx(eXecute)を追加
sime{c11xxxx}% chmod -w hoge.rb[Return]
#=>User、Group、Otherからw(Write)を除去