LoginSignup
3
1

【初心者から上級まで】Linuxの権限(パーミッション)総まとめ

Last updated at Posted at 2024-03-24

パーミッションとは

Permissionは英語で「許可」を表す。Linux用語としてのパーミッションも同じ意味であるが、実際に使ってみないとその意義や役割が分からない。それは本稿の中で挟む「演習」を実践してみてほしい。

Linux上で扱われるパーミッションの種類

兎にも角にも、本稿のポイントは、

(ア)全てのファイル・ディレクトリに

(イ)3種類のパーミッションが

(ウ)3者ごとに決められる

ということだ。これだけだと良く分からないので、これをより詳細に見てみよう。

「3種類の」パーミッション

  1. ファイルを読む権利(r)
    たとえば、catコマンドやmoreコマンド、 lessコマンドでファイルの中身を見る権利の事だ。
  2. ファイルに書き込む権利(w)
    これは、ファイルを開いて内容を編集する権利のことだ。
  3. ファイルを実行する権利(x)

( )内のアルファベットはそれぞれ、読む(read)書く(write)実行する(execute)から来ています。

「3者に対する」パーミッション

  • そのファイルを持っている人(ユーザ)
  • そのファイルを持っているグループ
  • その他の人(ユーザ)

「それぞれのファイル」のパーミッション

それぞれのファイルごとに、「3種類の」「3者に対する」パーミッションが存在する。
確認する方法は以下の通り。

$ ls -l

そして、下は実際の僕のLinux上の画面だ。

image.png
左の方にdrwxr-xr-x -rwx------ -rw-r--r-- -rw-r--r--という見慣れない文字列がある。これこそがパーミッションを表す記号(パーミッションコード)なのだ。次節から、それを分解して見てみよう。

パーミッションコードの構成

まず、パーミッションコードは10桁である。分解すると、1・3・3・3の4つの塊に更に分解できる。

1文字目:ファイルの種類

  1. ファイル(-)
  2. シンボリック(l)
  3. ディレクトリ(d)
  4. キャラクタデバイス(c)
  5. ソケット(s)
  6. ブロックファイル(b)
  7. FIFO(p)
  8. その他(?)

3・3・3文字目:ユーザ・グループ・その他のユーザのパーミッション

(以下:復習)

「それぞれのファイルに、3種類のパーミッションが、3者ごとに決められる。」

これが基本である。

3種類のパーミッション
→ファイルを読む権利(r)・ファイルに書き込む権利(w)・ファイルを実行する権利(x)

3者に対するパーミッション
→①ユーザに対するパーミッション・➁グループに対するパーミッション・③その他のユーザに対するパーミッション
(以上:復習)

これをもとに、実際のパーミッションコードを読解してみよう。
image.png

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についても言及する必要がありそうなので、近いうちにこの記事を編集する形で付け足す。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1