Android 사용자 그룹 및 사용자 정의 App 권한 추가 방법

4778 단어 Android사용자App
Android:4.4.4
1.응용 장면
Android 장치 에서 현재 우 리 는 USB 포트 를 연결 하 는 장 치 를 연결 하고 있 습 니 다.장치 노드 는/dev/ttyUSB 0 입 니 다.

# ls -l /dev/ttyUSB0
crw-rw---- 1 root root 188, 0 /dev/ttyUSB0
정보 표시:이 장치 의 사용자 와 소속 그룹 은 모두 루트 입 니 다.루트 소지 자 는 이 장치 에 대해 읽 기와 쓰기 권한 을 가지 고 있 습 니 다.그러나,우리 의 앱 은 루트 에서 제외 되 었 습 니 다.어쨌든 이 장 치 를 읽 고 쓸 수 없습니다.
하나의 해결 방안 은 다른 사람 에 게 읽 기와 쓰기 권한 을 부여 하 는 것 이다.그러나 이렇게 하면 다른 제3자 응용 프로그램 도 우리 의 설 비 를 방문 할 수 있 고 안전성 이 조금도 남지 않 습 니 다.
또 다른 해결 방안 은/dev/ttyUSB 0 에 속 하 는 사용자 그룹 을 바 꾸 는 것 입 니 다.

crw-rw---- 1 root selfgroup 188, 0 /dev/ttyUSB0
이 장 치 를 사용 하고 싶 은 앱 이 있 으 면 selfgroup 그룹 에 가입 하 세 요.권한 분배 권 이 우리 손 에 있 기 때문에 안전성 이 보장 되 었 다.
2.사용자 정의 그룹 추가
다음은 우리 자신의 사용자 그룹 을 어떻게 추가 하 는 지 입 니 다.
Android 에 서 는 모든 사용자 그룹 에 유일한 ID 번호 가 있 습 니 다.파일 에 정 의 됩 니 다.

system\core\include\private\android_filesystem_config.h
/* This is the master Users and Groups config for the platform.
 * DO NOT EVER RENUMBER
 */
#define AID_ROOT  0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO  1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH 1002 /* bluetooth subsystem */
#define AID_GRAPHICS 1003 /* graphics devices */
#define AID_INPUT  1004 /* input devices */
#define AID_AUDIO  1005 /* audio devices */
#define AID_CAMERA 1006 /* camera devices */
자신의 ID 번 호 를 추가 하 는 것 을 본 떠 서 문자열 의 이름 을 부여 합 니 다.

/**  1  */
#define AID_SELF_GROUP 8011
/**  2  */
static const struct android_id_info android_ids[] = {
 { "root",  AID_ROOT, },
 {   .......................},
 /**       */
 {{ "selfgroup", AID_SELF_GROUP, },},
}
그리고 Android 소스 코드/device 디 렉 터 리 아래 판 급.rc 파일 에서:

boot.img 을 컴 파일 하고 녹음 합 니 다.다시 시작 한 후에 노드 그룹 이 사용자 정의'selfgroup'이 되 었 음 을 봅 니 다.
3.사용자 정의 그룹 별 권한 관리 추가
장치 에 앱 이 우리 장치 에 접근 하려 면'selfgroup'그룹 에 가입 해 야 합 니 다.그래서 우 리 는 App 에 권한 정 보 를 제공 하여 App 을:

<uses-permission android:name="android.permission.SELFGROUP" />
"selfgroup"그룹 에 가입 할 수 있 습 니 다.
이것 은 두 걸음 해 야 한다.
1.그룹 제어 권한 의 실현:

Android  /frameworks/base/data/etc/platform.xml
<permission name="android.permission.SELFGROUP" >
	<group gid="selfgroup" />
</permission>
2.그룹 제어 권한 에 대한 설명:

Android  /frameworks/base/core/res/AndroidManifest.xml
<permission android:name="android.permission.SELFGROUP"
 android:permissionGroup="android.permission-group.SELFGROUP"
 android:protectionLevel="dangerous"
 android:label="@string/permlab_sys_selfgroup"
 android:description="@string/permdesc_sys_selfgroup" />
이로부터 권한 정의 가 완료 되 었 습 니 다.
또한,앱 신청 팀 의 권한 성공 여 부 를 어떻게 판단 합 니까?

Android  /frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
public final class ActivityManagerService extends ActivityManagerNative {
	static final String TAG = "ActivityManager";
	private final void startProcessLocked(ProcessRecord app,
		String hostingType, String hostingNameStr) {
		int uid = app.uid;
		int[] gids = null;
		StringBuilder buf = mStringBuilder;
		buf.setLength(0);
		buf.append("Start proc ");
		buf.append(app.processName);
		buf.append(" for ");
		buf.append(hostingType);
		if (hostingNameStr != null) {
			buf.append(" ");
			buf.append(hostingNameStr);
		}
		buf.append(": pid=");
		buf.append(startResult.pid);
		buf.append(" uid=");
		buf.append(uid);
		buf.append(" gids={");
		if (gids != null) {
			for (int gi=0; gi<gids.length; gi++) {
				if (gi != 0) buf.append(", ");
				buf.append(gids[gi]);
			}
		}
		buf.append("}");
		Slog.i(TAG, buf.toString());
	}
}
즉,앱 을 시작 할 때 ActyManager Service 는 이 앱 의 Uid,Gid 등 정 보 를 콘 솔 에 출력 합 니 다.저 희 는 log 를 통 해'gids='필드 에 사용자 정의 그룹 ID 번호'8011'이 있 는 지 확인 하면 됩 니 다.
예 를 들 어 위 챗 로그 시작:

I/ActivityManager( 977): Start proc com.tencent.mm for activity com.tencent.mm/.ui.LauncherUI: pid=11060 uid=10258 gids={50258, 3003, 1028, 1015, 1023, 3002, 3001}
이상 의 안 드 로 이 드 에 사용자 그룹 을 추가 하고 앱 권한 을 사용자 정의 하 는 방법 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기