Android 3.2+ 코드(실수로?) 외부 저장소에 대한 쓰기 액세스를 방지함

Google은 Android 3.2에서 도입된 AOSP 코드에 버그가 있는 것으로 보입니다. 이 버그는 OS가 USB 저장소를 처리하는 방식에 영향을 미치고 SD 카드 및 USB 스틱에 대한 쓰기 액세스를 방지할 수 있습니다. XDA 엘리트 인정 개발자, 수석 중재자 및 뉴스 작가체인파이어 그의 문제를 요약한다 블로그 게시물:

과거에는 앱에서 'WRITE_EXTERNAL_STORAGE" 권한은 다음에 대한 쓰기 액세스 권한을 부여합니다. 모두 외부 저장소(사용자/그룹 "sdcard_rw"). 이는 쓰기 권한만 부여하도록 변경된 것으로 보입니다. 주요한 외부 저장. '라는 두 번째 권한이 도입되었습니다.WRITE_MEDIA_STORAGE", 이는 다른 외부 저장소(사용자/그룹 "media_rw").

문제는 제3자에게는 실제로 이 권한이 부여되지 않으며 일반적으로 시스템 앱과 기기 제조업체에서 제공하는 앱에만 이 권한이 부여된다는 것입니다. 예외가 있습니다. 분명히 일부 장치에서는 타사 앱에 이 권한이 부여되지만 AOSP 소스에 따르면 확실히 그럴 필요는 없습니다.

Chainfire가 문제를 조사하면서 그는 다음에서 코드를 발견했습니다. /system/vold/Volume.cpp 이는 명시적으로 다음과 같이 말합니다.

 if (기본스토리지) {

// 특수한 경우 기본 SD 카드.

// 이를 위해 SDCARD_RW 그룹에 쓰기 액세스 권한을 부여합니다.

gid = AID_SDCARD_RW;

} 또 다른 {

// 보조 외부 저장소의 경우 모든 것을 잠긴 상태로 유지합니다.

gid = AID_MEDIA_RW;

}

많은 장치에서 내부 플래시는 '기본 SD 카드'로 간주됩니다. 그만큼 진짜 그런 다음 SD 카드는 보조 외부 저장소가 되며 접근할 수 없는 "WRITE_MEDIA_STORAGE" 허가.

Chainfire는 자신의 질문을 Android 개발자 근무 시간 팀에서 논의를 하게 되었고 결국 실시간 행아웃 4월 11일. 불행하게도 행아웃에 참석한 Google 엔지니어들은 실제 답변을 제공할 수 없었습니다. 이는 복잡한 문제이고 쇼가 시작되기 한 시간 전에만 질문이 제기되었기 때문입니다. 그러나 그들은 이 문제의 원인을 파악하고 나중에 Chainfire(및 우리)에 다시 연락하겠다고 약속했습니다.

또한 Chainfire에 따르면 이 문제는 실제로 SGS2용 ICS 빌드에도 존재합니다. 하지만 Samsung은 "매우 추악한 권한 해킹을 사용하여 문제를 해결했습니다.":

여기 보이는 것은 삼성이다. 피기백 WRITE_EXTERNAL_STORAGE 권한에 WRITE_MEDIA_STORAGE 권한을 추가하면 앱에서 설명된 문제가 발생하지 않습니다.

Google이 연결된 SD 카드 및 USB 스틱을 타사 앱에 대해 읽기 전용으로 제한하도록 의도했는지 여부는 아직 밝혀지지 않았습니다. 하지만 이는 다음과 같은 불안한 생각을 낳습니다. 코드와 그에 따른 메모가 Google의 첫 번째 코드라면 어떨까요? 외부 저장소에 대한 일종의 쓰기 방지를 구현하는 단계로 인해 모바일이 더욱 제한됩니다. 자유? 우리는 이것이 진정한 버그이기를 바랄 뿐입니다. 왜냐하면 자유는 우리 모두가 버그를 피하는 바로 그 이유 중 하나이기 때문입니다. 어두운면.

[알려주고 도움을 주신 Chainfire에게 큰 감사를 드립니다!]