パーミッションとは

パーミッションは、ファイルやディレクトリへのアクセス権限を制御する仕組みです。

なぜパーミッションが重要か

  • 🔒 セキュリティ: 不正アクセスを防ぐ
  • 👥 マルチユーザー環境: 複数ユーザーでの安全な共有
  • ⚙️ システムの安定性: 重要ファイルの保護
  • 🐛 バグ防止: 意図しない変更を防ぐ

パーミッションの確認

ls -l コマンド

$ ls -l
-rw-r--r-- 1 user group 1234 May 15 10:00 file.txt
drwxr-xr-x 2 user group 4096 May 15 10:00 mydir

パーミッション表示の読み方

-rw-r--r--
│││││││││
││└┴┴┴┴┴┴─ その他ユーザー(others)の権限
│└┴┴──────── グループ(group)の権限
└┴┴──────── 所有者(owner)の権限
└──────── ファイルタイプ(- = 通常ファイル、d = ディレクトリ)

権限の種類

  • r (read): 読み取り権限 - ファイルの内容を見る
  • w (write): 書き込み権限 - ファイルを編集・削除
  • x (execute): 実行権限 - プログラムとして実行

ディレクトリでの意味

  • r: ディレクトリ内のファイル一覧表示
  • w: ディレクトリ内でファイル作成・削除
  • x: ディレクトリに移動(cd)できる

数値表記(8進数)

基本的な数値

  • 4 = r (読み取り)
  • 2 = w (書き込み)
  • 1 = x (実行)
  • 0 = 権限なし

組み合わせ

  • 7 = rwx (4+2+1 = すべての権限)
  • 6 = rw- (4+2 = 読み書き)
  • 5 = r-x (4+1 = 読み取りと実行)
  • 4 = r-- (読み取りのみ)
  • 0 = --- (権限なし)

よく使うパーミッション

  • 755: rwxr-xr-x - 実行ファイル、ディレクトリ
  • 644: rw-r--r-- - 通常のファイル
  • 600: rw------- - 秘密鍵、パスワードファイル
  • 700: rwx------ - プライベートディレクトリ
  • 777: rwxrwxrwx - 全員フルアクセス(危険!)

chmodコマンド - パーミッション変更

数値モード

# 644 に変更(rw-r--r--)
chmod 644 file.txt

# 755 に変更(rwxr-xr-x)
chmod 755 script.sh

# 600 に変更(rw-------)
chmod 600 private.key

シンボリックモード

# 所有者に実行権限を追加
chmod u+x script.sh

# グループから書き込み権限を削除
chmod g-w file.txt

# その他ユーザーの全権限を削除
chmod o-rwx secret.txt

# 全員に読み取り権限を追加
chmod a+r file.txt

記号の意味

  • u: user(所有者)
  • g: group(グループ)
  • o: others(その他)
  • a: all(全員)
  • +: 権限を追加
  • -: 権限を削除
  • =: 権限を設定(上書き)

再帰的に変更

# ディレクトリとその中身すべて
chmod -R 755 mydir/

# ファイルのみ644、ディレクトリのみ755に設定
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

chownコマンド - 所有者変更

基本的な使い方

# 所有者のみ変更
chown newuser file.txt

# 所有者とグループを変更
chown newuser:newgroup file.txt

# グループのみ変更
chown :newgroup file.txt

再帰的に変更

# ディレクトリとその中身すべて
sudo chown -R user:group /var/www/html/

chgrpコマンド(グループのみ変更)

chgrp developers project.txt
chgrp -R www-data /var/www/

特殊なパーミッション

SUID(Set User ID)

実行時に所有者の権限で実行されます。

# SUIDビットを設定(4000を追加)
chmod 4755 program
# または
chmod u+s program

# 表示: -rwsr-xr-x(sに注目)

例: /usr/bin/passwd は一般ユーザーでも実行できるが、root権限でパスワードファイルを変更できる。

SGID(Set Group ID)

実行時にグループ権限で実行、またはディレクトリ内の新規ファイルが親ディレクトリのグループを継承。

# SGIDビットを設定(2000を追加)
chmod 2755 shared_dir
# または
chmod g+s shared_dir

# 表示: drwxr-sr-x(sに注目)

Sticky Bit

ディレクトリ内のファイルを所有者のみが削除可能にします。

# Sticky bitを設定(1000を追加)
chmod 1777 /tmp
# または
chmod +t /tmp

# 表示: drwxrwxrwt(tに注目)

例: /tmp ディレクトリでは誰でもファイルを作成できるが、削除は所有者のみ。

umask - デフォルトパーミッション

umaskとは

umaskは、新規作成ファイルのデフォルトパーミッションを制御します。

# 現在のumask確認
umask
# 出力例: 0022

umaskの計算

  • ファイル: 666 - umask
  • ディレクトリ: 777 - umask

例: umask 022の場合

  • ファイル: 666 - 022 = 644 (rw-r--r--)
  • ディレクトリ: 777 - 022 = 755 (rwxr-xr-x)

umaskの設定

# 一時的に変更
umask 027
# ファイル: 640 (rw-r-----)
# ディレクトリ: 750 (rwxr-x---)

# 永続的に変更(~/.bashrcに追加)
echo "umask 027" >> ~/.bashrc

実用例

Webサーバーのファイル

# Webファイルの所有者をwww-dataに
sudo chown -R www-data:www-data /var/www/html/

# ディレクトリは755、ファイルは644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

SSH秘密鍵

# 秘密鍵は所有者のみ読み取り可能に
chmod 600 ~/.ssh/id_rsa

# .sshディレクトリは700
chmod 700 ~/.ssh/

共有ディレクトリ

# チーム共有ディレクトリの作成
sudo mkdir /shared
sudo chgrp developers /shared
sudo chmod 2775 /shared  # SGID + rwxrwxr-x

# 新規ファイルが自動的にdevelopersグループに

スクリプトファイル

# 実行権限を追加
chmod +x script.sh

# または
chmod 755 script.sh

トラブルシューティング

「Permission denied」エラー

# 権限を確認
ls -l file.txt

# 実行権限がない場合
chmod +x file.txt

# ディレクトリに入れない場合
chmod +x directory/

Webページが表示されない

# Webサーバーが読めるか確認
ls -l /var/www/html/index.html

# 修正
sudo chown www-data:www-data /var/www/html/index.html
sudo chmod 644 /var/www/html/index.html

sudoが必要と言われる

ファイルの所有者でない、または適切な権限がない場合はsudoが必要です。

# 所有者を確認
ls -l file.txt

# 自分を所有者に
sudo chown $USER file.txt

セキュリティのベストプラクティス

1. 最小権限の原則

  • 777や666は避ける
  • 必要最小限の権限のみ付与
  • 特にサーバー環境では厳格に

2. 定期的な権限チェック

# 777のファイルを検索(危険)
find / -perm 777 -type f 2>/dev/null

# SUIDファイルを検索
find / -perm -4000 -type f 2>/dev/null

3. 重要ファイルの保護

# 秘密鍵、パスワードファイルは600
chmod 600 ~/.ssh/id_rsa
chmod 600 /etc/shadow  # 通常は既に設定済み

4. ログファイルの権限

# ログは640(所有者が読み書き、グループが読み取り)
chmod 640 /var/log/app.log

まとめ

適切なパーミッション管理はLinuxシステムのセキュリティの基本です。

重要ポイント

  • rwxの意味を理解する
  • 数値表記(755、644など)を覚える
  • chmodで権限変更、chownで所有者変更
  • umaskでデフォルト権限を制御
  • 最小権限の原則を守る

覚えておくべきパーミッション

  • 755: 実行ファイル、ディレクトリ
  • 644: 通常のファイル
  • 600: 秘密情報
  • 700: プライベートディレクトリ