パーミッションとは
Permissionは英語で「許可」を表す。Linux用語としてのパーミッションも同じ意味であるが、実際に使ってみないとその意義や役割が分からない。それは本稿の中で挟む「演習」を実践してみてほしい。
Linux上で扱われるパーミッションの種類
兎にも角にも、本稿のポイントは、
(ア)全てのファイル・ディレクトリに
(イ)3種類のパーミッションが
(ウ)3者ごとに決められる
ということだ。これだけだと良く分からないので、これをより詳細に見てみよう。
「3種類の」パーミッション
- ファイルを読む権利(
r
)
たとえば、cat
コマンドやmore
コマンド、less
コマンドでファイルの中身を見る権利の事だ。 - ファイルに書き込む権利(
w
)
これは、ファイルを開いて内容を編集する権利のことだ。 - ファイルを実行する権利(
x
)
( )内のアルファベットはそれぞれ、読む(read)書く(write)実行する(execute)から来ています。
「3者に対する」パーミッション
- そのファイルを持っている人(ユーザ)
- そのファイルを持っているグループ
- その他の人(ユーザ)
「それぞれのファイル」のパーミッション
それぞれのファイルごとに、「3種類の」「3者に対する」パーミッションが存在する。
確認する方法は以下の通り。
$ ls -l
そして、下は実際の僕のLinux上の画面だ。
左の方にdrwxr-xr-x
-rwx------
-rw-r--r--
-rw-r--r--
という見慣れない文字列がある。これこそがパーミッションを表す記号(パーミッションコード)なのだ。次節から、それを分解して見てみよう。
パーミッションコードの構成
まず、パーミッションコードは10桁である。分解すると、1・3・3・3の4つの塊に更に分解できる。
1文字目:ファイルの種類
- ファイル(
-
) - シンボリック(
l
) - ディレクトリ(
d
) - キャラクタデバイス(
c
) - ソケット(
s
) - ブロックファイル(
b
) - FIFO(
p
) - その他(
?
)
3・3・3文字目:ユーザ・グループ・その他のユーザのパーミッション
(以下:復習)
「それぞれのファイルに、3種類のパーミッションが、3者ごとに決められる。」
これが基本である。
3種類のパーミッション
→ファイルを読む権利(r
)・ファイルに書き込む権利(w
)・ファイルを実行する権利(x
)
3者に対するパーミッション
→①ユーザに対するパーミッション・➁グループに対するパーミッション・③その他のユーザに対するパーミッション
(以上:復習)
drwxr-xr-x
d
:ディレクトリである。
rwx
: ①所有ユーザに、読む権利・書き込む権利・実行する権利がある。
r-x
: ➁所有グループに、読む権利・実行する権利がある。
r-x
: ③その他のユーザに、読む権利・実行する権利がある。
-rwx------
-
:ファイルである。
rwx
: ①所有ユーザに、読む権利・書き込む権利・実行する権利がある。
---
: ➁所有ユーザを除く所有グループには、三つの内いずれの権利もない。
---
: ③その他のユーザには、三つの内いずれの権利もない。
-rw-r--r--
-
: ファイルである。
rw-
: ①所有ユーザに、読む権利・書き込む権利がある。
r--
: ➁所有グループに、読む権利のみある。
r--
: ③その他のユーザに、読む権利のみある。
-rw-r--r--
-
: ファイルである。
rw-
: ①所有ユーザに、読む権利・書き込む権利がある。
r--
: ➁所有グループに、読む権利のみある。
r--
: ③その他のユーザに、読む権利のみある。
2種類の数字版パーミッションコード(2進数/8進数)
以上まででパーミッションコードの構造が分かった。また、実際にどのような形式でコードが出力されるかも理解した。
ここから、そのパーミッションコードを業務で使うための事項を抑える。具体的には、ファイルやディレクトリのパーミッションコードを確認したり変更したりする段階に入る。そのためには、2進数バージョンと8進数バージョンという、2種類のパーミッションコードを理解する必要がある。
数字版のパーミッションコードでは、最初の一文字目(d
-
c
l
など)は無視し、残りの9文字の有無で数値化する。
2進数バージョン
r
w
x
があったら1、なかったら(-
)0。
drwxr-xr-x
d
: 数字版パーミッションコードでは、最初の文字は無視。
rwx
: 111
r-x
: 101
r-x
: 101
drwxr-xr-x
d
: 数字版パーミッションコードでは、最初の文字は無視。
rwx
: 111
r-x
: 101
r-x
: 101
-rwx------
-
: 数字版パーミッションコードでは、最初の文字は無視。
rwx
: 111
---
: 000
---
: 000
-rw-r--r--
-
: 数字版パーミッションコードでは、最初の文字は無視。
rw-
: 110
r--
: 100
r--
: 100
-rw-r--r--
-
: 数字版パーミッションコードでは、最初の文字は無視。
rw-
: 110
r--
: 100
r--
: 100
8進数バージョン
8進数バージョンでは、2進数バージョンを全て8進数化する。
-rwx------
-
: 数字版パーミッションコードでは、最初の文字は無視。
rwx
: 111 →7
r-x
: 101 →5
r-x
: 101 →5
-rw-r--r--
-
: 数字版パーミッションコードでは、最初の文字は無視。
rw-
: 110 →6
r--
: 100 →4
r--
: 100 →4
-rw-r--r--
-
: 数字版パーミッションコードでは、最初の文字は無視。
rw-
: 110 →6
r--
: 100 →4
r--
: 100 →4
次に、それらがどのように必要なのか実感するため、まずは業務で使うコマンドを俯瞰しよう。
パーミッションコードを確認する
$ ls -l [ファイル・ディレクトリ名]
これは先ほども確認した。例えば、main.py
というファイルのパーミッションを知りたい時は、
$ ls -l main.py
とすればよい。引数無しの以下のコマンド
$ ls -l
を実行すると、カレントディレクトリすべてのファイル・フォルダのパーミッションコードが列挙されて表示される。
パーミッションコードを変更する
$ chmod [8進数パーミッションコード] [ファイル・ディレクトリ名]
これにより、[ファイル・ディレクトリ名]
で指定したファイル・ディレクトリの権限設定を、[8進数パーミッションコード]
のようにすることができる。
例えば、main.py
というファイルの、所有ユーザと所有グループには「読む・書き換える・実行する」権利を与え、その他のユーザには「読む・実行する」権利を与えるコマンドは以下の通り。
$ chmod 775 main.py
775 → 7-7-5 → 111-111-101 → rwxrwxr-x
最後に
やや詰め込み過ぎた感はあったが、Linuxの権限について必要な事項は完全に網羅した。是非とも、実際に自分のLinux環境で色々触り、業務でも使ってみてほしい。
P.S. umaskについても言及する必要がありそうなので、近いうちにこの記事を編集する形で付け足す。