Infra Engineer

ファイルパーミッションについて
2022.06.28
Lv1

ファイルパーミッションについて

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、ファイルパーミッションについて解説します。


・ファイルの「所有者」「所有グループ」について

・ファイルパーミッションとは
・ファイルパーミッションの記号表記と数値表記
・まとめ
・確認問題

ファイルの「所有者」「所有グループ」について

パーミッションについて解説する前に、まずファイルの「所有者」「所有グループ」について説明します。
これらは、Linuxのファイルやディレクトリに存在する概念です。
基本的にはそのファイルやディレクトリを作成したユーザが「所有者」になり、そのユーザが所属するプライマリグループが「所有グループ」となります。
ファイルやディレクトリの所有者や所有グループは、「ls」コマンドの「-l」オプションで調べることができます。

[sak@localhost example]$ ls -l
合計 0
[sak@localhost example]$ touch example.txt
[sak@localhost example]$ mkdir example
[sak@localhost example]$ ls -l
合計 0
drwxrwxr-x. 2 sak sak 6 6月 23 13:15 example
-rw-rw-r--. 1 sak sak 0 6月 23 13:15 example.txt

 

図1 所有者と所有グループ

図1の赤枠で囲っている部分がそのファイルやディレクトリの所有者と所有グループを表しています。
sakユーザでファイルやディレクトリを作成したので、所有者も所有グループもsakになっています。


ファイルパーミッションとは

先ほどの画像で、違う場所に注目してみましょう。

 

図2 ファイルのパーミッションを表す箇所

図2の赤枠で囲っている部分が、そのファイルやディレクトリの「パーミッション」を表しています。
パーミッションとは、ファイルやディレクトリに対する「アクセス権限」のことです。
windowsでファイルを開いたときに「読み取り専用」と出てくる経験をしたことのある方は多いのではないでしょうか。
そのようなファイルは、あなたに書き込みの権限がないことを示しています。
Linuxにも同様の概念があるということですね。

 

次に、赤枠の部分をもう少し詳しく見てみます。

 

 

図3 パーミッションのクラス

このようにパーミッションは3つの「クラス」に分かれています。

パーミッションのクラス

①ユーザ

ファイルの所有者にどのようなパーミッションが与えられるかを表した部分。

②グループ

ファイルの所有グループにどのようなパーミッションが与えられるかを表した部分。

③その他のユーザ

ファイルの所有者でなく、所有グループに属していないユーザにどのようなパーミッションが与えられるかを表した部分。

 

Linuxでは、これら3つの対象に対してパーミッションを分けることができます。

 

次に、それぞれのクラス内の記述内容に注目しましょう。

 

図4 パーミッションの種類

このようにパーミッションは3つの「種類」に分かれています。

パーミッションの種類

①読み取り(r)

ファイルやディレクトリの中身を参照する権限を表す。
「r」と記載されている場合には、当該クラスにその権限が与えられていることを表す。
「-」と記載されている場合には、当該クラスにその権限がないことを表す。

②書き込み(w)

ファイルを編集する、ディレクトリに新規にファイルを作成したり削除したりする権限が与えれていることを表す。
「w」と記載されている場合には、当該クラスにその権限が与えられていることを表す。
「-」と記載されている場合には、当該クラスにその権限がないことを表す。

③実行(x)

ファイルをプログラムとして実行する、ディレクトリ内のファイルへのアクセスをする権限が与えられていることを表す。
「x」と記載されている場合には、当該クラスにその権限が与えられていることを表す。
「-」と記載されている場合には、当該クラスにその権限がないことを表す。

ここまでを踏まえて、図4の「example.txt」の「rwxr-xr-x」とうパーミッションを読み解きましょう。

・所有者(rwx

⇒このファイルの所有者である「sak」は、このファイルの「読み取り」「書き込み」「実行」すべての権限を持つ。

・所有グループ(r-x

⇒このファイルの所有グループである「sak」に所属するユーザ(sakを除く)は、このファイルの「読み取り」「実行」権限を持つが、「書き込み」権限は持たない。

・その他のユーザ(r-x

⇒このファイルの所有者でなく、所有グループにも属していないユーザは、このファイルの「読み取り」「実行」権限を持つが、「書き込み」権限は持たない。

 

例)
読み取り権限のないファイルをcatしてみる。
[sak@localhost ~]$ who am i
sak      pts/1        2022-06-18 19:10 (192.168.56.1)
[sak@localhost ~]$ ls -l
合計 4
-rw-r-----. 1 root root  0  6月 18 19:05 example_root.txt
-rw-rw----. 1 sak  sak  40  6月 18 19:07 example_sak.txt
[sak@localhost ~]$ cat example_root.txt
cat: example_root.txt: 許可がありません
[sak@localhost ~]$ cat example_sak.txt
このファイルは読み取り可能

sakユーザのホームディレクトリに「example_root.txt」と「example_sak.txt」があります。
これらをcatで「読み取ろう」とすると、「example_root.txt」は読み取れず、「example_sak.txt」は読み取れることが確認できます。
それぞれのパーミッションに注目すると、「example_root.txt」は所有者がrootであり、その他のユーザには読み取り権限が与えられていません(—)。
一方で「example_sak.txt」は所有者がsakであり、所有者に読み取り権限が与えられています(rw-)。

※なお、rootユーザはパーミッションに関係なくすべてのファイルへの権限を持ちます。


ファイルパーミッションの記号表記と数値表記

ファイルパーミッションには記号表記と数値表記があります。
記号表記は、先ほど説明した「rwx」の表記です。
例えば「rwx」の記号を数値で表記すると「7」となります。
これは以下のような対応関係で表されます。

権限 記号 数値
読み取り可能 r 4
書き込み可能 w 2
実行可能 x 1

記号表記に対応する数値表記は、これら対応する数値を足し合わせることによって表現されます。

例)
「rwxr-xr–」の数値表記。(754)

数値対応を暗記していれば基本的に問題ありませんが、なぜこの数値なのか補足をしておきます。
その権限が「ある」場合を「1」、「ない」場合を「0」という2進数で定義し、それを8進数に直したものになります。

進数の解説記事ではありませんので、進数についてここでは解説はいたしません。

CCNAの記事ですが、以下で「2進数⇔10進数」について解説しています。
Linuxのパーミッションにおいては、8進数でなく10進数への変換で考えてもあまり支障はありませんので、以下が理解できれば上の図も理解できるかと思います。

【独学CCNA】020.2進数と10進数

数値表記はいつ使うのかということを疑問に思った方がいるかと思います。
主な使い道は「chmod」コマンドとの組み合わせです。
これについては別記事で解説いたします。


まとめ

今回は、ファイルのパーミッションについて解説しました。
パーミッションという概念は、Linuxにおいてかなり重要です。
試験においても実務においても登場する機会は非常に多いので、しっかり理解するようにしてください。

最後に確認問題で今回の内容を振り返ってみてください。


確認問題

問題

「ls -l」コマンドを実行した結果、以下のような結果が得られた。ここから読み取れることは以下のうちどれか。(3つ選択)
なお、ユーザ「sak」「sie」はグループ「sie」に所属している。

drwxrw-r–. 2 sak sie 20 6月 18 19:34 example
-rw-r–r–. 1 root root 0 6月 18 18:04 example.txt
drwxr-x—. 2 sie sie 20 6月 18 19:34 example2

A) sieは、exampleディレクトリに新規ファイルの作成が可能である。
B) sakは、example2ディレクトリに新規ファイルの作成が可能である。
C) rootは、exampleディレクトリに新規ファイルを作成することができない。
D) sakは、example.txtを読み取ることができる。
E) sakは、example2ディレクトリの内容を参照することが可能である。

解答
答え:A、D、E

A) ⇒ exampleの所有グループはsieであり、パーミッションは「rw-」のため、sieグループに属するユーザには書き込み権限があります。
B) ⇒ example2の所有グループはsieであり、sakはsieグループに属しますが、所属グループのパーミッションが「r-x」のため、書き込み権限はありません。
C) ⇒ rootは「その他のユーザ」の権限を超えてファイル操作が可能です。
D) ⇒ example.txtは「その他のユーザ」に読み取り権限を与えています。(r–)
E) ⇒ example2の所有グループはsieであり、sakはsieグループに属します。所有グループのパーミッションは「r-x」のため読み取り可能です。