2012-04-29 5 views
3

이 질문은 전에 How does Android enforce permissions?에 질문되었습니다. 토론은 훌륭하지만 질문은 아직 완전히 대답되지 않았습니다.런타임에 안드로이드 보안 권한을 확인하는 방법은 무엇입니까?

개발 환경에서 앱이 AndroidManifest.xml에 선언되지 않은 권한이 필요한 작업을 시도하면 예외가 발생합니다. 그러면 런타임 시스템이 런타임 검사를 어떻게 구현합니까?

아마도 네이티브 코드의 지원이 필요하거나 필요하지 않을 수도있는 핵심 프레임 워크에서 이루어 졌을 것입니다. 그러나 나는 AOSP의 소스 코드 파일이 이것과 관련이 있는지 알지 못한다.

+0

나는 또한 동일한 대답을 찾고 있었다. 마침내 책에서 아주 좋은 설명을 발견했습니다 : Android Security Internals : http://shop.oreilly.com/product/9781593275815.do Permission management 장을 살펴보십시오. –

답변

12

안드로이드는 특히 하드웨어 제한과 관련하여 많은 표준 Linux (-kernel?) 메커니즘을 사용합니다.

모든 앱에 새로운 고유 한 (Linux-) 사용자 ID가 할당되고 앱 프로세스가 생성 될 때마다 시스템에서 해당 사용자 ID로 시스템을 생성합니다. 앱을 제거하지 않으면 ID가 변경되지 않습니다. 즉, 하위 시스템 레벨에 액세스하면 앱이 특정 사용자로 표시되고 사용자와 함께 작동하는 모든 (Linux) 권한 시스템은 앱에도 적용됩니다.

매니페스트에서 WRITE_EXTERNAL_STORAGE을 요청하면 해당 저장소에 쓸 수있는 권한이있는 (Linux-) 그룹 (sdcard_rw)의 회원이됩니다. 파일 시스템에 대한 사용 권한은 system 사용자 (= 소유자) 및 sdcard_rw 그룹에 쓰기 만 허용하도록 적용되며 다른 사용자 (= 기타) 만 읽을 수 있습니다. 또한 Is Google blocking apps writing to SD cards

이렇게하면 안드로이드는 앱이 시작되고 나머지가 더 낮은 레벨에서 처리되면 생성되는 프로세스의 올바른 UID/GID를 설정하는 것 외에는 거의 아무것도하지 않아도됩니다. 특정 그룹의 구성원이 아닌 앱은 특정 하드웨어에 액세스하지 못합니다. 허가 <의

목록> 그룹 매핑 : platform.xml

가 및/또는 단순히 앱이 요청한 권한을보고하여 응용 프로그램의 서명 중 하나를 기반으로 일부 (안드로이드 소프트웨어) 제한이 있습니다 : 예를 들면, ContextImpl#checkPermission() - 제한된 동작을 허용하는 코드에 대한 모든 진입 점에서 이러한 권한을 확인해야합니다.

가끔씩 사람들이 예를 들어. 그 프로그램이 어딘가에 없기 때문에 프로그래밍 방식으로 GPS를 켜십시오.

+0

감사합니다. 수표 누락에 대한 마지막 단락과 관련하여 해당 발견 사항 (예 : 포럼 게시물 또는 AOSP의 버그 보고서)에 대한 참조가 있습니까? – dacongy

+0

죄송 합니다만, 어쩌면 http://b.android.com/에 어딘가에 bugreport가 있습니다. – zapl

+0

@AdiGuN 죄송합니다. 말씀하시는 것을 이해하지 못하겠습니까? 다시 말 할 수 있습니까? – zapl

4

두 번째 단락에서 "예외"는 런타임 오류입니다. 사용 권한은 빌드 타임에 실행시에만 적용됩니다.

하드웨어, 낮은 수준의 운영 체제 자원 및 시스템 파일에 액세스하려면 일반적으로 appuserid가 해당 그룹의 구성원이어야하며 이에 해당하는 Android 권한으로 인해 패키지 관리자가 할당해야합니다. (그 예는 네트워크 소켓과 zapl이 언급 한 sdcard 쓰기뿐 아니라 GSM 모뎀과 직접 대화하거나 원시 터치 스크린 좌표를 읽는 것과 같은 시스템 전용 사항입니다.)

다른 프로세스에서 실행중인 서비스에 대한 프로세스 간 통신을위한 스텁 인 라이브러리 함수를 호출하여 수행되는 대부분의 안드로이드 작업의 경우, ipc 요청의 수신 측에서보다 특권이 높은 프로세스에서 실행되는 플랫폼 코드 패키지 관리자와 함께 호출 응용 프로그램에 필요한 안드로이드 권한이 있는지 확인합니다.

많은 특수 권한은 시스템 서명으로 서명 된 앱에서만 사용할 수 있습니다. 다른 앱이 매니페스트에있는 앱을 주장하더라도 패키지 관리자는 적용하지 않습니다.

관련 문제