この記事の対象者
- ファイルパーミッションの設定に不安がある方
- .envファイルやSSH鍵のセキュリティを確認したい方
- サーバー上の機密ファイルを適切に保護したい方
目次
なぜパーミッション管理が重要なのか
サーバー上には.envファイル(DBパスワード、APIキー)やSSH秘密鍵など、漏洩すると致命的な機密ファイルがあります。パーミッションが適切でないと、低権限の攻撃者でも機密情報を窃取できます。
.envが644
全ユーザーからDBパスワード等が読める
攻撃者がシェルを取得
低権限でも機密情報を窃取可能
DB接続・API乗っ取り
データベースや外部サービスに不正アクセス
パーミッションの基礎知識
Linuxのファイルパーミッションは3桁の数字で表されます。
| 数字 | 権限 | 意味 |
|---|---|---|
4 |
r(読み取り) | ファイルの内容を読める |
2 |
w(書き込み) | ファイルを編集できる |
1 |
x(実行) | ファイルを実行できる |
3桁はそれぞれ所有者・グループ・その他の権限を表します。
| パーミッション | 所有者 | グループ | その他 | 用途 |
|---|---|---|---|---|
644 |
読み書き | 読み取り | 読み取り | 一般的なファイル |
600 |
読み書き | なし | なし | 機密ファイル(.env, 秘密鍵) |
700 |
全権限 | なし | なし | 機密ディレクトリ(.ssh) |
755 |
全権限 | 読み取り+実行 | 読み取り+実行 | 一般的なディレクトリ |
よくある危険な設定
.envファイルにはDBパスワードやAPIキーなどの機密情報が含まれています。これが644(誰でも読める)になっていると危険です。
ターミナル
ls -la .env
-rw-r--r-- 1 maru maru 31 Feb 18 02:50 .env ^^^ ^^^ 所有者 その他のユーザーも読める → 危険!
.envファイルのパーミッションを修正する
chmod 600 で所有者のみ読み書きできるように変更します。
ターミナル
chmod 600 .env
変更後を確認します。
ターミナル
ls -la .env
-rw------- 1 maru maru 31 Feb 18 02:50 .env
^^^
その他のユーザーは読めない → 安全
SSH関連ファイルのパーミッションを確認する
SSH関連ファイルはパーミッションが正しくないと、SSH自体が接続を拒否することがあります。
ターミナル
# SSH秘密鍵は600であること
chmod 600 ~/.ssh/id_*
# SSH設定ディレクトリは700であること
chmod 700 ~/.ssh
# authorized_keysは600であること
chmod 600 ~/.ssh/authorized_keys
なぜSSHはパーミッションに厳格なのか
SSHは秘密鍵のパーミッションが緩い場合(他ユーザーが読める場合)、セキュリティリスクとみなして接続を拒否します。Permissions 0644 for '/home/user/.ssh/id_rsa' are too open というエラーが出たら、パーミッションを 600 に修正しましょう。
危険なパーミッションを一括検出する
サーバー全体で「その他のユーザーが書き込み可能なファイル」を検出できます。
ターミナル
# /etc配下でworld-writableなファイルを検出
find /etc -perm -o+w -type f 2>/dev/null
何も表示されなければ安全です。ファイルが表示された場合は、そのファイルの用途を確認して適切なパーミッションに修正しましょう。
パーミッション確認チェックリスト
.envファイル →600~/.ssh/ディレクトリ →700~/.ssh/authorized_keys→600~/.ssh/id_*(秘密鍵) →600- SSL秘密鍵 →
600 /etc配下にworld-writableファイルがないこと
まとめ
- 機密ファイル:
.envやSSH鍵は600、ディレクトリは700に設定 - 危険な状態:
644の.envは全ユーザーから読める → 即座に修正 - SSH: パーミッションが緩いと接続自体が拒否される
- 定期確認:
find /etc -perm -o+wで危険なパーミッションを検出