맥미니 OpenClaw 비서 봇 만들기 (18) — 봇에게 권한을 주기 전에, 벨트부터 맸다

2026. 6. 23. 21:34맥미니 OpenClaw 비서 봇 만들기

 봇에게 권한을 주기 전에, 벨트부터 맸다

슬랙에서 비서한테 말로 시키면 시스템이 실제로 바뀌는 것 — 이게 다음 목표(V2)다. 그런데 그걸 만들려고 봇의 권한을 들여다봤더니, 봇이 이미 맥미니 전체에 무제한 권한을 갖고 있었다. 그래서 기능을 만들기 전에 안전벨트부터 맸다.

봇은 못 바꾸는 게 아니라, 안 막아둔 거였다

지난번에 슬랙에서 "일요일 브리핑을 주간 요약으로 바꿔줘"라고 시켰을 때, 봇은 "바꿨다"고 말만 하고 실제 시스템은 그대로였다. 그때는 "봇이 시스템을 못 바꾸는구나" 했다.

이번에 봇의 설정을 직접 열어보니 — 못 바꾸는 게 아니었다. 두 봇 다 "coding" 프로파일이라, 파일 쓰기와 명령 실행 능력이 다 켜져 있었다. 게다가 샌드박스도 꺼져 있고 실행 승인도 없어서, 봇이 마음만 먹으면 디스크 어디든 읽고 쓰고 지울 수 있는 상태였다. 지난번에 "못 바꾼" 건 능력이 없어서가 아니라, 그 능력을 쓸 설계가 없었을 뿐이었다.

이게 양날의 검이다. V2(말로 시키면 바뀌는 것)는 이 능력이 있어야 가능하다. 동시에 — 봇이 실수하거나 지시가 꼬이면 시스템을 망가뜨릴 수도 있다는 뜻이다. 그리고 지금은 그걸 막는 게 아무것도 없었다.

결정적 사실 하나 — 브리핑은 봇이 안 돌린다

겁이 났지만, 조사하다 안심되는 사실을 하나 찾았다. 매일 새벽 도는 아침 브리핑은 봇이 돌리는 게 아니라, 시스템 스케줄러(cron)가 직접 돌린다. 봇은 그 경로를 거치지 않는다.

이게 왜 중요하냐면 — 봇 권한을 아무리 조여도 브리핑은 영향을 안 받는다는 뜻이다. cron은 로직 파일을 그냥 읽고 실행만 하지, 쓰지 않으니까. 봇과 브리핑이 구조적으로 분리돼 있어서, 봇한테 안전벨트를 매도 브리핑은 멀쩡하다.

발상을 뒤집으니 답이 단순해졌다

처음엔 "봇이 설정 파일을 못 건드리게 잠그고, 검증된 스크립트로만 바꾸게 하자"고 생각했다. 그런데 함정이 있었다. 봇도, 그 스크립트도 같은 사용자로 도니까 — 같은 사용자는 자기 자신을 못 잠근다. 잠그려면 매번 관리자 권한이 끼어들어야 해서 복잡해졌다.

그러다 발상을 뒤집었다. 잠글 대상을 거꾸로 본 것이다. 봇이 바꿔야 할 건 데이터(설정 파일)뿐이고, 시스템을 망가뜨리는 건 로직(코드 파일) 손상이다. 그렇다면 — 데이터는 열어두고, 로직만 잠그면 된다.

이러면 다 풀린다. 봇이 설정은 자유롭게 바꿔 V2가 그대로 되고, 시스템을 깨뜨리는 코드 수정만 막힌다. 중간 스크립트도, 복잡한 관리자 권한 설정도 필요 없어졌다. 설정 파일이 잘못 써져도 이미 새벽 파이프라인이 그걸 감지해서 실패 알림을 보내는 안전장치가 있으니, 그 부분도 이미 커버돼 있었다.

잠그기 — 커널 레벨 불변화

로직 파일 다섯 개에 시스템 불변 플래그(schg)를 걸었다. 이건 커널 레벨이라, 소유자라도 관리자 권한 없이는 못 푼다. 봇이 아무리 권한이 세도 이 파일들은 못 건드린다. 봇이 스스로 플래그를 풀려고 해도 — 그건 관리자만 할 수 있어서 실패한다. 이게 핵심 방어다.

거는 건 관리자 명령 한 줄이었다. 걸고 나서 확인해보니 다섯 개 다 잠겼고, 설정 파일은 그대로 열려 있었다. 그리고 잠긴 상태에서도 코드 읽기·파싱이 정상이라 — 새벽 브리핑이 안 깨진다는 걸 그 자리에서 확인했다. 읽기와 실행은 막지 않고, 쓰기·삭제만 막는 플래그이기 때문이다.

대신 대가가 있다. 이제 나도 이 코드를 바로 못 고친다. 고치려면 잠금을 풀고, 수정하고, 다시 잠그는 세 단계를 거쳐야 한다. 봇이 함부로 못 바꾸게 만든 대가로, 나도 한 단계 더 거치는 것이다. 의도된 마찰이다.

교훈

  • 기능을 주기 전에 권한부터 봐라. 봇이 "못 하는" 것처럼 보여도, 실은 막아두지 않은 것일 수 있다.
  • 잠글 대상을 정할 때 발상을 뒤집어 보라. 지키려는 것(데이터)을 잠그려다 막혔는데, 위험한 것(로직)만 잠그니 단순해졌다.
  • 안전장치가 본체를 안 깨뜨리는지 구조부터 확인하라. 브리핑이 봇과 분리돼 있다는 사실 하나가 모든 걱정을 덜어줬다.
  • 사람이 실수해도 안전한 쪽으로 마찰을 설계하라. 코드 수정에 세 단계를 거는 건 불편하지만, 그 불편이 시스템을 지킨다.

→ V2의 첫 단추를 끼우기 전에, 봇에게 안전벨트부터 맸다. 다음은 셸 명령 제한을 한 겹 더 두르고, 그다음에야 "말로 시키면 바뀌는" 첫 기능으로 간다.