Chmod計算機で理解するUnixファイル権限
Unixファイル権限は、ファイルやディレクトリに対する読み取り、書き込み、実行の可否を制御します。LinuxまたはUnixシステム上のすべてのファイルとディレクトリには、ファイル所有者、グループ、その他全員の3つのカテゴリに対するアクセス権を決定する一連の権限ビットがあります。これらの権限を理解することは、システム管理、Web開発、DevOps、およびLinuxサーバーでの作業において不可欠です。
3つの権限トリプレット
権限は、それぞれ3ビットずつの3つのグループに編成されます:
所有者 グループ その他
rwx rwx rwx
各トリプレットには3つの権限が含まれています:
- r — 読み取り(4)
- w — 書き込み(2)
- x — 実行(1)
括弧内の値は8進数の重みです。8進数モードを計算するには、トリプレットごとに有効な権限の重みを加算します。
rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-x = 4 + 0 + 1 = 5
r-- = 4 + 0 + 0 = 4
-wx = 0 + 2 + 1 = 3
-w- = 0 + 2 + 0 = 2
--x = 0 + 0 + 1 = 1
--- = 0 + 0 + 0 = 0
一般的なChmodモード
| 8進数 | シンボリック | 所有者 | グループ | その他 | 一般的な用途 |
|---|---|---|---|---|---|
| 777 | rwxrwxrwx | rwx | rwx | rwx | フルアクセス(非推奨) |
| 755 | rwxr-xr-x | rwx | r-x | r-x | ディレクトリ、実行可能スクリプト |
| 750 | rwxr-x--- | rwx | r-x | --- | チームディレクトリ |
| 700 | rwx------ | rwx | --- | --- | プライベート実行ファイル |
| 644 | rw-r--r-- | rw- | r-- | r-- | 通常ファイル、Webアセット |
| 640 | rw-r----- | rw- | r--- | --- | チーム読み取り可能ファイル |
| 600 | rw------- | rw- | --- | --- | プライベートファイル(SSH鍵) |
| 400 | r-------- | r-- | --- | --- | 読み取り専用設定ファイル |
ファイルとディレクトリの権限の違い
実行ビットは、ファイルとディレクトリで動作が異なります。
| 権限 | ファイルの場合 | ディレクトリの場合 |
|---|---|---|
| r | ファイル内容の読み取り | ディレクトリ内容の一覧表示(ls) |
| w | ファイル内容の変更 | 内部のファイル作成、名前変更、削除 |
| x | ファイルをプログラムとして実行 | ディレクトリへの移動(cd)、内部のファイルへのアクセス |
この区別は重要です。ディレクトリを読み取り可能にするには、r と x の両方が必要です。r だけではファイル名を表示できますが、x がないと内部のファイルにアクセスできません。
# rはあるがxがないディレクトリ — 一覧表示はできるがアクセス不可
$ ls -la /example
# (ファイル名は表示されるが、cdしたりファイルを読んだりはできない)
# r-xのディレクトリ — 完全な読み取りアクセス
$ ls -la /example
$ cat /example/file.txt
Chmodコマンドリファレンス
8進数表記
chmod 755 script.sh # rwxr-xr-x
chmod 644 index.html # rw-r--r--
chmod 600 id_rsa # rw-------(SSH秘密鍵)
chmod 700 ~/.ssh # rwx------(SSHディレクトリ)
chmod -R 755 public/ # 再帰的(すべてのファイルとサブディレクトリに適用)
シンボリック表記
chmod u+x script.sh # 所有者に実行権限を追加
chmod g+w file.txt # グループに書き込み権限を追加
chmod o-r file.txt # その他の読み取り権限を削除
chmod a+rx script.sh # すべて(ugo)に読み取り+実行を追加
chmod u=rwx,g=rx,o= # 権限を正確に設定:rwxr-x---
chmod -R u=rwX,go=rX public/ # 再帰的、X = ディレクトリのみ実行
シンボリックモードの大文字 X は特別です:対象がディレクトリであるか、すでにいずれかのユーザーに実行権限がある場合にのみ実行権限を追加します。これは再帰的操作に非常に便利です。
# すべてのディレクトリを755、すべてのファイルを644に再帰的に設定
find /path -type f -exec chmod 644 {} \;
find /path -type d -exec chmod 755 {} \;
# またはXショートカットを使用
chmod -R u=rwX,go=rX /path
特殊権限ビット
基本的なrwxビットに加えて、Unixは3つの特別な権限をサポートしています。
Setuid(SUID)— u+s(4000)
実行ファイルに設定すると、起動したユーザーではなく、ファイル所有者の権限でプロセスが実行されます。これにより、一般ユーザーが昇格した権限を必要とするコマンドを実行できるようになります。
chmod u+s /usr/bin/passwd
# -rwsr-xr-x(所有者トリプレットのxがsに置き換わる)
Setgid(SGID)— g+s(2000)
ファイルの場合、プロセスはファイルのグループで実行されます。ディレクトリの場合、内部で作成された新しいファイルは、作成者のプライマリグループではなく、ディレクトリのグループを継承します。
chmod g+s /shared/directory
# drwxrwsr-x(グループトリプレットのxがsに置き換わる)
スティッキービット — +t(1000)
主に /tmp で使用されます — ファイル所有者(またはroot)のみがディレクトリ内のファイルを削除または名前変更でき、他のユーザーに書き込み権限があっても同様です。
chmod +t /tmp
# drwxrwxrwt(その他トリプレットのxがtに置き換わる)
Umask:デフォルト権限
Umaskは、新しいファイルやディレクトリが作成されたときにどの権限ビットを削除するかを定義します。これは、望ましいデフォルト権限の逆数です。
umask 022 # ほとんどのシステムのデフォルト
# ファイル:666 - 022 = 644(rw-r--r--)
# ディレクトリ:777 - 022 = 755(rwxr-xr-x)
umask 002 # 共有ディレクトリのデフォルト
# ファイル:666 - 002 = 664(rw-rw-r--)
# ディレクトリ:777 - 002 = 775(rwxrwxr-x)
umask 077 # 制限的(プライベート)
# ファイル:666 - 077 = 600(rw-------)
# ディレクトリ:777 - 077 = 700(rwx------)
セキュリティのベストプラクティス
- シークレットを含む設定ファイル:600(
chmod 600 .env) - SSH秘密鍵:600(
chmod 600 ~/.ssh/id_rsa) - SSHディレクトリ:700(
chmod 700 ~/.ssh) - Webディレクトリ:755(
chmod 755 /var/www/html) - Webファイル:644(
chmod 644 /var/www/html/index.html) - アップロードディレクトリ:755(777ではない)
- 実行可能スクリプト:755(
chmod 755 deploy.sh) - 本番環境で777は絶対に使用しない — すべてのユーザーがファイルを変更できてしまいます
よくある落とし穴
落とし穴1:ディレクトリとファイルの権限を混同する
# ❌ 間違い — すべてのファイルに再帰的に実行権限を付与
chmod -R 755 /path
# ✅ 正しい — ファイルとディレクトリの権限を分ける
find /path -type f -exec chmod 644 {} \;
find /path -type d -exec chmod 755 {} \;
落とし穴2:Webアップロードに777を使用する
# ❌ 間違い — すべてのユーザーが書き込み可能
chmod 777 uploads/
# ✅ 正しい — 所有者は書き込み可能、その他は読み取り+実行のみ
chmod 755 uploads/
# Webサーバーユーザーを所有者にする
chown www-data:www-data uploads/
落とし穴3:チームプロジェクトでグループ権限を無視する
# 新しいファイルがグループを継承するようにスティッキーグループビットを設定
chmod g+s /project/shared
chmod 775 /project/shared
オンラインツール
Help2CodeのCHMOD計算機は、インタラクティブな権限ビットトグルを提供し、即座に8進数とシンボリック出力を表示します。所有者、グループ、その他の読み取り、書き込み、実行を切り替え、結果のchmodコマンドを即座に確認できます。755、644、600、700などの一般的なモードのクイックプリセットにより、8進数を覚えなくても適切な権限セットを簡単に見つけられます。
結論
Unixファイル権限は、読み取り、書き込み、実行ビットの3つのトリプレットに基づいたシンプルだが強力なシステムです。8進数表記は権限をコンパクトにしスクリプト化可能にし、シンボリック表記はきめ細かな制御を提供します。umask、SUID、SGID、スティッキービットを含む権限の理解は、安全なサーバー管理に不可欠です。CHMOD計算機ツールを使用して、権限の組み合わせをインタラクティブに試してみてください。