Linuxパーミッションの仕組みと設定

その他

ぽんきち
ぽんきち

パーミッションって何?関節技か何かかにゃ?

プログラマーさん
プログラマーさん

それはサブミッション笑

パーミッションっていうのはアクセス権限で、正しく設定することでデータの保護、操作ミスによるトラブルを防げるんだ。たとえば、複数人で使うディレクトリの管理や、大事な設定ファイルの保護にも役立つよ。


パーミッションとは

Linuxでは、ファイルやディレクトリの権限情報が10文字の文字列で表示されます。

たとえば、こんな表記を見たことはありませんか?

-rw-r--r--
drwxrwxr-x

この10文字にはそれぞれ意味があります。最初の1文字はファイルの種類、残りの9文字はアクセス権を表します。

この権限、または権限情報のことをパーミッションと呼びます。

先頭1文字で分かるファイル種別

この1文字で、その行がファイルなのかディレクトリなのか、見分けることができます。

  • - : 通常ファイル
  • d : ディレクトリ
  • l : シンボリックリンク

3文字×3組のアクセス権

アクセス権は3文字ずつ3組に分かれていて、「所有者」「グループ」「その他のユーザー」を表します。

- rw- r-- r--
|  |   |   |
|  |   |   +-- 3組目:その他のユーザー
|  |   +------ 2組目:グループ
|  +---------- 1組目:所有者
+------------- ファイルの種類

  • 1組目:所有者(例:rw-
  • 2組目:グループ(例:r--
  • 3組目:その他のユーザー(例:r--

このように、どの部分がどの権限を示しているかを意識して見ると、パーミッションが直感的に分かるようになっています。

各権限文字の意味と注意点

次は各権限の文字について見ていきます。

それぞれの3文字には、次のような意味があります。

  • r : 読み取り(Read)
  • w : 書き込み(Write)
  • x : 実行(ファイル)/アクセス(ディレクトリ)
  • - : 権限なし

パーミッションの仕組みを理解しておくと、どのユーザーがどんな操作をできるかをコントロールできます。

たとえば、次のようなケースがあるとします。

  • プログラムファイル(script.sh)に「実行権限(x)」がないと、コマンドで実行しようとしても「Permission denied」と表示されてしまいます。
  • ディレクトリに「書き込み権限(w)」がない場合、新しいファイルを作成できません。

ディレクトリの「読み取り」と「アクセス」権限の関係

ディレクトリの場合、「r」と「x」の組み合わせによってできることが変わります。

  • 「r」と「x」両方がある場合:lsで中身をリスト表示でき、アクセスも可能
  • 「x」のみ:中身のリストはできないが、ファイルやサブディレクトリに直接アクセス可能
  • 「r」のみ:実質的にアクセスできない

この違いを知っておくと、ディレクトリのパーミッション設定で迷うことが減ります。

記号表記の例:

  • -rw-r--r-- : 普通のファイル。所有者は読み書き可、グループと他ユーザーは読み取りのみ
  • drwxrwxr-x : ディレクトリ。所有者・グループは全権限、他ユーザーは読み取り・アクセスのみ


パーミッションの省略記法

8進数表記

記号表記は分かりやすいですが、長くなりがちです。そこで、より簡潔に表現できる8進数表記がよく使われます。

8進数表記では、各桁がそれぞれのユーザー属性の権限を表します。

たとえば、0755 という表記の場合、各桁の意味は次の通りです。

0  7  5  5
|  |  |  |
|  |  |  +-- 4桁目:その他のユーザー
|  |  +----- 3桁目:グループ
|  +-------- 2桁目:所有者
+----------- 1桁目:特殊な設定(省略可)

  • 1桁目:特殊な設定(SUID/SGID/Sticky bit など、省略可)
  • 2桁目:所有者
  • 3桁目:グループ
  • 4桁目:その他のユーザー

各桁には「読み取り」「書き込み」「実行」それぞれに数字が割り当てられています。

権限数字
r(読み取り)4
w(書き込み)2
x(実行/アクセス)1
権限なし0

たとえば「読み取り+書き込み」なら 4 + 2 = 6、「読み取り+実行」なら 4 + 1 = 5 です。

この数字の組み合わせで、細かく権限を設定できます。

計算例:

  • 読み取り+書き込み:4 + 2 = 6
  • 読み取り+実行:4 + 1 = 5
  • 全て:4 + 2 + 1 = 7

8進数表記の例:

  • 700 : 所有者は全権限、他は何もできない
  • 755 : 所有者は全権限、他は読み取り・実行のみ

パーミッションの変更コマンド例:

パーミッションを変更したいときは、Linuxのchmodコマンドを使います。

たとえば、ファイルやディレクトリの権限を設定したい場合、次のようなコマンドを実行します。

chmod 755 hoge
chmod -R 2770 hoge


パーミッションの応用編

特殊ビットでさらに柔軟な管理

Linuxでは、より高度な管理のために「特殊な権限」も設定できます。これらは8進数表記の1桁目で指定します。

  • SUID(Set User ID):1桁目「4」
  • ファイルを所有者の権限で実行できる
  • SGID(Set Group ID):1桁目「2」
  • ファイルを所有グループの権限で実行できる
  • ディレクトリに設定すると、新規作成ファイル・ディレクトリが親ディレクトリのグループを継承
  • Sticky bit:1桁目「1」
  • ディレクトリ内のファイル削除を所有者・ディレクトリ所有者・rootに限定

これらの特殊な権限は、チーム作業や共有ディレクトリの安全性向上に役立ちます。

4桁の例:

たとえば、SGIDを使ってグループ共有ディレクトリを作る場合は次のようにします。

chmod 2770 hoge
  • SGID(2)+所有者・グループは全権限(77)+他ユーザーは権限なし(0)


SGIDでグループ共有ディレクトリを作る手順

グループでディレクトリを共有する場合、SGIDを使うことで新しく作成したファイルやディレクトリが自動的にグループ共有されるようになります。以下の手順で設定します。

  • グループの作成

まず、共有用のグループを作成します。

   sudo groupadd projectgroup

  • 共有ディレクトリの作成

共有したいディレクトリを作成します。

   sudo mkdir /home/project-dir

  • ディレクトリのグループと基本権限を設定

ディレクトリの所有グループを変更し、グループに書き込み権限を付与します。

   sudo chown :projectgroup /home/project-dir
   sudo chmod 2770 /home/project-dir

※「2770」の2はSGIDビットを意味します。

  • ユーザーをグループに追加

共有したいユーザーをグループに追加します。

   sudo usermod -aG projectgroup username

  • グループ追加の反映(再ログイン)

追加したユーザーは一度ログアウトし、再度ログインすることでグループが反映されます。

  • SGIDの効果を確認

ディレクトリ内で新規ファイルを作成し、グループが自動的に「projectgroup」になっているか確認します。

   touch /home/project-dir/testfile
   ls -l /home/project-dir

出力例:

   -rw-rw---- 1 user1 projectgroup ... testfile

ポイント:

  • SGIDが設定されたディレクトリでは、新しく作成したファイルやサブディレクトリのグループが自動的に親ディレクトリと同じになります。
  • これにより、グループ全員で安全かつ効率的にファイルを共有できます。


プログラマーさん
プログラマーさん

パーミッションを正しく理解して、権限安全・快適に使いこなそう!

タイトルとURLをコピーしました