Android 의 selinux 권한 문 제 를 빠르게 해결 합 니 다.

3123 단어 ANDROID
selinux 에 관 한 상세 한 자 료 는 찾 아 보 세 요.http://blog.csdn.net/innost/article/details/19299937
안 드 로 이 드 개발 과정 에서 selinux 와 관련 된 것 을 만 났 는데 그 때 는 단번에 알 아 보지 못 했 는데 지금 은 실마리 가 잡 힌 것 같다.
 
예 를 들 어 커 널 에서 이 힌트 를 인쇄 합 니 다.
type=1400 audit(32.939:25): avc: denied { open } for pid=2592 comm="chmod" path="/dev/block/mmcblk0p25" dev="tmpfs" ino=6494 scontext=u:r:init_shell:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=1
 
우 리 는 이 방법 에 따라 처음부터 관건 적 인 대상 을 찾 은 다음 순 서 를 조정 하여 하나의 문 구 를 만 들 고 마지막 으로 이 문 구 를 'te 파일' (external / sepolicy / *. te) 에 기입 하면 된다.
denied { open }             u:r:init_shell:s0            u:object_r:block_device:s0       tclass=blk_file                  
             A                               B                                              C                                       D                B                               C                                              D                                       A
 
allow init_shell  block_device:blk_file open;
 
이 문 구 는 init 를 허용 합 니 다.셸 필드 의 Blockdevice 프로 세 스 block 열기device 형식의 블록 장치 파일 입 니 다.
 
이 규칙 을 컴 파일 하 는 데 실패 할 때 가 있 습 니 다. 이것 은 neverallow 문구 가 이상 한 것 일 수도 있 습 니 다.
neverallow 는 보안 정책 파일 에 이 규칙 을 위반 하 는 allow 문 구 를 검사 하 는 데 사 용 됩 니 다.
 
예 를 들 어 external / sepolicy / netd. te 파일 에서 문장
neverallow netd dev_type:blk_file { read write };
netd 필드 의 프로 세 스 읽 기와 쓰기 dev 를 영원히 허용 하지 않 음 을 표시 합 니 다.type 형식의 블록 장치 파일 입 니 다. 이 문 구 를 차단 하면 됩 니 다.
 
물론 디 버 깅 단계 에 서 는 터미널 에서 다음 명령 을 실행 하여 SELinux 의 상 태 를 가 져 오고 SELinux 를 임시 닫 을 수 있 습 니 다.
setenforce 0                  ##SELinux 를 permissive 모드 로 설정 합 니 다 (SELinux 가 열 리 지만 selinux 규칙 을 위반 하 는 행 위 는 기록 만 하고 막 지 않 습 니 다)
setenforce 1                  ##SELinux 를 enforcing 모드 로 설정 (SELinux 오픈)
getenforce                     ##SELinux 상태 가 져 오기 (허가, 적용, 비활성화)
 
물론 안전 계수 에 대한 요구 가 높 지 않 은 제품 은 cmdline 에 androidboot. selinux = 0 을 추가 하여 selinux 를 닫 을 수 있 습 니 다.
또는 Android 소스 코드 의 루트 디 렉 터 리 에서 시스템 / core / init / init. c 파일 을 직접 수정 합 니 다.
static void selinux_initialize(void)
{
    if (selinux_is_disabled()) {
        return;
    }

    INFO("loading selinux policy
"); if (selinux_android_load_policy() < 0) { ERROR("SELinux: Failed to load policy; rebooting into recovery mode
"); android_reboot(ANDROID_RB_RESTART2, 0, "recovery"); while (1) { pause(); } // never reached } selinux_init_all_handles(); bool is_enforcing = selinux_is_enforcing(); INFO("SELinux: security_setenforce(%d)
", is_enforcing); security_setenforce(is_enforcing); }

수정 isenforcing 의 값 은 0 입 니 다.
물론 가장 좋 은 수정 방법 은 참고 할 수 있다.http://blog.csdn.net/u013983194/article/details/50462694
수정 후 mmmsystem / sepolicy - j30 을 컴 파일 합 니 다. devices 의 selinux 파일 을 포함 하고 생 성 된 파일 은 system / etc / selinux / 또는 vendor / etc / selinux / 에서 grep 로 문자열 을 검색 하여 수정 이 성공 적 으로 이 루어 졌 는 지 확인 하고 마지막 으로 해당 파일 push 를 기계 에 검증 합 니 다.

좋은 웹페이지 즐겨찾기