BRIEFING
브라우저 터미널의 PTY·WebSocket·보안
브라우저 터미널의 PTY·WebSocket·보안
Scope
핵심 질문
브라우저에서 실제 shell terminal을 제공할 때 PTY와 WebSocket을 어떻게 연결하고 어떤 보안경계를 둬야 하는가?
Draft
웹 터미널은 브라우저 UI와 서버의 pseudo terminal을 실시간 byte stream으로 연결하는 구조다.
PTY
일반 subprocess pipe와 달리 PTY는 shell에게 실제 terminal처럼 보인다. 그래서 interactive program, resize, ANSI escape sequence가 정상 동작한다.
WebSocket
브라우저는 PTY에 직접 접근할 수 없으므로 서버가 PTY stdin/stdout과 WebSocket message를 중계한다.
Resize
브라우저 terminal의 column과 row가 바뀌면 PTY window size도 갱신해야 full-screen program이 제대로 렌더링된다.
보안
웹 terminal은 사실상 shell access다. 연결 시 인증과 세션별 권한검사, 허용한 Origin 검증, 로그의 민감정보 통제, PTY 프로세스의 권한·격리를 설계해야 한다. 사용자 입력을 별도 shell command string에 다시 interpolation하면 injection 위험이 커진다. 이 목록만으로 완전한 보안 구현을 보장하지 않는다.
핵심
웹 터미널은 UI 문제가 아니라 원격 shell gateway이므로 인증과 isolation을 가장 먼저 설계해야 한다.
Sources
- xterm.js documentation (browser terminal emulator API): https://xtermjs.org/docs/
- MDN, WebSocket API (browser/server messaging): https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
- OWASP, WebSocket Security Cheat Sheet (Origin, authorization and message boundaries): https://cheatsheetseries.owasp.org/cheatsheets/WebSocket_Security_Cheat_Sheet.html