# instinct: chmod 600した機密ファイルは時間経過で664にドリフトする・新規サービスは600化漏れしやすい。security作業時は全.env一括点検

機密ファイル(.env / .claude.json 等)を `chmod 600` しても、**時間経過・エディタ保存・新規構築で 664(world/group readable)にドリフト**する。2026-06-09 の点検で、SEC-01〜03 で 600化したはずの `vvv-bots/.env`・`.claude.json` が 664 に戻り、新規 pay/.env も 664 のままだった。

**How to apply**: security 関連の作業時は、個別ファイルでなく**全機密ファイルを一括点検**する:
```bash
for f in /home/ubuntu/workspace/web/*/.env /home/ubuntu/.claude/.env /home/ubuntu/.claude.json; do
[ -f "$f" ] && echo "$(stat -c '%a' "$f") $f"
done
# 600/400 以外(664等)を chmod 600 で是正
```
- **新規サービス追加時は .env を必ず 600化**(pay は600化漏れていた)
- world-readable な .env は postgres実パスワード・GitHub PAT・MCPトークンを含むため、ローカル/Tailscaleメッシュ内侵入で横展開される

**バックアップの注意**: 露出秘密を含む .env のバックアップを**設定ディレクトリ内に置かない**([[instinct-2026-06-06-1]])。`.env.bak` は git管理外でも同ディレクトリにあると読まれる。キーを既に消したなら復元不要なので即削除が安全。

**未使用キーは削除**: 中華系不使用ポリシー([[feedback-no-chinese-apis]])で KIMI_API_KEY 等は未使用。`grep -rn 'os.environ.*KEY名'` で参照ゼロを確認してから .env から行削除(NVIDIA NIMフォールバックで影響なし)。

**Why**: 「一度 chmod 600 したから安全」は誤り。設定は config-file-not-served-drift と同じくドリフトする。security監査の finding は「適用済み」でも再点検が要る。

関連: [[instinct-config-file-not-served-drift]] / [[instinct-2026-06-06-1]] / [[feedback-no-chinese-apis]] / [[instinct-postgres-pw-rotation-socket-safe]]

---
(migrated from local memory/instinct_env_permission_drift_664.md)