ファイルのアクセス権
ファイルのアクセス権について
CGIスクリプトとして働くRubyプログラムは、cgi-binディレ クトリに保存した上で、ktermより次のコマンドを入力しなければ正しく動かす ことが出来なかった。
pan{c11xxxx}% chmod 755 ◯◯.rb[Return]
chmodコマンドはファイルへのアクセス権を設定するコマンドである。では、その後の755は何を意味するのだろうか。これを理解するためには、まずアクセス権について理解する必要がある。
ファイルのアクセス権
ktermを使い、lsコマンドに引数-laをつけ、ディレクトリ内のファイル一覧を表示してみよう。どのディレクトリで行っても構わない。コマンドを入力すると、ファイル名以外に-rw-r--r--というような不思議な記号が表示されることが確認できる。
pan{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) | ||||||
|---|---|---|---|---|---|---|---|---|
| r | w | x | r | w | x | r | w | x | 
ここで、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 | - | - | OK | 1 | 
| 010 | - | OK | - | 2 | 
| 011 | - | OK | OK | 3 | 
| 100 | OK | - | - | 4 | 
| 101 | OK | - | OK | 5 | 
| 110 | OK | OK | - | 6 | 
| 111 | OK | OK | OK | 7 | 
pan{c11xxxx}% chmod 755 hoge.rb[Return]
この場合、hoge.rbに対して、Userはr,w,xいずれも許可、GroupとOtherはr,xのみ許可という設定をしていることになる。
アクセス権の変更方法[2] シンボルを用いて指定
ユーザーを表すu, g, oと、アクセス権を表すr, w, xを組み合わせて指定する方法である。例を示しながら説明する。
pan{c11xxxx}% chmod u+x hoge.rb[Return]
#=>Userにx(eXecute)を追加
pan{c11xxxx}% chmod o-r hoge.rb[Return]
#=>Otherからr(Read)を除去
pan{c11xxxx}% chmod +x hoge.rb[Return]
#=>User、Group、Otherにx(eXecute)を追加
pan{c11xxxx}% chmod -w hoge.rb[Return]
#=>User、Group、Otherからw(Write)を除去