LPIC Level1 復習ラジオ 20:パーミッション総復習

投稿日:2026-07-11

音声

※ AI音声で読み上げます

目次

  1. パーミッションの基本構造
  2. ファイルとディレクトリのrwx
  3. 数値表記
  4. chmod
  5. chownchgrp
  6. umask
  7. SUID
  8. SGID
  9. Sticky Bit
  10. 実践的な確認と注意点
  11. 30秒チェック
  12. 要約

パーミッションの基本構造

Linuxのファイルやディレクトリには、所有者、所有グループ、その他の利用者に対するアクセス権が設定されています。

ls -l example.txt
-rw-r----- 1 user1 developers 1200 Jul 11 10:00 example.txt

ls -lの先頭部分を分解すると、次のようになります。

-  rw-  r--  ---
│   │    │    └─ other:その他の利用者
│   │    └────── group:所有グループ
│   └─────────── user:所有者
└─────────────── ファイル種別
位置 意味
1文字目 ファイル種別。-は通常ファイル、dはディレクトリ、lはシンボリックリンクなど
2~4文字目 所有者、userの権限
5~7文字目 所有グループ、groupの権限
8~10文字目 その他、otherの権限

権限の対象は、記号では次の文字で表します。

記号 対象
u user。ファイルの所有者
g group。ファイルの所有グループに属する利用者
o other。所有者にも対象グループにも該当しない利用者
a all。ugoのすべて

どの権限欄が使われるか

概念的には、アクセスするプロセスの実効UIDが所有者と一致すれば所有者の権限、該当するグループに一致すればグループの権限、それ以外ならotherの権限が使われます。

三つの欄から最も許可が多いものを選ぶわけではありません。所有者として判定された場合は、たとえotherの方が広い権限でも、所有者欄が使われます。

rootや適切なLinux capabilitiesを持つプロセスは、一部の通常の権限検査を超えて操作できる場合があります。

ファイルとディレクトリのrwx

rwxは、対象が通常ファイルかディレクトリかによって意味が変わります。

通常ファイル

権限 数値 主な意味
r 4 ファイルの内容を読み取る
w 2 ファイルの内容を変更する
x 1 プログラムやスクリプトとして実行する

実行権限が付いていても、内容が有効な実行形式や適切なシバンを持つスクリプトでなければ、正常に実行できるとは限りません。

ディレクトリ

権限 主な意味
r ディレクトリ内の名前の一覧を読み取る
w ディレクトリエントリを作成、削除、名前変更する
x ディレクトリを通過し、名前を指定して中の項目へアクセスする

ディレクトリのxは、検索権限や通過権限とも説明されます。パスの途中にある各ディレクトリを通過するには、通常そのディレクトリのxが必要です。

組み合わせによる違い

  • ディレクトリにrがありxがない:名前一覧を取得できても、項目の属性確認や中への通常アクセスが制限される
  • ディレクトリにxがありrがない:名前を一覧取得できなくても、名前を知っていれば項目へアクセスできる場合がある
  • ディレクトリにwがありxがある:項目の作成、削除、名前変更が可能になる場合がある

削除を決めるのは親ディレクトリ

ファイルを削除できるかどうかは、通常、ファイル自身のwよりも、そのファイルを含む親ディレクトリのwxが重要です。

ls -ld work/
ls -l work/file.txt

ファイルが読み取り専用でも、親ディレクトリに必要な権限があれば削除できる場合があります。反対に、ファイルへ書き込めても、親ディレクトリの権限がなければ削除や名前変更はできません。

数値表記

パーミッションは、r=4w=2x=1として、所有者、グループ、その他ごとに合計して表せます。

数値 記号 意味
0---権限なし
1--x実行のみ
2-w-書き込みのみ
3-wx書き込みと実行
4r--読み取りのみ
5r-x読み取りと実行
6rw-読み取りと書き込み
7rwx読み取り、書き込み、実行

代表例

数値 記号 代表的な用途
644 rw-r--r-- 所有者だけが編集し、他は読み取り可能な通常ファイル
600 rw------- 所有者だけが読み書きする秘密情報など
755 rwxr-xr-x 所有者が変更し、他も通過または実行できるディレクトリや実行ファイル
750 rwxr-x--- 所有者とグループだけが利用するディレクトリなど
700 rwx------ 所有者専用のディレクトリや実行ファイル

先頭の0

0644
0755
04755

先頭の0は、シェルコマンドの引数として常に必須というわけではありませんが、権限値が8進数であることを分かりやすくします。プログラミング言語や設定形式では、表記規則が異なることがあります。

特殊権限を含む4桁表記

通常の3桁の前へ、SUID、SGID、Sticky Bitを表す桁を追加できます。

数値 特殊権限
4SUID
2SGID
1Sticky Bit
4755  SUID + 755
2755  SGID + 755
1777  Sticky Bit + 777
6755  SUID + SGID + 755

chmod

chmodは、ファイルやディレクトリのモードビットを変更します。数値形式とシンボル形式があります。

数値形式

chmod 644 file.txt
chmod 755 script.sh
chmod 700 private-dir

数値形式は、指定した所有者、グループ、その他の権限をまとめて設定します。

シンボル形式

chmod u+x script.sh
chmod g-w file.txt
chmod o-r secret.txt
chmod a=r file.txt
chmod u=rw,g=r,o= file.txt
演算子 意味
+ 指定した権限を追加する
- 指定した権限を削除する
= 指定対象の権限を、その内容へ置き換える

chmod a=r file.txtは、すべての対象を読み取りだけにします。既存の書き込み権限や実行権限も外れるため、=の動作に注意します。

複数の変更

chmod u=rw,g=r,o= file.txt
chmod u+x,g-w,o-r file.txt

複数のシンボル指定は、カンマで区切れます。

Xの利用

chmod -R u=rwX,go=rX project/

大文字のXは、対象がディレクトリである場合、または既に誰かの実行権限がある通常ファイルの場合に実行権限を設定します。

ディレクトリを再帰的に読み取り可能にしつつ、すべての通常ファイルへ無条件に実行権限を付けたくない場合に役立ちます。

再帰処理

chmod -R 755 directory/
chmod -R u+rwX,go-rwx directory/

-Rは配下を再帰的に変更します。ただし、通常ファイルとディレクトリへ同じ数値を設定すると、不要な実行権限が付いたり、必要な通過権限が失われたりします。

参照ファイルと同じ権限

chmod --reference=source.txt target.txt

GNU chmodでは、別のファイルと同じモードへ設定できます。

chownchgrp

chownは所有者や所有グループを変更し、chgrpは所有グループを変更します。

所有者の変更

sudo chown user2 file.txt

所有者とグループを同時に変更

sudo chown user2:developers file.txt
sudo chown user2.developers file.txt

GNU chownではドット形式も扱えますが、利用者名にドットを含められる環境もあるため、通常はコロン形式が分かりやすくなります。

グループだけを変更

chown :developers file.txt
chgrp developers file.txt

配下を再帰的に変更

sudo chown -R user2:developers project/

-Rは配下の多数のファイルへ影響します。対象パスを取り違えると、システムやアプリケーションが動作しなくなることがあります。

現在の所有情報を確認する

ls -l file.txt
stat file.txt
id user2
getent group developers
  • ls -l:所有者、グループ、権限を一覧で確認
  • stat:UID、GID、数値と記号のモードなどを詳しく確認
  • id:利用者のUID、主グループ、補助グループを確認
  • getent group:グループ情報を名前サービスも含めて確認

権限変更後の特殊ビット

所有者変更や権限変更によって、セキュリティ上の理由からSUIDやSGIDが解除される場合があります。特殊ビットを含むファイルでは、変更後にls -lstatで再確認します。

一般利用者が所有者を自由に変更できると、利用量の計算や権限管理を回避できるため、所有者変更は通常、特権が必要です。グループ変更にも、所有関係や所属グループに基づく制限があります。

umask

umaskは、新しく作成されるファイルやディレクトリの初期パーミッションから、許可しない権限ビットを外すためのマスクです。

umask
umask -S
umask -p
  • umask:現在のマスクを数値形式で表示
  • umask -S:結果として許可される権限をシンボル形式で表示
  • umask -p:bashで再入力しやすい形式で表示

代表的な考え方

一般的なコマンドは、通常ファイルを最大666、ディレクトリを最大777として作成しようとし、そこからumaskで指定されたビットを外します。

umask 022

通常ファイル:666 から 022 のビットを外す → 644
ディレクトリ:777 から 022 のビットを外す → 755
umask 通常ファイルの代表結果 ディレクトリの代表結果
002 664 775
022 644 755
027 640 750
077 600 700

umaskは単純な10進数の引き算ではなく、ビットを無効にする処理です。例えば、実行権限を要求していない通常ファイルへ、umaskによって実行権限が追加されることはありません。

設定と確認

old_umask=$(umask)
umask 077
touch secret.txt
mkdir private-dir
ls -ld secret.txt private-dir
umask "$old_umask"

umaskは現在のシェル実行環境へ設定されます。子プロセスは親のumaskを継承しますが、子シェル側で変更しても、通常は親シェルへ戻って反映されません。

既存ファイルには影響しない

umaskを変更しても、既に存在するファイルやディレクトリの権限は変わりません。既存の権限変更にはchmodを使います。

例外と注意

実際の初期権限は、作成プログラムが要求するモード、umask、親ディレクトリのデフォルトACLなどによって決まります。デフォルトACLが設定されている場合は、単純な666777との組み合わせだけでは説明できないことがあります。

SUID

SUID、Set User IDは、実行ファイルに設定する特殊権限です。対応する実行形式を起動したとき、プロセスの実効UIDを、そのファイルの所有者へ変更して動作させる仕組みです。

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ... /usr/bin/passwd

この例では、所有者の実行位置がxではなくsになっています。

設定方法

chmod u+s program
chmod 4755 program

解除方法

chmod u-s program
chmod 0755 program

sS

表示 意味
s SUIDと所有者の実行権限が両方設定されている
S SUIDは設定されているが、所有者の実行権限がない
chmod 4644 program
ls -l program
-rwSr--r-- ... program

大文字のSは、特殊ビットがあるものの、対応する実行権限がない状態を示します。

利用目的

一般利用者が、本来は所有者だけに許可された限定的な処理を、プログラムの制御下で実行するために利用されます。

ただし、SUIDプログラムに脆弱性があると、所有者の権限が悪用される可能性があります。SUIDを安易に独自スクリプトへ付けるのではなく、必要性、実行形式、所有者、書き込み権限を慎重に確認します。

Linuxでは、スクリプトのSUIDは通常、安全上の理由から期待どおりには機能しません。また、ファイルシステムがnosuidでマウントされている場合など、SUIDが無効化されることがあります。

SGID

SGID、Set Group IDは、通常ファイルとディレクトリで役割が異なります。

実行ファイルのSGID

実行ファイルへSGIDを設定すると、実行時のプロセスの実効GIDが、そのファイルの所有グループになります。

chmod g+s program
chmod 2755 program

ディレクトリのSGID

ディレクトリへSGIDを設定すると、その中に新しく作成されるファイルやディレクトリが、親ディレクトリのグループを引き継ぐようになります。

sudo chown root:project shared/
chmod 2775 shared/
ls -ld shared/

共同作業用ディレクトリで、作成者ごとの主グループではなく、共通のプロジェクトグループを維持するために使われます。

新しく作成されるサブディレクトリは、通常SGIDビットも引き継ぎます。一方、ファイルに付くグループの書き込み権限などは、作成プログラム、umask、デフォルトACLの影響を受けます。

解除方法

chmod g-s program
chmod g-s shared/
chmod 0755 program

sS

表示 意味
s SGIDとグループの実行権限が両方設定されている
S SGIDは設定されているが、グループの実行権限がない
chmod 2644 program
ls -l program
-rw-r-Sr-- ... program

共有ディレクトリの例

sudo groupadd project
sudo mkdir -p /srv/project
sudo chown root:project /srv/project
sudo chmod 2770 /srv/project

この例では、所有者とprojectグループだけが利用でき、新規項目はprojectグループを継承します。複数利用者で編集する場合は、利用者のグループ所属、umask、必要に応じてデフォルトACLも確認します。

Sticky Bit

Sticky Bitは、主に複数利用者が書き込める共有ディレクトリで、他人のファイルを勝手に削除または名前変更しにくくするために使われます。

ls -ld /tmp
drwxrwxrwt ... /tmp

/tmpでは、多くの利用者が項目を作成できます。しかしSticky Bitがあるため、通常、項目の削除や名前変更は、その項目の所有者、ディレクトリの所有者、または適切な特権を持つプロセスに制限されます。

設定方法

chmod +t shared/
chmod 1777 shared/

解除方法

chmod -t shared/
chmod 0777 shared/

tT

表示 意味
t Sticky Bitとotherの実行権限が両方設定されている
T Sticky Bitは設定されているが、otherの実行権限がない
chmod 1766 shared/
ls -ld shared/
drwxrw-rwT ... shared/

大文字のTは、Sticky Bitがあるものの、otherの実行、つまり通過権限がない状態を表します。

Sticky Bitだけで秘密になるわけではない

Sticky Bitは、主に削除や名前変更を制限します。他人のファイルを読めるか、内容を書き換えられるかは、それぞれのファイルやディレクトリの通常の権限、ACLなどで決まります。

共有ディレクトリを安全に設計する場合は、Sticky Bitだけでなく、所有グループ、SGID、umask、ACLを目的に応じて組み合わせます。

実践的な確認と注意点

1. パス全体の権限を確認する

namei -l /srv/project/data/file.txt

対象ファイルだけに十分な権限があっても、親ディレクトリのどこかにxがなければ到達できません。namei -lは、パスを構成する各要素の所有者と権限を確認するのに便利です。

2. 所有者とグループ所属を確認する

ls -l file.txt
stat -c '%A %a %U %G %n' file.txt
id
id user1
getent group developers

権限文字だけでなく、アクセスする利用者がどのUID、GID、補助グループで動いているかを確認します。新しいグループ所属が既存のログインセッションへ反映されていない場合は、再ログインなどが必要です。

3. ディレクトリ自身を表示する

ls -ld directory/
ls -l directory/

ls -l directory/は中身を表示します。ディレクトリ自身の所有者や権限を見る場合は、-dを付けます。

4. 数値表記を確認する

stat -c '%A %a %n' file.txt directory/

%Aは記号形式、%aは8進数形式の権限を表示します。

5. ACLの有無を確認する

ls -l file.txt
getfacl file.txt

ls -lの権限表示の後ろに+が付いている場合、追加のACLが設定されている可能性があります。通常のrwxだけで説明できない場合はgetfaclを確認します。

6. マウントオプションを確認する

findmnt -no TARGET,OPTIONS /path/to/file
mount | grep ' /mountpoint '

noexecnosuid、読み取り専用などのマウント設定によって、モードビットがあっても実行や特殊権限が制限される場合があります。

7. 権限不足を段階的に切り分ける

whoami
id
namei -l /path/to/file
stat /path/to/file
getfacl /path/to/file
findmnt -no OPTIONS /path/to/file

いきなりchmod 777を実行せず、利用者、グループ、パス上のディレクトリ、ACL、マウント設定の順に確認します。

よくある症状

症状 主な確認点
ファイルは読めるのにディレクトリへ入れない パス上のディレクトリのx
ファイルが読み取り専用なのに削除できた 親ディレクトリのwx
chmod +xでも実行できない 内容、シバン、インタープリタ、noexec、改行コード
グループ権限があるのに利用できない 実際のグループ所属、再ログイン、ACL、親ディレクトリ
新規ファイルの権限が想定と違う umask、作成プログラムの指定、デフォルトACL
SUIDやSGIDが消えた chownchmod後の再確認、ファイルシステムの制限
共有ディレクトリで他人のファイルを消せる Sticky Bitの有無

30秒チェック

  1. -rwxr-x---の所有者、グループ、その他の数値は、それぞれ何でしょうか。
  2. ディレクトリのrwxは、それぞれ主に何を許可するでしょうか。
  3. chmod g-w file.txtは、どの権限をどの対象から外すでしょうか。
  4. umaskが027の場合、一般的な通常ファイルとディレクトリの初期権限は何になるでしょうか。
  5. SUID、SGID、Sticky Bitの数値は、それぞれ何でしょうか。
  6. SGIDを設定したディレクトリ内で、新規項目のグループは通常どうなるでしょうか。
  7. drwxrwxrwtの末尾のtは何を表すでしょうか。
  8. ファイルへ書き込み権限がなくても削除できる場合があるのは、削除が主にどこの権限で決まるためでしょうか。
答えを表示
  1. 所有者7、グループ5、その他0。数値表記は750
  2. rは名前一覧、wは項目の作成・削除・名前変更、xは通過と名前指定アクセス
  3. 所有グループから書き込み権限を外す
  4. 通常ファイルは代表的に640、ディレクトリは750
  5. SUIDは4、SGIDは2、Sticky Bitは1
  6. 親ディレクトリの所有グループを引き継ぐ
  7. Sticky Bitとotherの実行権限が設定されている
  8. 親ディレクトリの書き込み権限と実行権限で決まるため

要約

  • Linuxの基本権限は、所有者、所有グループ、その他の三つの対象へ設定されます。
  • ls -lの先頭1文字はファイル種別、その後の9文字は所有者、グループ、その他の権限です。
  • アクセス判定では、該当する所有者、グループ、その他の欄が使われ、最も広い欄を選ぶわけではありません。
  • 通常ファイルのrwxは読み取り、書き込み、実行を表します。
  • ディレクトリのrwxは名前一覧、項目の作成・削除・名前変更、通過を表します。
  • ファイルの削除や名前変更は、主に親ディレクトリのwxで決まります。
  • 数値表記ではr=4w=2x=1を対象ごとに合計します。
  • chmodは数値形式またはシンボル形式でモードビットを変更します。
  • 再帰的な権限変更では、通常ファイルとディレクトリへ必要な権限が異なることに注意します。
  • chownは所有者やグループ、chgrpはグループを変更します。
  • umaskは新規項目の初期権限から指定ビットを外し、既存ファイルの権限は変更しません。
  • 一般的にumask 022では、通常ファイルは644、ディレクトリは755になります。
  • SUIDは実行時の実効UID、実行ファイルのSGIDは実効GIDに関係します。
  • ディレクトリのSGIDは、新規項目へ親ディレクトリのグループを継承させます。
  • Sticky Bitは、共有ディレクトリで他人の項目を削除または名前変更しにくくします。
  • 特殊権限はSUIDが4、SGIDが2、Sticky Bitが1で、通常権限の前へ付けます。
  • stが大文字の場合、特殊ビットはあるものの、対応する実行権限がありません。
  • 権限問題では、所有者、グループ所属、パス上の各ディレクトリ、ACL、umask、マウント設定を順番に確認します。
  • 原因確認をせずにchmod 777で回避せず、必要最小限の権限を設定します。

参考資料