パーミッションとは
パーミッションは、ファイルやディレクトリへのアクセス権限を制御する仕組みです。
なぜパーミッションが重要か
- 🔒 セキュリティ: 不正アクセスを防ぐ
- 👥 マルチユーザー環境: 複数ユーザーでの安全な共有
- ⚙️ システムの安定性: 重要ファイルの保護
- 🐛 バグ防止: 意図しない変更を防ぐ
パーミッションの確認
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
# 出力例: 0022umaskの計算
- ファイル: 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.htmlsudoが必要と言われる
ファイルの所有者でない、または適切な権限がない場合は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/null3. 重要ファイルの保護
# 秘密鍵、パスワードファイルは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: プライベートディレクトリ