SilverElixir commited on
Commit
afada05
·
1 Parent(s): 27a3176

Private temp dir for state fallback instead of shared tmp

Browse files
Files changed (1) hide show
  1. lumen_chat_state.py +5 -2
lumen_chat_state.py CHANGED
@@ -61,8 +61,11 @@ _STATE_DIR = Path(os.getenv("STATE_DIR", "/app")).resolve()
61
  try:
62
  _STATE_DIR.mkdir(parents=True, exist_ok=True)
63
  except Exception as _state_dir_exc:
64
- log.warning('[setup] STATE_DIR %s is not writable (%s), using a temp directory instead.', _STATE_DIR, _state_dir_exc)
65
- _STATE_DIR = Path(tempfile.gettempdir())
 
 
 
66
  STATE_FILE_PATH = _STATE_DIR / "chat_state.json"
67
  GLOBAL_QUOTA_FILE = _STATE_DIR / "global_quota.json"
68
  # Per-chat ключи вместо одного блоба: меньше payload и blast radius при сбое.
 
61
  try:
62
  _STATE_DIR.mkdir(parents=True, exist_ok=True)
63
  except Exception as _state_dir_exc:
64
+ log.warning('[setup] STATE_DIR %s is not writable (%s), using a private temp directory instead.', _STATE_DIR, _state_dir_exc)
65
+ # Приватный подкаталог с 0o700: сырой gettempdir() читаем соседям по машине,
66
+ # а там истории чатов (аудит M4, 10.2026).
67
+ _STATE_DIR = Path(tempfile.mkdtemp(prefix="lumen-state-"))
68
+ os.chmod(_STATE_DIR, 0o700)
69
  STATE_FILE_PATH = _STATE_DIR / "chat_state.json"
70
  GLOBAL_QUOTA_FILE = _STATE_DIR / "global_quota.json"
71
  # Per-chat ключи вместо одного блоба: меньше payload и blast radius при сбое.