UNIX系OS アクセス権

UNIX系OSでは、ファイルごとにアクセス権(パーミッション、モードなどとも呼ばれる)が設定されている。 これらアクセス権により、ユーザーからのファイルの見え方、操作できることが決まる。

アクセス権は基本的に3種類ある。Read、Write、eXecuteだ。また、権限を設定する対象(クラス)が3種類ある。User、Group、Otherだ。アクセス権と対象の組み合わせで、3×3=計9種類のアクセス権が存在する。このほかに、実行に関係する特殊なアクセス権がある。SetUserID、SetGroupID、sTickyの3種類だ。よって計12種類。それぞれの権限の有無が、ファイルごとに設定されている。

後述の八進数表記を鑑みるに、特殊権限、Userの権限、Groupの権限、Otherの権限、の順にビットがならんでいるのかな?

  • 権限の意味
    • ファイルの場合
      • Read 読み込み
      • Write書き込み
      • eXecute 実行
      • SetUserID そのファイルの所有者としてプロセスが実行される。/bin/passwdで設定されている…そうなんだが、自分のMacだと確認できなかった。
      • SetGroupID そのファイルのグループIDでプロセスが実行される。/usr/bin/write(ほかユーザーにメッセージ発信)で設定されている。
      • Sticky 自分はよくわからなかった。
    • ディレクトリファイルの場合
      • Read 中のファイル一覧が見れる。
      • Write ディレクトリ内の操作(新規作成、パーミッション変更、削除)ができる。
      • eXecute ディレクトリファイルに移動可能。中のファイルにアクセス可能。
      • SetUserID ディレクトリには設定不可。
      • SetGroupID ディレクトリの場合、配下のファイルのグループはそのディレクトリのグループとなる。
      • Sticky 所有者かroot意外は他ユーザー所有のファイルの名前変更および削除ができなくなる。たとえばtmpディレクトリに設定されている。

ls -l を実行すると、ファイルのアクセス権が確認できる。ちなみに左端の文字の意味は下記の通り。

アクセス権は chmod (CHange MODe)コマンドで変更できる。chmodコマンドでのアクセス件の指定方法には、記号表記と八進数表記の二種類がある。

ファイル作成時のデフォルト権限は、"umask"というビットマスクで決まる。通常、新規ファイルは0666,新規ディレクトリファイルは0777からそれぞれumaskの値を引いた権限が設定される。 umaskでは許可しない権限を指定している、と言い換えても良い。 多くの場合は0022が設定されている。 umask で確認可能である。