ファイル操作

機密ファイルのパーミッション設定 — .envやSSH鍵を守る方法

この記事の対象者
  • ファイルパーミッションの設定に不安がある方
  • .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_keys600
  • ~/.ssh/id_*(秘密鍵) → 600
  • SSL秘密鍵 → 600
  • /etc 配下にworld-writableファイルがないこと

まとめ

  • 機密ファイル: .envやSSH鍵は 600、ディレクトリは 700 に設定
  • 危険な状態: 644.env は全ユーザーから読める → 即座に修正
  • SSH: パーミッションが緩いと接続自体が拒否される
  • 定期確認: find /etc -perm -o+w で危険なパーミッションを検出