C.W.K.
Stream
Lesson 04 of 04 · published

닿는다고 허용되는 게 아니다

~9 min · reachable-is-not-allowed, volume-owner, no-fabricated-credentials

Level 0Lone Machine
0 XP0/37 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'닿을 수 있어' 랑 '바꿔도 돼' 는 다른 문장이야. 둘을 헷갈리는 시스템은 production 에서 깨져."

reachability 는 네트워크 fact, authority 는 capability fact

기계에 SSH session 을 열 수 있다는 건 네트워크가 널 들여보냈다는 거야. 그 session 이 login Keychain 을 unlock 하거나, GUI approval dialog 를 띄우거나, volume owner 로 쓸 수 있는지는 아무것도 안 말해. reachable 이랑 authorized 는 다른 축이고, 초록 연결을 포괄 허가로 다루는 게 실패 한 가족의 뿌리야.

headless 는 절대 가정 안 해

그래서 launchd 나 SSH executor 는 login-Keychain, GUI-session, volume-owner 접근을 가정하면 안 돼. 걘 있을 수도 없을 수도 있는 선언된 capability 지 — 알아서 가져다 쓰는 default 가 절대 아냐. 안전한 자세는: 최소를 가정하고, 실제로 쥔 걸 선언하고, 그게 충분한지 preflight 이 정하게 해.

volume-owner 가 제일 날카로운 경우

제일 명확한 예는 macOS 시스템 업데이트야. 업데이트 executor 는 typed 작업을 stage·resume 할 수 있지만, volume-owner authorization 을 절대 저장하거나 지어내지 않아; bootstrap-token 이랑 interactive-owner 경로는 명시적 capability 로 남아. Apple 규칙을 우회 안 하고, 미래 실행을 쉽게 하려고 credential 을 챙겨두지 않아. envelope 이 권한이 없으면, 정직한 답은 멈추고 그렇게 말하는 거야 — 빠진 권리를 제조하는 게 아니라.

gap 은 처리되지, 덮이지 않아

envelope 이 step 을 못 만족하면, 허용되는 수는 정확히 둘: target 을 needs_attention 으로 보내거나, 호환 executor 에 위임. credential prompt loop 금지. gap 을 건너 밀반입하려고 secret 을 operation 에 복사 금지. host 정체성이 credential 가용성을 대신하게 두기 금지. mismatch 는 보고할 fact 지, 밑으로 굴을 팔 벽이 아냐.

reachable 은 allowed 가 아냐. capability 를 증명해; 성공한 연결에서 추론하지 마 — 연결은 문이 열린 것만 증명하지, 걔가 열쇠를 쥔 걸 증명 안 해.

Code

reachable 하지만 authority 는 아무것도 증명 안 함·python
if reachable(host):
    # 틀림 -- 성공한 연결에서 authority 추론:
    #   run_privileged_step(host)   # 없을 수도 있는 Keychain/GUI/volume-owner 가정

    # 맞음 -- reachability 는 mutation 이 아니라 preflight 만 벌어줌:
    caps = executor_for(host).capabilities
    if step.requires <= caps:
        executor.run(step)
    else:
        target.state = "needs_attention"   # or 위임; 빠진 권리를 절대 제조 안 함

# 서명된 OS-update executor 는 작업을 stage/resume 하지만 volume-owner
# authorization 을 절대 저장/발명 안 해. 권리가 없으면, 멈춰 --
# 계속 가려고 하나를 제조하지 않아.

External links

Exercise

네 셋업에서 '연결할 수 있어' 가 조용히 '뭐든 할 수 있어' 가 된 데를 찾아 — SSH 되니까 sudo 를 가정하는 스크립트, host 가 reachable 하니까 secret 이 있다고 가정하는 CI job. capability 를 먼저 증명하게 다시 쓰고, capability 가 진짜로 없을 때 뭘 해야 할지 정해(멈추고 보고, 아니면 hand off) — 밀어붙이려고 secret 을 캐시하는 일 없이.
Hint
정직한 실패는 '사람 필요 / 다른 문 필요' 를 명확히 드러내는 거야. 부정직한 'fix' 는 빠진 credential 을 headless job 이 닿는 데 숨기는 거고 — 일회성 중단을 영구적이고 안 보이는 노출로 바꿔.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.