【Linux】パーミッションを極める

8 min

こんにちは。ナミレリです。今回はLinuxやMacなどのUnix系OSの「パーミッションを極める」をテーマに紹介していきます。

この記事はこんな人にオススメ

  • パーミッションが重要なのはわかるけど、a+wとか755とかなに?
  • なんとなくコピペでパーミションを設定している
  • 複数ユーザーが更新するファイルの適切なパーミッションがわからない

例えば、ApacheでWEBサーバを構築した後に多くの担当者がSSHやSFTP等でファイルをアップロードしたり、すでにアップロードされているファイルを別の担当者が更新する時などに、どのようにパーミッションを設定しておくかセキュリティ観点でとても重要です。

この記事でわかること

  • パーミッションの概要
  • ファイルのパーミッションとディレクトリのパーミッションの意味の違い
  • 記号によるパーミッションの設定方法(例:a+w
  • 数字によるパーミッションの設定方法(例:755
  • 2進数と8進数の対応表
  • よく使うパーミッション

パーミッションはとっつきにくく難解なイメージもありますが、一度理解してしまえばファイルやディレクトリを安全に扱うことが出来ますのでこれを機会にぜひパーミッションを極めてみましょう。

パーミッションとは?

LinuxやMacなどのUnix系OSのパーミッションとは、ファイルやディレクトリを所有者(owner)、グループ(group)、その他(other)、この3つに対してアクセス権限を設定します。

また、所有者、グループ、その他、このそれぞれに対して読み取り権限、書き込み権限、実行権限の3つの権限を設定することができます。

表で整理すると下のようになります。

読み取り権限書き込み権限実行権限
所有者(owner)どうする?どうする?どうする?
グループ(group)どうする?どうする?どうする?
その他(other)どうする?どうする?どうする?
表:パーミッションのイメージ

ファイルやディレクトリを所有者、グループ、その他、この3つに対してアクセス権限を設定すると書きましたが、それに加えてSUID、SGID、Sticky bitの3つの特殊なアクセス権限を設定することができます。SUID、SGID、Sticky bitの3つの特殊なアクセス権限については別の記事で紹介する予定です。

また、ファイルのパーミッションとディレクトリのパーミッションで、この3つの権限の意味が異なりますので紹介します。

ファイルのパーミッションとディレクトリのパーミッションの意味

ファイルに対する各権限のパーミッションの意味は下のようになります。ファイルについてはイメージそのままでわかりやすいと思います。

ファイルに対するパーミッションの意味

ファイル:パーミッション意味(ファイルに対する)
読み取り権限ファイルを読み取ることができる
書き込み権限ファイルに書き込むことができる
実行権限ファイルを実行することができる
(プログラムやスクリプト等)
表:ファイルのパーミッションの意味

次にディレクトリに対する各権限のパーミッションの意味は下のようになります。ディレクトリの実行権限は少しイメージと異なると思います

ディレクトリに対するパーミッションの意味

ディレクトリ:パーミッション意味(ディレクトリに対する)
読み取り権限ディレクトリを読み取ることができる
(配下にあるファイル一覧の取得等)
書き込み権限ディレクトリに書き込むことができる
(ファイルの作成、削除、名前変更等)
実行権限そのディレクトリ配下に移動できる
表:ディレクトリのパーミッションの意味

ディレクトリの実行権限が自分にあれば、そのディレクトリに入ることができますが、ディレクトリの実行権限がなければディレクトリに入ることはできません。

ここまでのまとめ

これまで紹介してきたようにパーミッションとは、ファイルやディレクトリを所有者、グループ、その他、この3つに対してのアクセス権限のことで、この3つのアクセス権限に対して読み取り権限、書き込み権限、実行権限の3つの権限を設定することです。

パーミッションの確認方法

ファイルやディレクトリの設定されたパーミッションはls -lで確認することができます。


ls -l
drwxrwxr-x 2 user_a group_a 6 11月  3 23:09 c_dir
drwx------ 2 user_a group_a 6 11月  3 23:09 d_dir
-rw-r--r-- 1 user_a group_a 0 11月  3 23:09 a.txt
-rw------- 1 user_a group_a 0 11月  3 23:09 b.txt
lrwxrwxrwx 1 user_a group_a 5 11月  3 23:10 e.txt -> b.txt

drwxrwxr-xdrwx-------rw-r--r---rw-------lrwxrwxrwxなどの10桁の部分がパーミションの表記となります。

上の画像では、所有者のパーミッションがrwx、グループのパーミッションもrwx、その他のパーミションがr-xとなり、先頭のdはディレクトリを表しています。

rwx読み取り権限(r)書き込み権限(w)実行権限(x)があり、
r-x書き込み権限(w)はない、という意味です。
-は権限がないという意味です。

では次にパーミッションの設定方法について紹介します。記号で設定する方法、数字で設定する方法の2つの方法があります。

パーミッションの設定方法:その1(記号で設定する方法)

まず最初はパーミッションを記号で設定する方法です(記号モード)。以下の記号を使って設定します。

誰に?どうする?何を?の順番でパーミッションを指定します。

1. 誰に?

記号意味
a全て(all)
u所有者(user)
gグループ(group)
oその他(others)

2. どうする?

記号意味
+追加
削除
=設定

3. 何を?

記号意味
w書き込み
r読み取り
x実行

実際に記号モードでパーミッションを設定してみる

では上の記号モードを使ってパーミッションを設定してみます。以下の表のパーミッションのfile01.txtがあるとします。

file01.txtのパーミッション(変更前)

読み取り権限書き込み権限実行権限
所有者
グループ
その他全て

ls -l
-rw-------   1 user_a  group_a    0 11  4 16:40 file01.txt

自分自身しか読み書きできないファイルですね。読み取り権限を全てのユーザーに追加してみます。誰に?どうする?何を?の順番でパーミッションを指定しますので、誰に?→全てに(a)、どうする?→追加する(+)、何を?→読み取り(r)をとなります。chmodコマンドを使って下記のようにコマンド入力します。


chmod a+r file01.txt  

このchmodコマンドによりパーミッションは下記の表のようになります。(書き込み権限は自分のみ、読み取り権限は全員にあります)

file01.txtのパーミッション(変更後)

読み取り権限書き込み権限実行権限
所有者
グループ
その他全て

ls -l
-rw-r--r--   1 user_a  group_a    0 11  4 16:40 file01.txt

では次に、この状態のfile01.txtに対してその他のユーザーの読み取り権限を削除してみます。記号の表記はo-rですね。


chmod o-r file01.txt  

このchmodコマンドによりパーミッションは下記の表のようになります。(書き込み権限は自分のみ、読み取り権限はグループのみ、その他は権限なし)

file01.txtのパーミッション(さらに変更後)

読み取り権限書き込み権限実行権限
所有者
グループ
その他全て

ls -l
-rw-r-----   1 user_a  group_a    0 11  4 16:40 file01.txt

次に、同じことを数字で設定してみましょう。

パーミッションの設定方法:その2(数字で設定する方法)

では続いて、数字モードを使ったパーミッションの設定方法を紹介します。数字モードは3つの権限(読み取り、書き込み、実行)に対してそれぞれにオンとオフを2進数(10)で表します。

下の表のように権限があれば1、権限がなければ0です。

file01.txtのパーミッション例

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ0000000
その他全て0000000

所有者の権限の2進数は110となっています。110は8進数で6です

グループの権限の2進数は000となっています。000は8進数で0です

その他の権限の2進数は000となっています。000は8進数で0です

この場合、file01.txtのパーミッションは8進数で「600」と表現します。

最初の6は所有者のパーミッション、真ん中の0はグループのパーミッション、右の0はその他のパーミッションで、600と表現します。

ちなみに8進数は07までの数字で表します。

Linux技術者認定試験の最初のインプットに最適です:Linux教科書 LPICレベル1 Version5.0対応

実際に数字モードでパーミッションを設定してみる

数字モードを使ったパーミッションの設定は、chmodコマンドで8進数の数字を指定します。

以下の表のパーミッションのfile01.txtがあるとします。

file01.txtのパーミッション(変更前:600)

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ0000000
その他全て0000000

自分自身しか読み書きできないファイルです。先程と同じように書き込み権限は自分のみのままで読み取りは全てのユーザーができるようにしてみます。


chmod 644 file01.txt
# chmod a+r file01.txtと同じ

上のchmodコマンドによりパーミッションは下記の表のようになります。(書き込み権限は自分のみ、読み取り権限は全員にあり)

file01.txtのパーミッション(変更後:644)

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ1001004
その他全て1001004

ls -l
-rw-r--r--   1 user_a  group_a    0 11  4 16:40 file01.txt

2進数、8進数、10進数のまとめ表

以下に2進数、8進数、10進数をまとめた表を記載します。

パーミッションは2進数で3桁(3ビット)使用するので、8進数では7までを使います。

2進数8進数10進数
000
111
1022
1133
10044
10155
11066
11177
表:2進数、8進数、10進数のまとめ

よく使う数字モードのパーミッションの例

次に、よく使われる数字モードのパーミッションの例を紹介します。

パーミッション:775(ディレクトリ)

ディレクトリのパーミッションでよく使うパーミッション775です。


chmod 775 Directory
ls -l
drwxrwxr-x   2 user_a  group_a   64 11  4 16:48 Directory/

所有者とグループ以外のユーザーは、ディレクトリに書き込む権限がない設定です。
ディレクトリへの書き込みとは、ファイルの作成やファイルの削除、ファイルの名前変更等です。実行権限はあるのでそのディレクトリに入ることはでき、読み取り権限もあるのでファイル一覧を取得することはできます。

所有者とグループが読み取り・書き込みできるので、複数人で管理するWEBサイトのドキュメントルートやその配下のディレクトリのパーミッションとして775を使うことは多いと思います。

読み取り権限書き込み権限実行権限2進数8進数
所有者1111117
グループ1111117
その他全て1011015

パーミッション:755(ディレクトリ)

ディレクトリのパーミッションでよく使うパーミッション755です。


chmod 755 Directory
ls -l
drwxr-xr-x   2 user_a  group_a   64 11  4 16:48 Directory/

所有者以外のユーザーは、ディレクトリに書き込む権限がない設定です。
ディレクトリへの書き込みとは、ファイルの作成やファイルの削除、ファイルの名前変更等です。実行権限はあるのでそのディレクトリに入ることはでき、読み取り権限もあるのでファイル一覧を取得することはできます。

読み取り権限書き込み権限実行権限2進数8進数
所有者1111117
グループ1011015
その他全て1011015

パーミッション:700(ディレクトリ)

ディレクトリのパーミッションでよく使うパーミッション700です。


chmod 700 Directory
ls -l
drwx------   2 user_a  group_a   64 11  4 16:48 Directory/

所有者以外のユーザーはどのアクセス権限もない設定です。自分以外のアクセスを禁止にする場合によく使います。自分自身のHOMEディレクトリはこのパーミッション700に設定することが多いです。

読み取り権限書き込み権限実行権限2進数8進数
所有者1111117
グループ0000000
その他全て0000000

Linux技術者認定試験の最初のインプットに最適です:Linux教科書 LPICレベル1 Version5.0対応

パーミッション:664(ファイル)

ファイルのパーミッションでよく使うパーミッション664です。


chmod 664 File
ls -l
-rw-rw-r--   2 user_a  group_a   64 11  4 16:48 File

まず実行権限は所有者含めて誰に対しても付与していません。プログラムやスクリプト以外の一般的なファイルは実行権限は不要であるためです。所有者とグループ以外のユーザーは、ファイルに書き込む権限がない設定です。(読み取りは誰でもできる)

所有者とグループが読み取り・書き込みできるので、複数人で管理するWEBサイトの各ファイルのパーミッションとして664を使うことは多いと思います。

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ1101106
その他全て1001004

パーミッション:644(ファイル)

ファイルのパーミッションでよく使うパーミッション644です。


chmod 644 File
ls -l
-rw-r--r--   2 user_a  group_a   64 11  4 16:48 File

ファイルなのでこちらも実行権限は所有者含めて誰に対しても付与していません。プログラムやスクリプト以外の一般的なファイルは実行権限は不要です。所有者以外のユーザーは、ファイルに書き込む権限がない設定です。(読み取りは誰でもできる)

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ1001004
その他全て1001004

パーミッション:600(ファイル)

ファイルのパーミッションでよく使うパーミッション600です。


chmod 600 File
ls -l
-rw-------   2 user_a  group_a   64 11  4 16:48 File

ファイルなのでこちらも実行権限は所有者含めて誰に対しても付与していません。プログラムやスクリプト以外の一般的なファイルは実行権限は不要です。所有者以外、ファイルを読み取ることも書き込むこともできない設定です。

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ0000000
その他全て0000000

パーミッション:400(ファイル)

ファイルのパーミッションでよく使うパーミッション400です。


chmod 400 File
ls -l
-r--------   2 user_a  group_a   64 11  4 16:48 File

ファイルなのでこちらも実行権限は所有者含めて誰に対しても付与していません。プログラムやスクリプト以外の一般的なファイルは実行権限は不要です。所有者は読み込むことができますが、書き込むことはできません。所有者以外のユーザーは全ての権限がない設定です。

SSHの秘密鍵のように非常に重要なファイルで所有者でも書き込みが不要なファイルに400を設定します。

読み取り権限書き込み権限実行権限2進数8進数
所有者1001004
グループ0000000
その他全て0000000

最後に

最後まで読んでいただきありがとうございます。【Linux】パーミッションを極めるはいかがでしたでしょうか。ApacheでWEBサーバを構築した後に多くの担当者がSSHやSFTP等でファイルをアップロードしたり、すでにアップロードされているファイルを別の担当者が更新する時などに、どのようにパーミッションを設定しておくかわからない場合もあると思います。

パーミッションはとっつきにくく難解なイメージもありますが、一度理解してしまえばファイルやディレクトリを安全に扱うことが出来ますのでぜひ覚えてください。

MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。

Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。

初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。

定番おすすめ記事

カテゴリー:
関連記事