はじめに
SSHでサーバーに接続しようとしたとき、こんなエラー画面に遭遇して焦ったことはないでしょうか?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/user/.ssh/id_rsa": bad permissions
これは「大事な秘密鍵のセキュリティ設定が甘すぎるから、使わせてあげないよ」という警告です。この問題を解決するために使われるのが魔法の数字 「600」 です。
本記事では、この「600」という数字が具体的に何を意味しているのか、そして他のよく見るパーミッション(644や755など)との違いについて解説します。
パーミッション「600」の正体
結論から言うと、パーミッション「600」は 「自分(所有者)だけが読み書きできて、他の人は一切触れない状態」 を指します。
もっと噛み砕くと、以下のような状態です。
- 自分:中身を見れるし、編集もできる(◯)
- 同じグループの人:見れないし、編集もできない(✕)
- その他の人:見れないし、編集もできない(✕)
まさにトップシークレット扱いです。だからこそ、漏洩してはいけないSSH秘密鍵には「600」を設定する必要があるのです。
なぜエラーが出るのか
先ほどのエラーメッセージに Permissions 0644 for ... are too open. とありました。「644」は「自分は読み書きできるけど、他の人も読むことができる」という設定です。
秘密鍵が他人から覗き見できる状態になっていると、セキュリティリスクがあるため、SSHコマンド側が安全のために接続を拒否してくれていたわけです。
パーミッションの数字の読み方
LinuxやMacなどのUnix系OSでは、権限を3桁の数字で表します。
この数字の正体は、「誰に」 「どんな権限」 を与えるかの足し算です。
1. 「どんな権限」:足し算のルール
権限は以下の3つの数字の組み合わせ(合計値)で決まります。
| 権限 | 記号 | 数字 | 意味 |
|---|---|---|---|
| Read | r | 4 | ファイルの中身を見る |
| Write | w | 2 | ファイルを書き換える |
| Execute | x | 1 | ファイルを実行する(プログラムなど) |
たとえば:
- 読み書きさせたい場合:4 + 2 = 6
- **全部(読み・書き・実行)**させたい場合:4 + 2 + 1 = 7
- 読み込みだけさせたい場合:4
- 何もさせない場合:0
2. 「誰に」:3桁の並び順
3桁の数字は、左から順に 「所有者」「所有グループ」「その他」 の権限を表しています。
これを「600」に当てはめてみましょう。
- 1桁目(6):所有者は「4(読む) + 2(書く)」ができる
- 2桁目(0):グループは何もできない
- 3桁目(0):その他の人も何もできない
これが「600」の構造です。非常にシンプルかつ強力な制限であることがわかります。
他によく見るパーミッション一覧
「600」以外にも、開発の現場で頻繁に目にする数字があります。これらもセットで覚えておくと便利です。
644:一般的なファイル
構成: 所有者(6) / グループ(4) / その他(4)
- 自分:読み書きOK
- 他人:読むだけOK
WebサイトのHTMLファイルや、設定ファイルなどで最も一般的に使われます。「自分は編集するけど、みんなには見てほしい」というファイルです。
755:プログラムやディレクトリ
構成: 所有者(7) / グループ(5) / その他(5)
- 自分:フルコントロール(7 = 4+2+1)
- 他人:読み込みと実行だけOK(5 = 4+1)
シェルスクリプトなどの実行ファイルや、ディレクトリによく使われます。ディレクトリの場合、「実行権限(1)」は「そのフォルダの中に入る権限」を意味するため、基本的にディレクトリは755(または700)になります。
777:【危険】フルオープン
構成: 所有者(7) / グループ(7) / その他(7)
- 全員:何でもできる
誰でも読み書き実行が可能です。トラブルシューティングで一時的に設定することはありますが、本番環境でファイルを777のまま放置するのは絶対にやめましょう。 Web改ざんなどのリスクが非常に高まります。
パーミッションの変更方法
実際にファイルのパーミッションを変更するには chmod(チェンジモード)コマンドを使います。
SSH鍵を600にする
# 変更前の確認(例として644になっている)
ls -l id_rsa
# 出力: -rw-r--r-- 1 user staff 2602 1 1 12:00 id_rsa
# (rw- が自分、r-- がグループ、r-- がその他)
# 600に変更
chmod 600 id_rsa
# 変更後の確認
ls -l id_rsa
# 出力: -rw------- 1 user staff 2602 1 1 12:00 id_rsa
ls -l の結果が -rw------- になっていれば成功です。最初の - はファイルであることを示し、続く rw- が所有者の権限、残りの ------ がグループと他人の権限(なし)を示しています。
まとめ
- 600 は「自分だけが見れて、書ける」秘密厳守のパーミッションです。
- SSHの秘密鍵(
id_rsaなど)や、パスワードが書かれた設定ファイルなど、他人に見られてはいけないファイルに使います。 - 数字の意味(4=読む、2=書く、1=実行)を覚えておくと、
755や644などの意味も自然と理解できるようになります。
適切なパーミッション設定はサーバーセキュリティの第一歩です。「とりあえず777」で動かす癖をつけず、必要な権限だけを付与する習慣をつけましょう。