Linuxのパーミッションシステム
Linuxでは、すべてのファイルとディレクトリに対して「誰が」「何を」できるかを細かく制御できます。
パーミッションの基本構造
ファイルツリー
ls -l
の出力例:
-rw-r--r-- 1 user group 0 Jan 1 12:00 myfile.txt
drwxr-xr-x 2 user group 64 Jan 1 12:00 mydir
最初の10文字がパーミッション情報です。
パーミッションの読み方
-rwxrwxrwx
│└┬┘└┬┘└┬┘
│ │ │ └── その他(other)の権限
│ │ └───── グループ(group)の権限
│ └──────── 所有者(user)の権限
└────────── ファイルタイプ
権限の種類
記号 | 権限 | ファイルへの意味 | ディレクトリへの意味 |
---|---|---|---|
r | 読み取り(read) | ファイルの内容を読める | ディレクトリの一覧を表示できる |
w | 書き込み(write) | ファイルを編集できる | ファイルの作成・削除ができる |
x | 実行(execute) | プログラムとして実行できる | ディレクトリに移動できる |
ファイルタイプ
記号 | タイプ |
---|---|
- | 通常ファイル |
d | ディレクトリ |
l | シンボリックリンク |
c | キャラクタデバイス |
b | ブロックデバイス |
パーミッションの変更:chmod
chmod
(Change Mode)は、ファイルやディレクトリのパーミッションを変更します。
シンボリックモード
ファイルツリー
シンボリックモードの構文:
u
: 所有者(user)g
: グループ(group)o
: その他(other)a
: すべて(all)+
: 権限を追加-
: 権限を削除=
: 権限を設定
例:chmod u+x script.sh
数値モード(8進数)
各権限には数値が割り当てられています:
- 読み取り(r)= 4
- 書き込み(w)= 2
- 実行(x)= 1
ファイルツリー
よく使われるパーミッション:
644
: rw-r--r-- (一般的なファイル)755
: rwxr-xr-x (実行可能ファイル)700
: rwx------ (プライベートファイル)777
: rwxrwxrwx (フルアクセス - 危険!)
実践的なchmodの使用例
スクリプトファイルの実行権限
ファイルツリー
# 実行権限を追加
chmod +x myscript.sh
# または
chmod 755 myscript.sh
# 特定のユーザーのみ実行可能
chmod u+x,go-x myscript.sh
ディレクトリの権限
# ディレクトリに入れるようにする
chmod +x directory/
# プライベートディレクトリ
chmod 700 private/
# 読み取り専用の共有ディレクトリ
chmod 755 public/
再帰的な変更
# ディレクトリ内のすべてのファイル
chmod -R 644 documents/
# ディレクトリとファイルを分けて設定
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
所有者の変更:chown
chown
(Change Owner)は、ファイルやディレクトリの所有者を変更します。
ファイルツリー
通常、chownはroot権限が必要です。 このプレイグラウンドでは制限があるため、実際のLinuxシステムでの動作とは異なる場合があります。
chownの使用例
# 所有者を変更
sudo chown newuser file.txt
# 所有者とグループを同時に変更
sudo chown newuser:newgroup file.txt
# グループのみ変更
sudo chown :newgroup file.txt
# 再帰的に変更
sudo chown -R user:group directory/
グループの変更:chgrp
chgrp
(Change Group)は、グループのみを変更する専用コマンドです。
# グループを変更
chgrp developers project/
# 再帰的に変更
chgrp -R webteam /var/www/html/
umask - デフォルトパーミッション
umask
は、新しく作成されるファイルやディレクトリのデフォルトパーミッションを設定します。
ファイルツリー
umaskの仕組み:
- ファイルの最大権限:666(rw-rw-rw-)
- ディレクトリの最大権限:777(rwxrwxrwx)
- umask値を引いた値が実際のパーミッション
例:umask 022の場合
- ファイル:666 - 022 = 644(rw-r--r--)
- ディレクトリ:777 - 022 = 755(rwxr-xr-x)
特殊なパーミッション
SUID、SGID、スティッキービット
ビット | 記号 | 説明 |
---|---|---|
SUID | s (user) | 実行時に所有者の権限で実行 |
SGID | s (group) | 実行時にグループの権限で実行 |
Sticky | t (other) | ディレクトリ内のファイルは所有者のみ削除可能 |
# SUID設定
chmod u+s program
# SGID設定
chmod g+s directory/
# スティッキービット設定
chmod +t /tmp/
実践演習
以下の演習に挑戦してみましょう:
ファイルツリー
課題
- deploy.shに実行権限を付与
- docsディレクトリを読み取り専用に設定
- srcディレクトリをグループメンバーが書き込み可能に
- プロジェクト全体を他のユーザーから見えないように設定
解答例:
# 1. 実行権限を付与
chmod +x project/scripts/deploy.sh
# 2. 読み取り専用
chmod 555 project/docs/
# 3. グループ書き込み可能
chmod 775 project/src/
# 4. 他のユーザーから隠す
chmod -R o-rwx project/
セキュリティのベストプラクティス
1. 最小権限の原則
# 悪い例
chmod 777 file.txt
# 良い例
chmod 640 config.txt # 所有者は読み書き、グループは読み取りのみ
2. 重要なファイルの保護
# 設定ファイル
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# パスワードファイル
chmod 600 .env
3. ディレクトリの適切な設定
# Webサーバーのドキュメントルート
chmod 755 /var/www/html
chmod 644 /var/www/html/*.html
# 共有ディレクトリ
chmod 1777 /tmp # スティッキービット付き
よくあるトラブルと対処法
Permission denied
# 原因の確認
ls -l file.txt
whoami
groups
# 解決策
chmod u+r file.txt # 読み取り権限を追加
sudo command # root権限で実行
スクリプトが実行できない
# 実行権限の確認
ls -l script.sh
# 実行権限を付与
chmod +x script.sh
# シェバンの確認
head -1 script.sh # #!/bin/bash があるか
まとめ
このレッスンでは、Linuxのパーミッションシステムについて学びました。適切な権限設定は、システムのセキュリティを保つ上で非常に重要です。
次のレッスンでは、これまで学んだコマンドを組み合わせた実践的な演習を行います。
⚠️ 権限設定は慎重に!特に本番環境では、777のような緩い権限は避け、必要最小限の権限を設定しましょう。