콘텐츠로 이동
Tauri

보안 수준 Capabilities

Tauri는 애플리케이션 및 플러그인 개발자에게 “보안 수준” 시스템을 제공하여 시스템 WebView에서 실행되는 애플리케이션 프론트엔드에 대한 코어 부분의 공개에 대해 세분화된 활성화/비활성화 제한을 설정합니다.

《번역 주》 보안 수준 원문은 “capabilities system”(능력 시스템). 정보 공개 수준 결정 능력을 나타내므로 본고에서는 “보안 수준”으로 번역했습니다.

“보안 수준”(Capabilities)은 부여된 레이블에 따라 애플리케이션 창과 Webview에 할당되는 접근 권한(Permissions)의 집합입니다. “보안 수준”은 여러 창과 Webview의 처리에 관여하며, 복합적인 보안 설정 내에서 참조될 수 있습니다.

보안 수준을 기술하는 파일(Capability files)은 JSON 또는 TOML 파일로 src-tauri/capabilities 디렉토리 내에서 정의됩니다.

각 파일을 사용하여 tauri.conf.json 내에서 “식별자”로만 참조하는 것이 일반적인 방법이지만, 이 두 가지를 capabilities 필드에서 직접 정의할 수도 있습니다.

capabilities 디렉토리 내의 모든 보안 수준 기능은 기본적으로 자동으로 활성화됩니다. 일단 tauri.conf.json에서 보안 수준 기능이 명시적으로 활성화되면, 애플리케이션 빌드에서는 해당 기능만 사용됩니다.

체계적인 설정 항목에 대한 자세한 내용은 참고 정보 항목을 참조하십시오.

다음 JSON 예제는 코어 플러그인과 window.setTitle API에 대한 기본 기능을 활성화하는 보안 수준 설정을 정의합니다.

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default",
"core:window:allow-set-title"
]
}

이 스니펫(발췌 내용)은 Tauri Configuration 파일의 일부입니다.

이것이 아마도 가장 일반적인 설정 방법으로, 개별 보안 수준을 행 내에 포함(인라인화)하고 접근 권한만 “식별자”로 참조합니다.

이를 위해서는 적절하게 정의된 기능 파일이 capabilities 디렉토리 내에 필요합니다.

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": ["my-capability", "main-capability"]
}
}
}

인라인화된 “보안 수준” 설정은 사전에 정의된 “보안 수준” 설정과 함께 사용할 수도 있습니다.

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "My application capability used for all windows",
"windows": ["*"],
"permissions": ["fs:default", "allow-home-read-extended"]
},
"my-second-capability"
]
}
}
}

“보안 수준”은 “platforms 배열”을 정의하여 각 플랫폼별로 설정할 수 있습니다. 기본적으로 “보안 수준” 설정은 모든 대상에 적용되지만, linux, macOS, windows, iOS, android의 각 대상 OS를 하위 집합으로 선택할 수 있습니다.

다음 예는 데스크톱 운영 체제용 “보안 수준” 설정입니다. 이 설정에서는 데스크톱에서만 사용할 수 있는 플러그인의 접근 권한을 활성화하는 것에 주목하십시오:

src-tauri/capabilities/desktop.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:allow-register"]
}

모바일 기기용 “보안 수준” 설정 사례는 다음과 같습니다. 이 설정에서는 모바일 OS에서만 사용할 수 있는 플러그인의 접근 권한을 활성화하는 것에 주목하십시오:

src-tauri/capabilities/mobile.json
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}

기본적으로 API는 Tauri 앱에 번들된 코드에만 액세스할 수 있습니다. 원격 소스가 특정 Tauri 명령에 액세스할 수 있도록 하려면 보안 수준 설정 파일에서 정의해야 합니다.

다음 예에서는 NFC 태그를 스캔하고 tauri.app의 모든 하위 도메인에서 바코드 스캐너를 사용할 수 있도록 합니다.

src-tauri/capabilities/remote-tags.json
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-tag-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.tauri.app"]
},
"platforms": ["iOS", "android"],
"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}

어떤 것으로부터 보호받을 수 있을까요?

“접근 권한”과 “보안 수준”에 따라 다음이 가능해집니다:

  • 프론트엔드에서의 “보안 침해” 영향을 최소화합니다
  • 로컬 시스템 인터페이스와 데이터의 (우발적인) “유출”을 방지하거나 완화합니다
  • 프론트엔드에서 백엔드/시스템으로의 “권한 상승”을 방지하거나 완화합니다

어떤 것으로부터는 보호받지 못할까요?

  • 악의적이거나 안전하지 않은 “Rust 코드”
  • 너무 느슨한 “범위(적용 범위)“와 “설정 내용”
  • 명령 구현에서의 부정확한 “범위 검사”
  • Rust 코드로부터의 “의도적인 이탈”
  • 기본적으로 앱의 Rust Core에 작성된 “모든 것”
  • 시스템 WebView 내의 “제로데이 공격” 또는 패치 미적용 “원데이 공격”
  • “공급망 공격” 또는 “부정 침입된 개발자 시스템”

Tauri는 애플리케이션에서 사용 가능한 모든 접근 권한을 가진 “JSON 스키마”를 생성하므로, 사용하는 IDE(통합 개발 환경)에서 자동 완성을 수행할 수 있습니다. 스키마를 사용하려면 “설정” 내의 $schema 속성을 gen/schemas 디렉토리에 있는 플랫폼별 스키마 중 하나로 설정합니다. 일반적으로 ../gen/schemas/desktop-schema.json 또는 ../gen/schemas/mobile-schema.json으로 설정하지만, 특정 대상 플랫폼용 보안 수준을 정의할 수도 있습니다.

Tauri 애플리케이션의 디렉토리 구조 예(간략판):

Terminal window
tauri-app
├── index.html
├── package.json
├── src
├── src-tauri
├── Cargo.toml
├── capabilities
└── <identifier>.json/toml
├── src
├── tauri.conf.json

모든 항목을 tauri.conf.json에 인라인화할 수 있지만, 약간 고급 설정을 하면 이 파일이 비대해집니다. 이 방식의 목표는 접근 권한을 가능한 한 단순화하고 이해하기 쉽게 만드는 것입니다.

모든 코어 접근 권한 목록은 “참고 정보 References”의 코어 접근 권한 페이지에 있습니다.


© 2025 Tauri Contributors. CC-BY / MIT