[안드로이드] 유저 ID와 파일 접근

 

POSTED AT 2010/10/25 12:46 | POSTED IN 안드로이드

이어지는 글
보안을 위한 퍼미션
유저 ID 와 파일 접근 ◀ 현재 위치
퍼미션 사용하기
퍼미션을 선언하고 강제하기
manifest 에 퍼미션 강제하기
임의의 퍼미션과 URI 퍼미션

출처 : http://www.faqs.org/photo-dict/phrase/1483/lock.html

< 유저 ID 없인 접근하지 마시오! >

유저 ID와 파일 접근

디바이스 상에 설치된 각각의 .apk 파일에는 고유한 리눅스 유저 ID 가 부여됩니다. 이것은 어플리케이션에 접근하는것과 반대로 다른 어플리케이션이 지금의 어플리케이션에 접근하는 것을 막아주는 역할이지요.
이 유저 ID는 어플리케이션이 디바이스에 설치될 때 할당되며, 그 디바이스에 존재하는 동안은 변하지 않고 유지됩니다.
보안에 대한 강제는 프로세스 레벨에서 이루어지기 때문에 , 임의의 두개의 패키지 내에 있는 코드는 일반적으로 동일한 프로세스에서 실행될 수가 없게 됩니다. 따라서 그것은 서로 다른 리눅스 유저로 실행되는 것이지요.
그렇다면, 동일한 유저 ID를 부여하면 되지 않을까요?
동일한 유저 ID를 부여하려면, 각 패키지의 매니페스트 파일에서 manifest 태그의 sharedUserId 속성을 사용하면 됩니다. 이렇게 하면 보안 측면에서 두 개의 패키지는 동일한 어플리케이션으로 간주되며 동일한 유저 ID와 퍼미션을 갖게 되겠죠.

< R.attr 의 메소드 >

보안을 유지하기 위해, 동일한 서명을 가지는 ( 동일한 sharedUserId 를 가지는 ) 두 개의 어플리케이션에게만 동일한 유저 ID가 주어지게 됩니다.
어플리케이션에 의해 저장된 모든 데이터는 그 어플리케이션의 유저 ID가 부여되고, 일반적으로는 다른 패키지에 접근할 수 없죠.
만약 어떤 파일을

⊙ getSharedPreferences(string, int)
⊙ openFileOutput(string, int)
⊙ openOrCreateDatabase(string, int, SQLiteDatabase.CursorFactory)

를 사용하여 생성한다면 파일에 대한 ‘읽기/쓰기’ 허용을 할 수 있습니다.
이때는 Context 클래스의 MODE_WORLD_READABLE 과 MODE_WORLD_WRITEABLE 플래그를 사용할 수 있습니다.

파란색으로 체크된 상수 값도 주의하세요 ^^
플래그 명칭에서 나와있어서 센스있으신 분들은 파악하셧겠지만,
이러한 플래그를 설정하면 어플리케이션의 파일 소유권은 변하지 않고, 다른 어플리케이션이 그것을 볼 수 있는 글로벌 퍼미션을 설정하는 것과 같습니다.
끝~~


관련글
[안드로이드] 보안을 위한 퍼미션(Permission)
[안드로이드] 어플리케이션 구조
[안드로이드] 안드로이드 매니페스트 파일

http://underclub.tistory.com/378?_new_tistory=new_title

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s