Linuxにおけるパーミッションについてメモ

このページは、Linux(CentOSなど)におけるファイルパーミッションについてのメモです。なお、内容の検証にはCentOS7を使用しています。

もくじ

  • パーミッションを設定するにあたっての基礎知識
  • 8進数3桁(4桁)でパーミッションを設定
  • 少し特殊な設定

パーミッションを設定するにあたっての基礎知識

そもそも「パーミッション」(Permission)とは、ファイルやディレクトリに設定されているアクセス権です。アクセス権を持っているユーザーでなければ、ファイルを操作することは出来ません。悪意ある人にシステムを破壊されたりデータを改ざんされたり、あるいは誰かのうっかりミスでデータロストするようなことを防ぐためには、パーミッションを正しく設定することが必要です。

パーミッションを記号で表す

パーミッションを記号で表す場合は、各ファイルやディレクトリに設定されたパーミッションを10文字の文字列で表示します。


これは私が練習用に使っている仮想サーバー(CentOS7)のとあるユーザーのホームディレクトリに保存されているファイルのリストです。パーミッションは一番左に表示されていますね。

先頭の1文字はファイルの種類を表しています。とりあえず以下の3つを覚えればOKです。その他の文字は見かけた時にググれば十分です。

  • “-” 普通のファイル
  • “d” ディレクトリ
  • “l” シンボリックリンク(Windowsでいうところのショートカット)

後ろの9文字はアクセス権を表しています。後ろの9文字は3文字×3組に別れ、左から「ファイルの所有者」「同所属グループ」「赤の他人」のアクセス権を表しています。ユーザーの属性ごとに、3文字でアクセス権を表します。3文字は左から読み取り(Read)、書き込み(Write)、実行(eXecute)を表しています。以下の4つの文字の意味を覚えましょう。

  • “r” 読み取り可能
  • “w” 書き込み可能
  • “x” (ファイルの場合)実行可能/(ディレクトリの場合)アクセス可能
  • “-” 権限なし

ディレクトリには「読み取り権限」と「アクセス権限」が別々に設定されます。ディレクトリの「アクセス権限」が無ければ、そのディレクトリ内部にあるファイルやサブディレクトリにはアクセスできません(読み取り権限だけあってもダメ)。「読み取り権限」と「アクセス権限」の両方が無ければ、そのディレクトリ内部にどのようなファイルやディレクトリがあるのか、lsコマンドなどでリスト表示させることは出来ません(読み取り権限単独ではダメ)。

  • 「読み取り権限」+「アクセス権限」→ディレクトリ内部にどのようなファイルやディレクトリがあるか知ることが出来るし、ディレクトリ内部にあるファイルやサブディレクトリにもアクセスできる。
  • 「アクセス権限」のみ→ディレクトリ内部にあるファイルやサブディレクトリにアクセスできる。但し、lsコマンドなどを使ってディレクトリ内部に存在するファイルやサブディレクトリを把握することは出来ない。
ディレクトリについては、「読み取り権限」だけあっても実質無意味といえるかもしれません。

それでは、記号表記の実例を書いておきましょう。

8進数3桁(4桁)でパーミッションを設定

とは言え、記号表記ではどうしても長くなります。また、後述する特殊な設定を行うと記号表記では複雑になってきます。そこで、ここからは8進数3桁(特殊な設定をする場合は4桁)でパーミッションを表記します。8進数4桁表記の場合、各桁には次のような意味があります。

  • 1桁目…特殊な設定(後述)
  • 2桁目(3桁表記の場合は1桁目)…所有者のパーミッション
  • 3桁目(同2桁目)…所有グループのパーミッション
  • 4桁目(同3桁目)…赤の他人のパーミッション

各ユーザー属性ごとに、1桁の数字が割り当てられています。権限ごとに数字が割り当てられており、ユーザー属性ごとに与えられた権限の数字を足し算した結果が、8進数表記で使われる数字になります。権限ごとに割り当てられている数字は以下のとおりです。

  • 読み取り権限…4
  • 書き込み権限…2
  • 実行(アクセス)権限…1
例えばファイルの読み取りと書き込みができる場合、パーミッションの数字は4+2=「6」になります。何もできない場合は「0」です。

8進数3桁表記の実例を以下に示します。

アクセス権の設定は「chmod」コマンドで変更できます。使い方は以下のとおりです。なお、「XXX」は設定するパーミッションの数字を、「hoge」は設定対象のファイル・ディレクトリを表しています。また、場合によってはroot権限が必要になります。

少し特殊な設定

ここでは3つの特殊な設定を扱います。

  • SUID(Set User ID)…SUIDをセットすると、そのファイルは所有者の権限で実行できるようになります。
  • SGID(Ser Group ID)…SGIDをセットすると、そのファイルは所有グループの権限で実行できるようになります。SGIDがディレクトリにセットされた場合は、新たに作成されるファイル・ディレクトリは設定したグループとその権限を継承します。
  • Sticky bit…Sticky bitをセットすると、そのディレクトリ内のファイルを削除できるユーザーが
    • ファイル所有者
    • ディレクトリ所有者
    • root
    • に限定されます。

これらの設定を適用したい場合は、パーミッションを4桁の8進数で設定します。頭の1桁を、

  • SUIDの場合は「4」
  • SGIDの場合は「2」
  • Sticky bitの場合は「1」
にします。後ろの3桁は特殊な設定をしない場合と同様です。以下に例を示します。「XXXX」は設定するパーミッションの数字を、「hoge」は設定対象のファイル・ディレクトリを表しています。また、場合によってはroot権限が必要になります。

参考リンク

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

Bitcoin:

Monacoin:

Litecoin: