UNIX系OSにおけるファイルのアクセス権限について

アクセス権

UNIX系OSは複数のユーザからアクセスされることを前提に作られています。
そのためユーザごとに各ファイル(コマンドも含めて)に対するアクセス権限を適切に与えなければなりません。
このアクセス権には、

  • 読み取り権限(read)
  • 書き込み権限(write)
  • 実行権限(execute)
    の3つがあります。

    ディレクトリにも上記の3つの権限があり、

  • r権限はディレクトリ内をリストできる権限
  • w権限はそのディレクトリ内で新たにファイル/ディレクトリを作成および削除できる権限
  • x権限はcdコマンドでそのディレクトリをカレントディレクトリにすることができる権限
    を表します。

    では実際にファイルの権限を見てみましょう。
    現在のディレクトリで

    $ ls -l

    とコマンドを入力($はコマンドラインを表します)。

    drwxrwxrwx 1 user group 20 6 4 testfile

    というような結果が返ってくるはずです。

    最初の10文字(drwxrwxrwx)の2文字目以降の9つの文字がアクセス権限を表し、userとgroupが所有するユーザとグループをそれぞれ表します。
    まず最初の10個の文字列の2文字目以降に着目します。

    最初の3文字がファイルの所有者のアクセス権、次の3文字がグループのアクセス権、最後の3文字がその他のユーザのアクセス権を表します。rやwなどの英字で表されていればその権限を持っており、-(ハイフン)が書かれていればその権限を持っていないという意味です。
    それぞれのユーザやグループがどの権限を持っているのかをこのように確認できます。

  • グループ

    UNIXではすべてのユーザがグループに所属します。ユーザは複数のグループに所属することもあります。
    自分の所属しているグループは

    $ groups

    で確認できます。

    $ groups <ユーザ名>

    でユーザ名の所属するグループも確認できます。
    このグループ情報は/etc/groupに記述してあります。

    アクセス権の変更

    アクセス権を変更するにはchmodコマンドを用います(change modeの意味)。
    rwxのそれぞれの権限を2進表記に見立てて
    r = 4
    w = 2
    x = 1
    として、与えたい権限をこの数の和で表します。

    例)

  • rとxの権限=>4+1 = 5
  • rとwとxの権限=>4+2+1=7

    この数を所有者、グループ、他のユーザに与える権限の順に並べます。
    実際に変更するコマンドは以下のようになります(#はコマンドラインでsuperuserが実行しているという意味)。

    # chmod 755 filename

    ここでは所有者にrとwとx、グループにrとx、他のユーザにrとxの権限を与えています。

  • 所有者/所有グループの変更

    所有者/所有グループを変更するにはchownコマンドを使います(change ownerの意)。
    使い方は以下のように

    # chown username:groupname filename

    とします。これでfilenameの所有者がusername、グループがgroupnameに変更されました。

    ディレクトリ以下も再帰的に変更したい場合は

    # chown -R username:groupname dirname

    とします。

    アクセス権、所有者を変更する例

    あるユーザがphpファイルを作成し、コマンドラインからそのファイルを実行し、DBにinsertすることを考えてみましょう。
    この時ファイルの実行者は所有者なので、ユーザ権限にwがあれば実行できます。
    しかし、ブラウザ上からこのphpファイルを実行することを考えてみてください。
    この時のファイルの実行者はapacheでありapacheはwww-dataグループに所属しています。
    この時、グループ(あるいは他のユーザ)のw権限がなければこの書き込みプロセスはpermissionがないので失敗してしまいます。
    そこで、ブラウザ上からもこのファイルを実行できるようにするために、

    # chown user:www-data filename
    # chmod 664 filename

    としてファイルの所有グループとグループのアクセス権限を変更する必要があります。

    参考:

    独習UNIX 第2版

    独習UNIX 第2版

    何か間違いがあれば指摘してください。
    (文責: 篠塚@shinofumi_jp)