본문 바로가기
C.W.K.
Stream
Lesson 02 of 06 · published

Capabilities: 2.0 ACL

~14 min · tauri, capabilities, acl, security

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"capability는 문장 하나야. '이 창들은 이 권한을 쓸 수 있다.' Tauri 보안 모델 전체가 그 문장의 변주야."

capability 파일이 뭐냐면

capability는 src-tauri/capabilities/에 JSON 파일로 살아. 각 파일이 permission 묶음을 묶음에 이어줘. 모양은 작고 읽기 쉬워. identifier(이 capability의 이름), description, windows 배열(어느 창 label에 걸리는지), permissions 배열(뭘 허락하는지). Tauri가 빌드할 때 그 폴더의 파일을 전부 읽어서 앱의 접근 제어 목록을 조립해.

진짜 하나 읽어보자

Cinder의 실제 capability를 보자. main 창에 걸리고 딱 필요한 것만 허락해. core:default(기본으로 안전한 API 묶음), always-on-top 동작에 쓰는 창 permission 둘, 그리고 플러그인 셋(store, clipboard-manager, window-state)의 default 묶음. 없는 걸 봐. 파일시스템도, 셸도, 넓은 네트워크도 없어. Cinder는 쓰는 권한만 허락하고 그 이상은 안 줘 — 이 파일이 곧 앱이 할 수 있는 일의 정확한 목록이야.

창마다 권한을 다르게

capability가 걸릴 창을 직접 지목하니까, 창마다 권한 수준을 다르게 줄 수 있어. 메인 창은 clipboard랑 store가 필요할 수 있지만 설정 창은 거의 아무것도 필요 없을 수 있잖아. capability를 창별로 쪼개서, 덜 믿어도 되거나 단순한 창이 쓸 일 없는 권한에 못 닿게 해. 이게 최소 권한을 구조로 표현한 거야 — 창별로 나눠 주는 건 대충 넘겨도 되는 디테일이 아니라 적극적으로 써야 할 기능이야.

Code

실제로 쓰이는, 딱 필요한 만큼의 capability (fs도 셸도 없음)·json
// src-tauri/capabilities/default.json — Cinder의 실제 capability.
// '메인 창은 이 특정 권한들을, 오직 이것만 쓸 수 있다.'
{
  "$schema": "../gen/schemas/desktop-schema.json",
  "identifier": "default",
  "description": "Capability for the main window",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "core:window:allow-set-always-on-top",
    "core:window:allow-is-always-on-top",
    "store:default",
    "clipboard-manager:allow-write-image",
    "window-state:default"
  ]
}

External links

Exercise

앱의 capabilities/default.json을 한 줄씩 읽어. permission마다 뭘 허락하는지 짚어봐. 그다음 core:default를 잠깐 빼고 앱을 돌려서 기본 기능이 깨지는 걸 봐 — capability가 장식이 아니라 진짜 관문이라는 증거야. 다시 넣으면 ACL이 제 일 하는 걸 느낀 거고.
Hint
core:default는 대부분의 앱이 필요로 하는 기본 안전 API를 묶어놓은 거야. 그걸 빼보는 게 '암묵적으로 주어지는 건 아무것도 없다'를 확인하는 제일 빠른 방법이야 — 기본 창 동작도 permission을 거치거든.

Progress

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

댓글 0

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

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