Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
SEAndroid°²È«»úÖÆ¿ò¼Ü·ÖÎö
 
×÷Õß ÂÞÉýÑôµÄBLOG£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-16
  3778  次浏览      27
 

ÎÒÃÇÖªµÀ£¬Androidϵͳ»ùÓÚLinuxʵÏÖ¡£Õë¶Ô´«Í³Linuxϵͳ£¬NSA¿ª·¢ÁËÒ»Ì×°²È«»úÖÆSELinux£¬ÓÃÀ´¼ÓÇ¿°²È«ÐÔ¡£È»¶ø£¬ÓÉÓÚAndroidϵͳÓÐ×ŶÀÌØµÄÓû§¿Õ¼äÔËÐÐʱ£¬Òò´ËSELinux²»ÄÜÍêÈ«ÊÊÓÃÓÚAndroidϵͳ¡£Îª´Ë£¬NSAÕë¶ÔAndroidϵͳ£¬ÔÚSELinux»ù´¡ÉÏ¿ª·¢ÁËSEAndroid¡£±¾ÎľͶÔSEAndroid°²È«»úÖÆ¿ò¼Ü½øÐзÖÎö£¬ÒÔ±ãºóÃæ¿ÉÒÔ¸üºÃµØ·ÖÎöÆäʵÏÖϸ½Ú¡£

SEAndroid°²È«»úÖÆËùÒª±£»¤µÄ¶ÔÏóÊÇϵͳÖеÄ×ÊÔ´£¬ÕâЩ×ÊÔ´·Ö²¼ÔÚ¸÷¸ö×ÓϵͳÖУ¬ÀýÈçÎÒÃǾ­³£½Ó´¥µÄÎļþ¾ÍÊÇ·Ö²¼Îļþ×ÓϵͳÖеġ£Êµ¼ÊÉÏ£¬ÏµÍ³ÖÐÐèÒª±£»¤µÄ×ÊÔ´·Ç³£¶à£¬³ýÁËÇ°ÃæËµµÄÎļþÖ®Í⣬»¹Óнø³Ì¡¢socketºÍipcµÈµÈ¡£¶ÔÓÚAndroidϵͳÀ´Ëµ£¬ÓÉÓÚʹÓÃÁËÓ봫ͳLinuxϵͳ²»Ò»ÑùµÄÓû§¿Õ¼äÔËÐÐʱ£¬¼´Ó¦ÓóÌÐòÔËÐÐʱ¿ò¼Ü£¬Òò´ËËüÔÚÓû§¿Õ¼äÓÐÒ»Ð©ÌØÓеÄ×ÊÔ´ÊÇÐèÒªÌØ±ð±£»¤µÄ£¬ÀýÈçϵͳÊôÐÔµÄÉèÖá£

½ÓÏÂÀ´£¬ÎÒÃǾÍͨ¹ýͼ1À´¹Û²ìSEAndroid°²È«»úÖÆµÄÕûÌå¿ò¼Ü£¬ÈçÏÂËùʾ£º

ͼ1 SEAndroid°²È«»úÖÆ¿ò¼Ü

´Óͼ1¿ÉÒÔ¿´µ½£¬ÒÔSELinuxÎļþϵͳ½Ó¿ÚΪ±ß½ç£¬SEAndroid°²È«»úÖÆ°üº¬ÓÐÄں˿ռäºÍÓû§¿Õ¼äÁ½²¿·ÖÖ§³Ö¡£ÔÚÄں˿ռ䣬Ö÷񻃾¼°µ½Ò»¸ö³ÆÎªSELinux LSMµÄÄ£¿é¡£¶øÔÚÓû§¿Õ¼äÖУ¬Éæµ½Security Context¡¢Security ServerºÍSEAndroid PolicyµÈÄ£¿é¡£ÕâЩÄں˿ռäÄ£¿éºÍÓû§¿Õ¼äÄ£¿éµÄ×÷ÓÃÒÔ¼°½»»¥ÈçÏÂËùʾ£º

1. Äں˿ռäµÄSELinux LSMÄ£¿é¸ºÔðÄÚºË×ÊÔ´µÄ°²È«·ÃÎÊ¿ØÖÆ¡£

2. Óû§¿Õ¼äµÄSEAndroid PolicyÃèÊöµÄÊÇ×ÊÔ´°²È«·ÃÎʲßÂÔ¡£ÏµÍ³ÔÚÆô¶¯µÄʱºò£¬Óû§¿Õ¼äµÄSecurity ServerÐèÒª½«ÕâЩ°²È«·ÃÎʲßÂÔ¼ÓÔØÄں˿ռäµÄSELinux LSMÄ£¿éÖÐÈ¥¡£ÕâÊÇͨ¹ýSELinuxÎļþϵͳ½Ó¿ÚʵÏֵġ£

3. Óû§¿Õ¼äµÄSecurity ContextÃèÊöµÄÊÇ×ÊÔ´°²È«ÉÏÏÂÎÄ¡£SEAndroidµÄ°²È«·ÃÎʲßÂÔ¾ÍÊÇÔÚ×ÊÔ´µÄ°²È«ÉÏÏÂÎÄ»ù´¡ÉÏʵÏֵġ£

4. Óû§¿Õ¼äµÄSecurity ServerÒ»·½ÃæÐèÒªµ½Óû§¿Õ¼äµÄSecurity ContextÈ¥¼ìË÷¶ÔÏóµÄ°²È«ÉÏÏÂÎÄ£¬ÁíÒ»·½ÃæÒ²ÐèÒªµ½Äں˿ռäÈ¥²Ù×÷¶ÔÏóµÄ°²È«ÉÏÏÂÎÄ¡£

5. Óû§¿Õ¼äµÄselinux¿â·â×°Á˶ÔSELinuxÎļþϵͳ½Ó¿ÚµÄ¶Áд²Ù×÷¡£Óû§¿Õ¼äµÄSecurity Server·ÃÎÊÄں˿ռäµÄSELinux LSMÄ£¿éʱ£¬¶¼ÊǼä½ÓµØÍ¨¹ýselinux½øÐеġ£ÕâÑù¿ÉÒÔ½«¶ÔSELinuxÎļþϵͳ½Ó¿ÚµÄ¶Áд²Ù×÷·â×°³É¸üÓÐÒâÒåµÄº¯Êýµ÷Óá£

6. Óû§¿Õ¼äµÄSecurity Serverµ½Óû§¿Õ¼äµÄSecurity ContextÈ¥¼ìË÷¶ÔÏóµÄ°²È«ÉÏÏÂÎÄʱ£¬Í¬ÑùÒ²ÊÇͨ¹ýselinux¿âÀ´½øÐеġ£

½ÓÏÂÀ´£¬ÎÒÃǾʹÓÄں˿ռäºÍÓû§¿Õ¼äÁ½¸ö½Ç¶ÈÀ´·ÖÎöSEAndroid°²È«»úÖÆ¿ò¼Ü¡£

Ò». Äں˿ռä

ÔÚÄں˿ռäÖУ¬´æÔÚÒ»¸öSELinux LSMÄ£¿é£¬Õâ¸öÄ£¿é°üº¬ÓÐÒ»¸ö·ÃÎÊÏòÁ¿»º³å£¨Access Vector Cache£©ºÍÒ»¸ö°²È«·þÎñ£¨Security Server£©¡£Security Server¸ºÔð°²È«·ÃÎÊ¿ØÖÆÂß¼­£¬¼´ÓÉËüÀ´¾ö¶¨Ò»¸öÖ÷Ìå·ÃÎÊÒ»¸ö¿ÍÌåÊÇ·ñÊǺϷ¨µÄ¡£ÕâÀï˵µÄÖ÷ÌåÒ»°ã¾ÍÊÇÖ¸½ø³Ì£¬¶ø¿ÍÌå¾ÍÊÇÖ÷ÌåÒª·ÃÎʵÄ×ÊÔ´£¬ÀýÈçÎļþ¡£

ÓëSELinux Security ServerÏà¹ØµÄÒ»¸öÄÚºË×ÓÄ£¿éÊÇLSM£¬È«³ÆÊÇLinux Security Model¡£LSM¿ÉÒÔ˵ÊÇΪÁËSELinux¶øÉè¼ÆµÄ£¬µ«ÊÇËüÊÇÒ»¸öͨÓõݲȫģ¿é£¬SELinux¿ÉÒÔʹÓã¬ÆäËüµÄÄ£¿éҲͬÑù¿ÉÒÔʹÓá£ÕâÌåÏÖÁËLinuxÄÚºËÄ£¿éµÄÒ»¸öÖØÒªÉè¼ÆË¼Ï룬ֻÌṩ»úÖÆÊµÏÖ¶ø²»Ìṩ²ßÂÔʵÏÖ¡£ÔÚÎÒÃÇÕâ¸öÀý×ÓÖУ¬LSMʵÏֵľÍÊÇ»úÖÆ£¬¶øSELinux¾ÍÊÇÔÚÕâÌ×»úÖÆÏµÄÒ»¸ö²ßÂÔʵÏÖ¡£Ò²¾ÍÊÇ˵£¬ÄãÒ²¿ÉÒÔͨ¹ýLSMÀ´ÊµÏÖ×Ô¼ºµÄÒ»Ì×MAC°²È«»úÖÆ¡£

SELinux¡¢LSMºÍÄÚºËÖеÄ×ÓϵͳÊÇÈçºÎ½»»¥µÄÄØ£¿Ê×ÏÈ£¬SELinux»áÔÚLSMÖÐ×¢²áÏàÓ¦µÄ»Øµ÷º¯Êý¡£Æä´Î£¬LSM»áÔÚÏàÓ¦µÄÄں˶ÔÏó×ÓϵͳÖлá¼ÓÈëһЩHook´úÂë¡£ÀýÈ磬ÎÒÃǵ÷ÓÃϵͳ½Ó¿Úreadº¯ÊýÀ´¶Áȡһ¸öÎļþµÄʱºò£¬¾Í»á½øÈëµ½Äں˵ÄÎļþ×ÓϵͳÖС£ÔÚÎļþ×ÓϵͳÖиºÔð¶ÁÈ¡Îļþº¯Êývfs_read¾Í»áµ÷ÓÃLSM¼ÓÈëµÄHook´úÂë¡£ÕâЩHook´úÂë¾Í»áµ÷ÓÃ֮ǰSELinux×¢²á½øÀ´µÄ»Øµ÷º¯Êý£¬ÒÔ±ãºóÕß¿ÉÒÔ½øÐа²È«¼ì²é¡£

SELinuxÔÚ½øÐа²È«¼ì²éµÄʱºò£¬Ê×ÏÈÊÇ¿´Ò»ÏÂ×Ô¼ºµÄAccess Vector CacheÊÇ·ñÒѾ­Óнá¹û¡£Èç¹ûÓеϰ£¬¾ÍÖ±½Ó½«½á¹û·µ»Ø¸øÏàÓ¦µÄÄÚºË×Óϵͳ¾Í¿ÉÒÔÁË¡£Èç¹ûûÓеϰ£¬¾ÍÐèÒªµ½Security ServerÖÐÈ¥½øÐмì²é¡£¼ì²é³öÀ´µÄ½á¹ûÔÚ·µ»Ø¸øÏàÓ¦µÄÄÚºË×ÓϵͳµÄͬʱ£¬Ò²»á±£´æÔÚ×Ô¼ºµÄAccess Vector CacheÖУ¬ÒÔ±ãÏ´οÉÒÔ¿ìËٵصõ½¼ì²é½á¹û¡£

ÉÏÃæÃèÊöµÄ°²È«·ÃÎÊ¿ØÖÆÁ÷³Ì¿ÉÒÔͨ¹ýͼ2À´×ܽᣬÈçÏÂËùʾ£º

ͼ2 SELinux°²È«·ÃÎÊ¿ØÖÆÁ÷³Ì

´Óͼ2¿ÉÒÔ¿´µ½£¬ÄÚºËÖеÄ×ÊÔ´ÔÚ·ÃÎʵĹý³ÌÖУ¬Ò»°ãÐèÒª»ñµÃÈý´Î¼ì²éͨ¹ý£º

1. Ò»°ãÐÔ´íÎó¼ì²é£¬ÀýÈç·ÃÎʵĶÔÏóÊÇ·ñ´æÔÚ¡¢·ÃÎʲÎÊýÊÇ·ñÕýÈ·µÈ¡£

2. DAC¼ì²é£¬¼´»ùÓÚLinux UID/GIDµÄ°²È«¼ì²é¡£

3. SELinux¼ì²é£¬¼´»ùÓÚ°²È«ÉÏÏÂÎĺͰ²È«²ßÂԵݲȫ¼ì²é¡£

¶þ. Óû§¿Õ¼ä

ÔÚÓû§¿Õ¼äÖУ¬SEAndroid°üº¬ÓÐÈý¸öÖ÷ÒªµÄÄ£¿é£¬·Ö±ðÊǰ²È«ÉÏÏÂÎÄ£¨Security Context£©¡¢°²È«²ßÂÔ£¨SEAndroid Policy£©ºÍ°²È«·þÎñ£¨Security Server£©¡£½ÓÏÂÀ´ÎÒÃǾͷֱð¶ÔËüÃǽøÐÐÃèÊö¡£

1. °²È«ÉÏÏÂÎÄ

SEAndroidÊÇÒ»ÖÖ»ùÓÚ°²È«²ßÂÔµÄMAC°²È«»úÖÆ¡£ÕâÖÖ°²È«²ßÂÔÓÖÊǽ¨Á¢ÔÚ¶ÔÏóµÄ°²È«ÉÏÏÂÎĵĻù´¡Éϵġ£ÕâÀïËù˵µÄ¶ÔÏó·ÖΪÁ½ÖÖÀàÐÍ£¬Ò»ÖÖ³ÆÖ÷Ì壨Subject£©£¬Ò»ÖÖ³ÆÎª¿ÍÌ壨Object£©¡£Ö÷Ìåͨ³£¾ÍÊÇÖ¸½ø³Ì£¬¶ø¿Í¹Û¾ÍÊÇÖ¸½ø³ÌËùÒª·ÃÎʵÄ×ÊÔ´£¬ÀýÈçÎļþ¡¢ÏµÍ³ÊôÐԵȡ£

°²È«ÉÏÏÂÎÄʵ¼ÊÉϾÍÊÇÒ»¸ö¸½¼ÓÔÚ¶ÔÏóÉϵıêÇ©£¨Tag£©¡£Õâ¸ö±êǩʵ¼ÊÉϾÍÊÇÒ»¸ö×Ö·û´®£¬ËüÓÉËIJ¿·ÖÄÚÈÝ×é³É£¬·Ö±ðÊÇSELinuxÓû§¡¢SELinux½ÇÉ«¡¢ÀàÐÍ¡¢°²È«¼¶±ð£¬Ã¿Ò»¸ö²¿·Ö¶¼Í¨¹ýÒ»¸öðºÅÀ´·Ö¸ô£¬¸ñʽΪ¡°user:role:type:sensitivity¡±¡£

ÀýÈ磬ÔÚ¿ªÆôÁËSEAndroid°²È«»úÖÆµÄÉ豸ÉÏÖ´Ðдø-ZÑ¡ÏîµÄlsÃüÁ¾Í¿ÉÒÔ¿´µ½Ò»¸öÎļþµÄ°²È«ÉÏÏÂÎÄ£º

$ ls -Z /init.rc  
-rwxr-x--- root root u:object_r:rootfs:s0 init.rc

ÉÏÃæµÄÃüÁîÁгöÎļþ/init.rcµÄ°²È«ÉÏÏÂÎÄΪ¡°u:object_r:rootfs:s0¡±£¬Õâ±íÃ÷Îļþ/init.rcµÄSELinuxÓû§¡¢SELinux½ÇÉ«¡¢ÀàÐͺͰ²È«¼¶±ð·Ö±ðΪu¡¢object_r¡¢rootfsºÍs0¡£
ÓÖÈ磬ÔÚ¿ªÆôÁËSEAndroid°²È«»úÖÆµÄÉ豸ÉÏÖ´Ðдø-ZÑ¡ÏîµÄpsÃüÁ¾Í¿ÉÒÔ¿´µ½Ò»¸ö½ø³ÌµÄ°²È«ÉÏÏÂÎÄ£º

$ ps -Z  
LABEL USER PID PPID NAME
u:r:init:s0 root 1 0 /init
......

ÉÏÃæµÄÃüÁîÁгö½ø³ÌinitµÄ°²È«ÉÏÏÂÎÄΪ¡°u:r:init:s0¡±£¬Õâ±íÃ÷½ø³ÌinitµÄSELinuxÓû§¡¢SELinux½ÇÉ«¡¢ÀàÐͺͰ²È«¼¶±ð·Ö±ðΪu¡¢r¡¢initºÍs0¡£

ÔÚ°²È«ÉÏÏÂÎÄÖУ¬Ö»ÓÐÀàÐÍ£¨Type£©²ÅÊÇ×îÖØÒªµÄ£¬SELinuxÓû§¡¢SELinux½ÇÉ«ºÍ°²È«¼¶±ð¶¼¼¸ºõ¿ÉÒÔºöÂÔ²»¼ÆµÄ¡£ÕýÒòΪÈç´Ë£¬SEAndroid°²È«»úÖÆÓÖ³ÆÎªÊÇ»ùÓÚTE£¨Tyoe Enforcement£©²ßÂԵݲȫ»úÖÆ¡£²»¹ýΪÁË·½±ãÀí½â°²È«ÉÏÏÂÎÄ£¬½ÓÏÂÀ´ÎÒÃÇ»¹ÊǼòµ¥µØ¶ÔSELinuxÓû§¡¢SELinux½ÇÉ«ºÍ°²È«¼¶±ðµÄ×÷ÓýøÐнéÉÜ¡£

¶ÔÓÚ½ø³ÌÀ´£¬SELinuxÓû§ºÍSELinux½ÇɫֻÊÇÓÃÀ´ÏÞÖÆ½ø³Ì¿ÉÒÔ±ê×¢µÄÀàÐÍ¡£¶ø¶ÔÓÚÎļþÀ´Ëµ£¬SELinuxÓû§ºÍSELinux½ÇÉ«¾Í¿ÉÒÔÍêÈ«ºöÂÔ²»¼Æ¡£ÎªÁËÍêÕûµØÃèÊöÒ»¸öÎļþµÄ°²È«ÉÏÏÂÎÄ£¬Í¨³£½«ËüµÄSELinux½ÇÉ«¹Ì¶¨Îªobject_r£¬¶ø½«ËüµÄSELinuxÓû§ÉèÖÃΪ´´½¨ËüµÄ½ø³ÌµÄSELinuxÓû§¡£

ÔÚSEAndroidÖУ¬Ö»¶¨ÒåÁËÒ»¸öSELinuxÓû§u£¬Òò´ËÎÒÃÇͨ¹ýps -ZºÍls -ZÃüÁî¿´µ½µÄËùÓеĽø³ÌºÍÎļþµÄ°²È«ÉÏÏÂÎÄÖеÄSELinuxÓû§¶¼Îªu¡£Í¬Ê±£¬SEAndroidÒ²Ö»¶¨ÒåÁËÒ»¸öSELinux½ÇÉ«r£¬Òò´Ë£¬ÎÒÃÇͨ¹ýps -ZÃüÁî¿´µ½µÄËùÓнø³ÌµÄ°²È«ÉÏÏÂÎÄÖеÄSELinux½ÇÉ«¶¼Îªr¡£

ͨ¹ýexternal/sepolicy/usersºÍexternal/sepolicy/rolesÎļþµÄÄÚÈÝ£¬ÎÒÃǾͿÉÒÔ¿´µ½SEAndroidËù¶¨ÒåµÄSELinuxÓû§ºÍSELinux½ÇÉ«¡£

Îļþexternal/sepolicy/usersµÄÄÚÈÝÈçÏÂËùʾ£º

user u roles { r } level s0 range s0 - mls_systemhigh;  

ÉÏÊöÓï¾äÉùÃ÷ÁËÒ»¸öSELinuxÓû§u£¬Ëü¿ÉÓõÄSELinux½ÇɫΪr£¬ËüµÄĬÈϰ²È«¼¶±ðΪs0£¬¿ÉÓõݲȫ¼¶±ð·¶Î§Îªs0~mls_systemhigh£¬ÆäÖУ¬mls_systemhighΪϵͳ¶¨ÒåµÄ×î¸ß°²È«¼¶±ð¡£

Îļþexternal/sepolicy/rolesµÄÄÚÈÝÈçÏÂËùʾ£º

role r;  
role r types domain;

µÚÒ»¸öÓï¾äÉùÃ÷ÁËÒ»¸öSELinux½ÇÉ«r£»µÚ¶þ¸öÓï¾äÔÊÐíSELinux½ÇÉ«rÓëÀàÐÍdomain¹ØÁª¡£

ÉÏÃæÌáµ½£¬¶ÔÓÚ½ø³ÌÀ´Ëµ£¬SELinuxÓû§ºÍSELinux½ÇɫֻÊÇÓÃÀ´ÏÞÖÆ½ø³Ì¿ÉÒÔ±ê×¢µÄÀàÐÍ£¬ÕâÊÇÈçºÎÌåÏÖµÄÄØ£¿ÒÔÇ°ÃæÁгöµÄexternal/sepolicy/usersºÍexternal/sepolicy/rolesÎļþÄÚÈÝÀ´Àý£¬Èç¹ûûÓгöÏÖÆäËüµÄuser»òÕßroleÉùÃ÷£¬ÄÇô¾ÍÒâζ×ÅÖ»ÓÐu¡¢rºÍdomain¿ÉÒÔ×éºÏÔÚÒ»ÆðÐγÉÒ»¸öºÏ·¨µÄ°²È«ÉÏÏÂÎÄ£¬¶øÆäËüÐÎʽµÄ°²È«ÉÏÏÂÎ͍Òå¾ùÊÇ·Ç·¨µÄ¡£

¶ÁÕß¿ÉÄÜ×¢Òâµ½£¬Ç°ÃæÎÒÃÇͨ¹ýps -ZÃüÁî¿´µ½½ø³ÌinitµÄ°²È«ÉÏÏÂÎÄΪ¡°u:r:init:s0¡±£¬°´ÕÕÉÏÃæµÄ·ÖÎö£¬ÕâÊDz»ÊÇÒ»¸ö·Ç·¨µÄ°²È«ÉÏÏÂÎÄÄØ£¿´ð°¸ÊÇ·ñ¶¨µÄ£¬ÒòΪÔÚÁíÍâÒ»¸öÎļþexternal/sepolicy/init.teÖУ¬Í¨¹ýtypeÓï¾äÉùÃ÷ÁËÀàÐÍinit£¬²¢ÇÒ½«domainÉèÖÃΪÀàÐÍinitµÄÊôÐÔ£¬ÈçÏÂËùʾ£º

type init, domain;  

ÓÉÓÚinit¾ßÓÐÊôÐÔdomain£¬Òò´ËËü¾Í¿ÉÒÔÏñdomainÒ»Ñù£¬¿ÉÒÔºÍSELinuxÓû§uºÍSELinux½ÇÉ«×éºÏÔÚÒ»ÆðÐγɺϷ¨µÄ°²È«ÉÏÏÂÎÄ¡£

¹ØÓÚSELinuxÓû§ºÍSELinux½ÇÉ«£¬ÎÒÃǾͽéÉܵ½ÕâÀ½ÓÏÂÀ´ÎÒÃÇÔÙ½éÉܰ²È«¼¶±ð¡£°²È«¼¶±ðʵ¼ÊÉÏÒ²ÊÇÒ»¸öMAC°²È«»úÖÆ£¬ËüÊǽ¨Á¢ÔÚTEµÄ»ù´¡Ö®Éϵġ£ÔÚSELinuxÖУ¬°²È«¼¶±ðÊÇ¿ÉÑ¡µÄ£¬Ò²¾ÍÊÇ˵£¬¿ÉÒÔÑ¡ÔñÆôÓûòÕß²»ÆôÓá£

°²È«¼¶±ð×ʼµÄÄ¿µÄÊÇÓÃÀ´¶ÔÕþ¸®·ÖÀàÎļþ½øÐзÃÎÊ¿ØÖƵġ£ÔÚ»ùÓÚ°²È«¼¶±ðµÄMAC°²È«»úÖÆÖУ¬Ö÷Ì壨subject£©ºÍ¿ÍÌ壨object£©¶¼¹ØÁªÓÐÒ»¸ö°²È«¼¶±ð¡£ÆäÖУ¬°²È«¼¶±ð½Ï¸ßµÄÖ÷Ìå¿ÉÒÔ¶ÁÈ¡°²È«¼¶±ð½ÏµÍµÄ¿ÍÌ壬¶ø°²È«¼¶±ð½ÏµÍµÄÖ÷Ìå¿ÉÒÔдÈ밲ȫ¼¶±ð½Ï¸ßµÄ¿ÍÌ塣ǰÕß³ÆÎª¡°read down¡±£¬¶øºóÕß³ÆÎª¡°write up¡±¡£Í¨¹ýÕâÖÖ¹æÔò£¬¿ÉÒÔÔÊÐíÊý¾Ý´Ó°²È«¼¶±ð½ÏµÍµÄÖ÷ÌåÁ÷Ïò°²È«¼¶±ð½Ï¸ßµÄÖ÷Ì壬¶øÏÞÖÆÊý¾Ý´Ó°²È«¼¶±ð½Ï¸ßµÄÖ÷ÌåÁ÷Ïò°²È«¼¶±ð½ÏµÍµÄÖ÷Ì壬´Ó¶øÓÐЧµØ±£»¤ÁËÊý¾Ý¡£×¢Ò⣬Èç¹ûÖ÷ÌåºÍ¿ÍÌåµÄ°²È«¼¶±ðÊÇÏàͬµÄ£¬ÄÇôÖ÷ÌåÊÇ¿ÉÒÔ¶Ô¿ÍÌå½øÐжÁºÍдµÄ¡£

ͨ¹ýͼ3¿ÉÒÔ¿´µ½»ùÓÚ°²È«¼¶±ðµÄMAC°²È«»úÖÆµÄÊý¾ÝÁ÷Ïò¿ØÖÆ£¬ÈçÏÂËùʾ£º

ͼ3 »ùÓÚ°²È«¼¶±ðµÄMAC°²È«»úÖÆÊý¾ÝÁ÷

ÔÚͼ3ÖУ¬ÎÒÃǶ¨ÒåÁËÁ½¸ö°²È«¼¶±ð£ºPUBLICºÍSECRET£¬ÆäÖУ¬SECRETµÄ°²È«¼¶±ð¸ßÓÚPUBLIC¡£

ÔÚʵ¼ÊʹÓÃÖУ¬°²È«¼¶±ðÊÇÓÉÃô¸ÐÐÔ£¨Sensitivity£©ºÍÀà±ð£¨Category£©Á½²¿·ÖÄÚÈÝ×é³ÉµÄ£¬¸ñʽΪ¡°sensitivity[:category_set]¡±£¬ÆäÖУ¬category_setÊÇ¿ÉÑ¡µÄ¡£ÀýÈ磬¼ÙÉèÎÒÃǶ¨ÒåÓÐs0¡¢s1Á½¸öSensitivity£¬ÒÔc0¡¢c1¡¢c2Èý¸öCategory£¬ÄÇô¡°s0:c0,c1¡±±íʾµÄ¾ÍÊÇSensitivityΪs0¡¢CategoryΪc0ºÍc1µÄÒ»¸ö°²È«¼¶±ð¡£

½éÉÜÍê³ÉSELinuxÓû§¡¢SELinux½ÇÉ«ºÍ°²È«¼¶±ðÖ®ºó£¬×îºóÎÒÃǾͽéÉÜÀàÐÍ¡£ÔÚSEAndroidÖУ¬ÎÒÃÇͨ³£½«ÓÃÀ´±ê×¢ÎļþµÄ°²È«ÉÏÏÂÎÄÖеÄÀàÐͳÆÎªfile_type£¬¶øÓÃÀ´±ê×¢½ø³ÌµÄ°²È«ÉÏÏÂÎĵÄÀàÐͳÆÎªdomain£¬²¢ÇÒÿһ¸öÓÃÀ´ÃèÊöÎļþ°²È«ÉÏÏÂÎĵÄÀàÐͶ¼½«file_typeÉèÖÃΪÆäÊôÐÔ£¬Ã¿Ò»¸öÓÃÀ´½ø³Ì°²È«ÉÏÏÂÎĵÄÀàÐͶ¼½«domainÉèÖÃΪÆäÊôÐÔ¡£

½«Ò»¸öÀàÐÍÉèÖÃΪÁíÒ»¸öÀàÐ͵ÄÊôÐÔ¿ÉÒÔͨ¹ýtypeÓï¾äʵÏÖ¡£ÀýÈ磬ÎÒÃÇÇ°ÃæÌáµ½µÄÓÃÀ´ÃèÊö½ø³ÌinitµÄ°²È«²ßÂÔµÄÎļþexternal/sepolicy/init.te£¬¾ÍʹÓÃÒÔϵÄtypeÓï¾äÀ´½«ÀàÐÍ domainÉèÖÃÀàÐÍinitµÄÊôÐÔ£º

type init domain;  

ÕâÑù¾Í¿ÉÒÔ±íÃ÷initÃèÊöµÄÀàÐÍÊÇÓÃÀ´ÃèÊö½ø³ÌµÄ°²È«ÉÏÏÂÎĵġ£

ͬÑù£¬Èç¹ûÎÒÃDz鿴ÁíÍâÒ»¸öÎļþexternal/sepolicy/file.te£¬¿ÉÒÔ¿´µ½AppÊý¾ÝÎļþµÄÀàÐÍÉùÃ÷£º

type app_data_file, file_type, data_file_type;  

ÉÏÊöÓï¾ä±íÃ÷ÀàÐÍapp_data_file¾ßÓÐÊôóÓfile_type£¬¼´ËüÊÇÓÃÀ´ÃèÊöÎļþµÄ°²È«ÉÏÏÂÎĵġ£

Á˽âÁËSEAndroid°²È«»úÖÆµÄ°²È«ÉÏÏÂÎÄÖ®ºó£¬ÎÒÃǾͿÉÒÔ¼ÌÐøAndroidϵͳÖеĶÔÏóµÄ°²È«ÉÏÏÂÎÄÊÇÈçºÎ¶¨ÒåµÄÁË¡£ÕâÀïÎÒÃÇÖ»ÌÖÂÛËÄÖÖÀàÐ͵ĶÔÏóµÄ°²È«ÉÏÏÂÎÄ£¬·Ö±ðÊÇApp½ø³Ì¡¢AppÊý¾ÝÎļþ¡¢ÏµÍ³ÎļþºÍϵͳÊôÐÔ¡£ÕâËÄÖÖÀàÐͶÔÏóµÄ°²È«ÉÏÏÂÎÄͨ¹ýËĸöÎļþÀ´ÃèÊö£ºmac_permissions.xml¡¢seapp_contexts¡¢file_contextsºÍproperty_contexts£¬ËüÃǾùλÓÚexternal/sepolicyĿ¼ÖС£

Îļþexternal/sepolicy/mac_permissions.xmlµÄÄÚÈÝÈçÏÂËùʾ£º

<?xml version="1.0" encoding="utf-8"?>  
<policy>

<!-- Platform dev key in AOSP -->
<signer signature="@PLATFORM" >
<seinfo value="platform" />
</signer>

<!-- Media dev key in AOSP -->
<signer signature="@MEDIA" >
<seinfo value="media" />
</signer>

<!-- shared dev key in AOSP -->
<signer signature="@SHARED" >
<seinfo value="shared" />
</signer>

<!-- release dev key in AOSP -->
<signer signature="@RELEASE" >
<seinfo value="release" />
</signer>

<!-- All other keys -->
<default>
<seinfo value="default" />
</default>

</policy>

Îļþmac_permissions.xml¸ø²»Í¬Ç©ÃûµÄApp·ÖÅ䲻ͬµÄseinfo×Ö·û´®£¬ÀýÈ磬ÔÚAOSPÔ´Âë»·¾³Ï±àÒë²¢ÇÒʹÓÃÆ½Ì¨Ç©ÃûµÄApp»ñµÃµÄseinfoΪ¡°platform¡±£¬Ê¹ÓõÚÈý·½Ç©Ãû°²×°µÄApp»ñµÃµÄseinfoÇ©ÃûΪ"default"¡£

Õâ¸öseinfoÃèÊöµÄÊÇÆäʵ²¢²»Êǰ²È«ÉÏÏÂÎÄÖеÄType£¬ËüÊÇÓÃÀ´ÔÚÁíÍâÒ»¸öÎļþexternal/sepolicy/seapp_contextsÖвéÕÒ¶ÔÓ¦µÄTypeµÄ¡£Îļþexternal/sepolicy/seapp_contextsµÄÄÚÈÝÈçÏÂËùʾ£º

# Input selectors:   
# isSystemServer (boolean)
# user (string)
# seinfo (string)
# name (string)
# sebool (string)
# isSystemServer=true can only be used once.
# An unspecified isSystemServer defaults to false.
# An unspecified string selector will match any value.
# A user string selector that ends in * will perform a prefix match.
# user=_app will match any regular app UID.
# user=_isolated will match any isolated service UID.
# All specified input selectors in an entry must match (i.e. logical AND).
# Matching is case-insensitive.
# Precedence rules:
# (1) isSystemServer=true before isSystemServer=false.
# (2) Specified user= string before unspecified user= string.
# (3) Fixed user= string before user= prefix (i.e. ending in *).
# (4) Longer user= prefix before shorter user= prefix.
# (5) Specified seinfo= string before unspecified seinfo= string.
# (6) Specified name= string before unspecified name= string.
# (7) Specified sebool= string before unspecified sebool= string.
#
# Outputs:
# domain (string)
# type (string)
# levelFrom (string; one of none, all, app, or user)
# level (string)
# Only entries that specify domain= will be used for app process labeling.
# Only entries that specify type= will be used for app directory labeling.
# levelFrom=user is only supported for _app or _isolated UIDs.
# levelFrom=app or levelFrom=all is only supported for _app UIDs.
# level may be used to specify a fixed level for any UID.
#
isSystemServer=true domain=system
user=system domain=system_app type=system_data_file
user=bluetooth domain=bluetooth type=bluetooth_data_file
user=nfc domain=nfc type=nfc_data_file
user=radio domain=radio type=radio_data_file
user=_app domain=untrusted_app type=app_data_file levelFrom=none
user=_app seinfo=platform domain=platform_app type=platform_app_data_file
user=_app seinfo=shared domain=shared_app type=platform_app_data_file
user=_app seinfo=media domain=media_app type=platform_app_data_file
user=_app seinfo=release domain=release_app type=platform_app_data_file
user=_isolated domain=isolated_app

ÎļþÖеÄ×¢ÊͽâÊÍÁËÈçºÎÔÚÎļþseapp_contexts²éÕÒ¶ÔÏóµÄType£¬ÕâÀï²»ÔÙÀÛÊö£¬Ö»ÊǾÙÁ½¸öÀý×ÓÀ´ËµÃ÷¡£

´ÓÇ°ÃæµÄ·ÖÎö¿ÉÖª£¬¶ÔÓÚʹÓÃÆ½Ì¨Ç©ÃûµÄAppÀ´Ëµ£¬ËüµÄseinfoΪ¡°platform¡±¡£Óû§¿Õ¼äµÄSecurity ServerÔÚΪËü²éÕÒ¶ÔÓ¦µÄTypeʱ£¬Ê¹ÓõÄuserÊäÈëΪ"_app"¡£ÕâÑùÔÚseapp_contextsÎļþÖУ¬ÓëËüÆ¥ÅäµÄÒ»Ðм´Îª£º

user=_app seinfo=platform domain=platform_app type=platform_app_data_file 

ÕâÑùÎÒÃǾͿÉÒÔÖªµÀ£¬Ê¹ÓÃÆ½Ì¨Ç©ÃûµÄAppËùÔËÐÐÔڵĽø³ÌdomainΪ¡°platform_app¡±£¬²¢ÇÒËüµÄÊý¾ÝÎļþµÄfile_typeΪ¡°platform_app_data_file¡±¡£

ÓÖÈ磬ʹÓõÚÈý·½Ç©ÃûµÄAppµÄseinfoΪ¡°default¡±¡£Óû§¿Õ¼äµÄSecurity ServerÔÚΪËü²éÕÒ¶ÔÓ¦µÄTypeʱ£¬Ê¹ÓõÄuserÊäÈëҲΪ"_app"¡£ÎÒÃÇ×¢Òâµ½£¬ÔÚseapp_contextsÎļþÖУ¬Ã»ÓÐÒ»ÐжÔÓ¦µÄuserºÍseinfo·Ö±ðΪ¡°_app¡±ºÍ¡°default¡±¡£µ«ÊÇÓÐÒ»ÐÐÊÇ×îÆ¥ÅäµÄ£¬¼´£º

user=_app domain=untrusted_app type=app_data_file levelFrom=none 

ÕâÑùÎÒÃǾͿÉÒÔÖªµÀ£¬Ê¹ÓõÚÈý·½Ç©ÃûµÄAppËùÔËÐÐÔڵĽø³ÌdomainΪ¡°unstrusted_app¡±£¬²¢ÇÒËüµÄÊý¾ÝÎļþµÄfile_typeΪ¡°app_data_file¡±¡£

½ÓÏÂÀ´ÎÒÃÇÔÙÀ´¿´ÏµÍ³ÎļþµÄ°²È«ÉÏÏÂÎÄÊÇÈçºÎ¶¨ÒåµÄ¡£Í¨¹ý²é¿´external/sepolicy/file_contextsÎļþ£¬ÎÒÃǾͿÉÒÔ¿´µ½ÏµÍ³ÎļþµÄ°²È«ÉÏÏÂÎÄÃèÊö£¬ÈçÏÂËùʾ£º

###########################################  
# Root
/ u:object_r:rootfs:s0

# Data files
/adb_keys u:object_r:rootfs:s0
/default.prop u:object_r:rootfs:s0
/fstab\..* u:object_r:rootfs:s0
/init\..* u:object_r:rootfs:s0
/res(/.*)? u:object_r:rootfs:s0
/ueventd\..* u:object_r:rootfs:s0

# Executables
/charger u:object_r:rootfs:s0
/init u:object_r:rootfs:s0
/sbin(/.*)? u:object_r:rootfs:s0

......

#############################
# System files
#
/system(/.*)? u:object_r:system_file:s0
/system/bin/ash u:object_r:shell_exec:s0
/system/bin/mksh u:object_r:shell_exec:s0

......

Îļþfile_contextsͨ¹ýÕýÔò±í´ïʽÀ´ÃèÊöϵͳÎļþµÄ°²È«ÉÏÏÂÎÄ¡£ÀýÈ磬ÔÚÉÏÃæÁгöµÄÄÚÈݵÄ×îºóÈýÐÐÖУ¬µ¹ÊýµÚÈýÐеÄÕýÔò±í´ïʽ±íʾÔÚ/systemĿ¼ÏµÄËùÓÐÎļþµÄ°²È«ÉÏÏÂÎľùΪ¡°u:object_r:system_file:s0¡±£¬×îºóÁ½ÐеÄÕýÔò±í´ïʽÔò±íʾÎļþ/system/bin/ashºÍ/system/bin/mkshµÄ°²È«ÉÏÏÂÎÄӦΪ¡°u:object_r:shell_exec:s0¡±¡£ËäÈ»µ¹ÊýµÚÈýÐеÄÕýÔò±í´ïʽÃèÊöµÄÎļþº­¸ÇºóÃæÁ½¸öÕýÔò±í´ïʾÃèÊöµÄÎļþ£¬µ«ÊǺóÃæÁ½¸öÕýÔò±í´ïʽÃèÊöµÄ·½Ê½¸ü¼Ó¾ßÌ壬Òò´Ë/system/bin/ashºÍ/system/bin/mkshÁ½¸öÎļþµÄ×îÖÕ°²È«ÉÏÏÂÎͼ±»ÉèÖÃΪ¡°u:object_r:shell_exec:s0¡±¡£

ÔÚAndroidϵͳÖУ¬ÓÐÒ»ÖÖÌØÊâµÄ×ÊÔ´¡ª¡ªÊôÐÔ£¬Appͨ¹ý¶ÁдËüÃÇÄܹ»»ñµÃÏàÓ¦µÄÐÅÏ¢£¬ÒÔ¼°¿ØÖÆÏµÍ³µÄÐÐΪ£¬Òò´Ë£¬SEAndroidÒ²ÐèÒª¶ÔËüÃǽøÐб£»¤¡£ÕâÒâζ×ÅAndroidϵͳµÄÊôÐÔÒ²ÐèÒª¹ØÁªÓа²È«ÉÏÏÂÎÄ¡£ÕâÊÇͨ¹ýÎļþexternal/sepolicy/property_contextsÀ´ÃèÊöµÄ£¬ËüµÄÄÚÈÝÈçÏÂËùʾ£º

##########################  
# property service keys
#
#
net.rmnet0 u:object_r:radio_prop:s0
net.gprs u:object_r:radio_prop:s0
net.ppp u:object_r:radio_prop:s0
net.qmi u:object_r:radio_prop:s0
net.lte u:object_r:radio_prop:s0
net.cdma u:object_r:radio_prop:s0
gsm. u:object_r:radio_prop:s0
persist.radio u:object_r:radio_prop:s0
net.dns u:object_r:radio_prop:s0
sys.usb.config u:object_r:radio_prop:s0
......

ÊôÐԵݲȫÉÏÏÂÎÄÓëÎļþµÄ°²È«ÉÏÏÂÎÄÊÇÀàËÆµÄ£¬ËüÃǵÄSELinuxÓû§¡¢SELinux½ÇÉ«ºÍ°²È«¼¶±ð¾ù¶¨ÒåΪu¡¢object_rºÍs0¡£´ÓÉÏÃæÁгöµÄÄÚÈÝ¿ÉÒÔ¿´³ö£¬ÒÔnet.¿ªÍ·µÄ¼¸¸öÊôÐÔ£¬ÒÔ¼°ËùÓÐÒÔgsm.¿ªÍ·µÄÊôÐÔ¡¢persist.radioºÍsys.usb.configÊôÐԵݲȫÉÏÏÂÎľù±»ÉèÖÃΪ¡±u:object_r:radio_prop:s0¡°¡£ÕâÒâζ×ÅÖ»ÓÐÓÐȨÏÞ·ÃÎÊTypeΪradio_propµÄ×ÊÔ´µÄ½ø³Ì²Å¿ÉÒÔ·ÃÎÊÕâЩÊôÐÔ¡£

2. °²È«²ßÂÔ

ÉÏÃæÎÒÃÇ·ÖÎöÁËSEAndroid°²È«»úÖÆÖеĶÔÏó°²È«ÉÏÏÂÎÄ£¬½ÓÏÂÀ´ÎÒÃǾͼÌÐø·ÖÎöSEAndroid°²È«»úÖÆÖеݲȫ²ßÂÔ¡£SEAndroid°²È«»úÖÆÖеݲȫ²ßÂÔÊÇÔÚ°²È«ÉÏÏÂÎĵĻù´¡ÉϽøÐÐÃèÊöµÄ£¬Ò²¾ÍÊÇ˵£¬Ëüͨ¹ýÖ÷ÌåºÍ¿ÍÌåµÄ°²È«ÉÏÏÂÎÄ£¬¶¨ÒåÖ÷ÌåÊÇ·ñÓÐȨÏÞ·ÃÎÊ¿ÍÌå¡£

Ç°ÃæÌáµ½£¬SEAndroid°²È«»úÖÆÖ÷ÒªÊÇʹÓöÔÏó°²È«ÉÏÏÂÎÄÖеÄÀàÐÍÀ´¶¨Ò尲ȫ²ßÂÔ£¬ÕâÖÖ°²È«²ßÂԾͳÆType Enforcement£¬¼ò³ÆTE¡£ÔÚexternal/sepolicyĿ¼ÖУ¬ËùÓÐÒÔ.teΪºó׺µÄÎļþ¾­¹ý±àÒëÖ®ºó£¬¾Í»áÉú³ÉÒ»¸ösepolicyÎļþ¡£Õâ¸ösepolicyÎļþ»á´ò°üÔÚROMÖУ¬²¢ÇÒ±£´æÔÚÉ豸ÉϵĸùĿ¼Ï£¬¼´ËüÔÚÉ豸ÉϵÄ·¾¶Îª/sepolicy¡£

½ÓÏÂÀ´£¬ÎÒÃǾÍͨ¹ýapp.teÎļþµÄÄÚÈÝÀ´·ÖÎöSEAndroid°²È«»úÖÆÎªÊ¹Ê¹ÓÃÆ½Ì¨Ç©ÃûµÄAppËù¶¨ÒåµÄ°²È«²ßÂÔ£¬Ïà¹ØµÄÄÚÈÝÈçÏÂËùʾ£º

#  
# Apps signed with the platform key.
#
type platform_app, domain;
permissive platform_app;
app_domain(platform_app)
platform_app_domain(platform_app)
# Access the network.
net_domain(platform_app)
# Access bluetooth.
bluetooth_domain(platform_app)
unconfined_domain(platform_app)
......

Ç°ÃæÔÚ·ÖÎöseapp_contextsÎļþµÄʱºò£¬ÎÒÃÇÌáµ½£¬Ê¹ÓÃÆ½Ì¨Ç©ÃûµÄAppËùÔËÐÐÔڵĽø³ÌµÄdomainÖ¸¶¨Îª"platform_app"¡£´ÓÉÏÃæÁгöµÄÄÚÈÝ¿ÉÒÔ¿´³ö£¬platform_app½ÓÏÂÀ´»áͨ¹ýapp_domain¡¢platform_app_domain¡¢net_domain¡¢bluetooth_domainºÍunconfined_domainºê·Ö±ð¼ÓÈëµ½ÆäËüµÄdomainÖÐÈ¥£¬ÒÔ±ã¿ÉÒÔ»ñµÃÏàÓ¦µÄȨÏÞ¡£½ÓÏÂÀ´ÎÒÃǾÍÒÔunconfined_domainºêΪÀý£¬·ÖÎöplatform_app»ñµÃÁËÄÄЩȨÏÞ¡£

ºêunconfined_domain¶¨ÒåÔÚÎļþte_macrosÎļþÖУ¬ÈçÏÂËùʾ£º

......  

#####################################
# unconfined_domain(domain)
# Allow the specified domain to do anything.
#
define(`unconfined_domain', `
typeattribute $1 mlstrustedsubject;
typeattribute $1 unconfineddomain;
')

......

$1ÒýÓõľÍÊÇunconfined_domainµÄ²ÎÊý£¬¼´platform_app¡£Í¨¹ý½ÓÏÂÀ´µÄÁ½¸ötypeattributeÓï¾ä£¬Îªplatform_appÉèÖÃÁËmlstrustedsubjectºÍunconfineddomainÁ½¸öÊôÐÔ¡£Ò²¾ÍÊÇ˵£¬mlstrustedsubjectºÍunconfineddomainÕâÁ½¸öType¾ßÓÐȨÏÞ£¬platform_appÕâ¸öTypeÒ²¾ßÓС£½ÓÏÂÀ´ÎÒÃÇÖ÷Òª·ÖÎöunconfineddomainÕâ¸öType¾ßÓÐÄÄЩȨÏÞ¡£

Îļþunconfined.te¶¨ÒåÁËunconfineddomainÕâ¸öTypeËù¾ßÓеÄȨÏÞ£¬ÈçÏÂËùʾ£º

allow unconfineddomain self:capability_class_set *;  
allow unconfineddomain kernel:security *;
allow unconfineddomain kernel:system *;
allow unconfineddomain self:memprotect *;
allow unconfineddomain domain:process *;
allow unconfineddomain domain:fd *;
allow unconfineddomain domain:dir r_dir_perms;
allow unconfineddomain domain:lnk_file r_file_perms;
allow unconfineddomain domain:{ fifo_file file } rw_file_perms;
allow unconfineddomain domain:socket_class_set *;
allow unconfineddomain domain:ipc_class_set *;
allow unconfineddomain domain:key *;
allow unconfineddomain fs_type:filesystem *;
allow unconfineddomain {fs_type dev_type file_type}:{ dir blk_file lnk_file sock_file fifo_file } *;
allow unconfineddomain {fs_type dev_type file_type}:{ chr_file file } ~entrypoint;
allow unconfineddomain node_type:node *;
allow unconfineddomain node_type:{ tcp_socket udp_socket rawip_socket } node_bind;
allow unconfineddomain netif_type:netif *;
allow unconfineddomain port_type:socket_class_set name_bind;
allow unconfineddomain port_type:{ tcp_socket dccp_socket } name_connect;
allow unconfineddomain domain:peer recv;
allow unconfineddomain domain:binder { call transfer set_context_mgr };
allow unconfineddomain property_type:property_service set;

Ò»¸öTypeËù¾ßÓеÄȨÏÞÊÇͨ¹ýallowÓï¾äÀ´ÃèÊöµÄ£¬ÒÔÏÂÕâ¸öallowÓï¾ä£º

allow unconfineddomain domain:binder { call transfer set_context_mgr };  

±íÃ÷domainΪunconfineddomainµÄ½ø³Ì¿ÉÒÔÓëÆäËü½ø³Ì½øÐÐbinder ipcͨÐÅ£¨call£©£¬²¢ÇÒÄܹ»ÏòÕâЩ½ø³Ì´«µÝBinder¶ÔÏó£¨transfer£©£¬ÒÔ¼°½«×Ô¼ºÉèÖÃΪBinderÉÏÏÂÎĹÜÀíÆ÷£¨set_context_mgr£©¡£

×¢Ò⣬SEAndroidʹÓõÄÊÇ×îСȨÏÞÔ­Ôò£¬Ò²¾ÍÊÇ˵£¬Ö»ÓÐͨ¹ýallowÓï¾äÉùÃ÷µÄȨÏÞ²ÅÊÇÔÊÐíµÄ£¬¶øÆäËüûÓÐͨ¹ýallowÓï¾äÉùÃ÷µÄȨÏÞ¶¼ÊǽûÖ¹£¬ÕâÑù¾Í¿ÉÒÔ×î´óÏ޶ȵر£»¤ÏµÍ³ÖеÄ×ÊÔ´¡£

Èç¹ûÎÒÃǼÌÐø·ÖÎöapp.teµÄÄÚÈÝ£¬»á·¢ÏÖʹÓõÚÈý·½Ç©ÃûµÄAppËùÔËÐÐÔڵĽø³ÌͬÑùÊǼÓÈëµ½unconfineddomainÕâ¸ödomainµÄ£¬ÈçÏÂËùʾ£º

#  
# Untrusted apps.
#
type untrusted_app, domain;
permissive untrusted_app;
app_domain(untrusted_app)
net_domain(untrusted_app)
bluetooth_domain(untrusted_app)
unconfined_domain(untrusted_app)

ÕâÊDz»ÊÇÒâζ×ÅʹÓÃÆ½Ì¨Ç©ÃûºÍµÚÈý·½Ç©ÃûµÄAppËù¾ßÓеÄȨÏÞ¶¼ÊÇÒ»ÑùµÄÄØ£¿´ð°¸ÊÇ·ñ¶¨µÄ¡£ËäȻʹÓÃÆ½Ì¨Ç©ÃûºÍµÚÈý·½Ç©ÃûµÄAppÔÚSEAndroid°²È«¿ò¼ÜµÄÔ¼ÊøÏ¶¼¾ßÓÐunconfineddomainÕâ¸ödomainËù¸³ÓèµÄȨÏÞ£¬µ«ÊDZðÍü¼Ç£¬ÔÚ½øÐÐSEAndroid°²È«¼ì²é֮ǰ£¬Ê¹ÓÃÆ½Ì¨Ç©ÃûºÍµÚÈý·½Ç©ÃûµÄAppÊ×ÏÈҪͨ¹ýDAC¼ì²é£¬Ò²¾ÍÊÇҪͨ¹ý´«Í³µÄLinux UID/GID°²È«¼ì²é¡£ÓÉÓÚʹÓÃÆ½Ì¨Ç©ÃûºÍµÚÈý·½Ç©ÃûµÄAppÔÚ°²×°µÄʱºò·ÖÅäµ½µÄLinux UID/GIDÊDz»Ò»ÑùµÄ£¬Òò´Ë¾Í¾ö¶¨ÁËËüÃÇËù¾ßÓÐȨÏÞÊDz»Ò»ÑùµÄ¡£

ͬʱ£¬ÕâÀïʹÓÃÆ½Ì¨Ç©ÃûºÍµÚÈý·½Ç©ÃûµÄAppÖ®ËùÒÔ»áͬʱ±»¸³ÓèunconfineddomainÕâ¸ödomainµÄȨÏÞ£¬ÊÇÒòÎªÇ°ÃæÎÒÃÇ·ÖÎöµÄapp.teÎļþÊÇÀ´×ÔÓÚAndroid 4.3µÄ¡£ÔÚAndroid 4.3ÖУ¬SEAndroid°²È«»úÖÆÊÇÊÔÑéÐÔÖʵ쬲¢ÇÒÆôÓõÄÊÇPermissiveģʽ£¬Ò²¾ÍÊǼ´Ê¹Ö÷ÌåÎ¥·´Á˰²È«²ßÂÔ£¬Ò²Ö»Êǻᷢ³ö¾¯¸æ£¬¶ø²»»áÕæµÄ¾Ü¾øÖ´ÐС£Èç¹ûÎÒÃÇ·ÖÎöµÄÊÇAndroid 4.4µÄapp.teÎļþ£¬¾Í»á·¢ÏÖ£¬Ê¹ÓõÚÈý·½Ç©ÃûµÄApp²»ÔÙ¾ßÓд󲿷ÖunconfineddomainÕâ¸ödomainµÄȨÏÞ£¬ÒòΪAndroid 4.4µÄSEAndroid°²È«»úÖÆ²»ÔÙÊÇÊÔÑéÐÔÖʵ쬲¢ÇÒÆôÓõÄEnforcingģʽ¡£

ÒÔÉÏÃèÊöµÄ¾ÍÊÇ»ùÓÚTEµÄ°²È«²ßÂÔ£¬ËüµÄºËÐÄ˼Ïë¾ÍÊÇ×îСȨÏÞÔ­Ôò£¬¼´Ö÷Ìå¶Ô¿ÍÌåÓµÓеÄȨÏÞ±ØÐëҪͨ¹ýallowÓï¾ä¶¨Òå²ÅÔÊÐí£¬·ñÔòµÄ»°£¬Ò»Çж¼ÊǽûÖ¹µÄ¡£

Ç°ÃæÎÒÃÇ»¹Ìáµ½£¬SEAndroid°²È«»úÖÆµÄ°²È«²ßÂÔ¾­¹ý±àÒëºó»áµÃµ½Ò»¸ösepolicyÎļþ£¬²¢ÇÒ×îÖÕ±£´æÔÚÉ豸Éϵĸù¾ÝĿ¼Ï¡£×¢Ò⣬Èç¹ûÎÒÃÇʲôҲ²»×ö£¬ÄÇô±£´æÔÚÕâ¸ösepolicyÎļþÖеݲȫ²ßÂÔÊDz»»á×Ô¶¯¼ÓÔØµ½Äں˿ռäµÄSELinux LSMÄ£¿éÈ¥µÄ¡£ËüÐèÒªÎÒÃÇÔÚϵͳÆô¶¯µÄ¹ý³ÌÖнøÐмÓÔØ¡£

ϵͳÖеÚÒ»¸öÆô¶¯µÄ½ø³ÌÊÇinit½ø³Ì¡£ÎÒÃÇÖªµÀ£¬Init½ø³ÌÔÚÆô¶¯µÄ¹ý³ÌÖУ¬Ö´ÐÐÁ˺ܶàµÄϵͳ³õʼ»¯¹¤×÷£¬ÆäÖоͰüÀ¨¼ÓÔØSEAndroid°²È«²ßÂԵŤ×÷£¬ÈçÏÂËùʾ£º

int main(int argc, char **argv)  
{
......

union selinux_callback cb;
cb.func_log = klog_write;
selinux_set_callback(SELINUX_CB_LOG, cb);

cb.func_audit = audit_callback;
selinux_set_callback(SELINUX_CB_AUDIT, cb);

INFO("loading selinux policy\n");
if (selinux_enabled) {
if (selinux_android_load_policy() < 0) {
selinux_enabled = 0;
INFO("SELinux: Disabled due to failed policy load\n");
} else {
selinux_init_all_handles();
}
} else {
INFO("SELinux: Disabled by command line option\n");
}

......
}

ÉÏÊö´úÂ붨ÒåÔÚÎļþsystem/core/init/init.cÖС£

ÕâÀïµ÷Óõ½ÁËÈý¸öÓëSEAndroidÏà¹ØµÄº¯Êý£ºselinux_set_callback¡¢selinux_android_load_policyºÍselinux_init_all_handles£¬ÆäÖУ¬selinux_set_callbackºÍselinux_android_load_policyÀ´×ÔÓÚlibselinux£¬¶øselinux_init_all_handlesÒ²ÊǶ¨ÒåÔÚÎļþsystem/core/init/init.cÖУ¬²¢ÇÒËü×îÖÕÒ²ÊÇͨ¹ýµ÷ÓÃlibselinuxµÄº¯ÊýÀ´´ò¿ªÇ°Ãæ·ÖÎöfile_contextsºÍproperty_contextsÎļþ£¬ÒÔ±ã¿ÉÒÔÓÃÀ´²éѯϵͳÎļþºÍϵͳÊôÐԵݲȫÉÏÏÂÎÄ¡£

º¯Êýselinux_set_callbackÓÃÀ´ÏòlibselinuxÉèÖÃSEAndroidÈÕÖ¾ºÍÉó¼Æ»Øµ÷º¯Êý£¬¶øº¯Êýselinux_android_load_policyÔòÊÇÓÃÀ´¼ÓÔØ°²È«²ßÂÔµ½Äں˿ռäµÄSELinux LSMÄ£¿éÖÐÈ¥¡£ÎÒÃÇÖØµã¹Ø×¢º¯Êýselinux_android_load_policyµÄʵÏÖ¡£

º¯Êýselinux_android_load_policy¶¨ÒåÔÚÎļþexternal/libselinux/src/android.c£¬ËüµÄʵÏÖÈçÏÂËùʾ£º

int selinux_android_load_policy(void)  
{
char *mnt = SELINUXMNT;
int rc;
rc = mount(SELINUXFS, mnt, SELINUXFS, 0, NULL);
if (rc < 0) {
if (errno == ENODEV) {
/* SELinux not enabled in kernel */
return -1;
}
if (errno == ENOENT) {
/* Fall back to legacy mountpoint. */
mnt = OLDSELINUXMNT;
rc = mkdir(mnt, 0755);
if (rc == -1 && errno != EEXIST) {
selinux_log(SELINUX_ERROR,"SELinux: Could not mkdir: %s\n",
strerror(errno));
return -1;
}
rc = mount(SELINUXFS, mnt, SELINUXFS, 0, NULL);
}
}
if (rc < 0) {
selinux_log(SELINUX_ERROR,"SELinux: Could not mount selinuxfs: %s\n",
strerror(errno));
return -1;
}
set_selinuxmnt(mnt);

return selinux_android_reload_policy();
}

SELINUXMNT¡¢OLDSELINUXMNTºÍSELINUXFSÊÇÈý¸öºê£¬ËüÃǶ¨ÒåÔÚÎļþexternal/libselinux/src/policy.hÎļþÖУ¬ÈçÏÂËùʾ£º

/* Preferred selinuxfs mount point directory paths. */  
#define SELINUXMNT "/sys/fs/selinux"
#define OLDSELINUXMNT "/selinux"

/* selinuxfs filesystem type string. */
#define SELINUXFS "selinuxfs"

»Øµ½º¯Êýselinux_android_load_policyÖУ¬ÎÒÃDz»ÄÑ·¢ÏÖËüµÄʵÏÖÂß¼­ÈçÏÂËùʾ£º
A. ÒÔ/sys/fs/selinuxΪ°²×°µã£¬°²×°Ò»¸öÀàÐÍΪselinuxfsµÄÎļþϵͳ£¬Ò²¾ÍÊÇSELinuxÎļþϵͳ£¬ÓÃÀ´ÓëÄں˿ռäµÄSELinux LSMÄ£¿éͨÐÅ¡£

B. Èç¹û²»ÄÜÔÚ/sys/fs/selinuxÕâ¸ö°²×°µã°²×°SELinuxÎļþϵͳ£¬ÄÇôÔÙÒÔ/selinuxΪ°²×°µã£¬°²×°SELinuxÎļþϵͳ¡£

C. ³É¹¦°²×°SELinuxÎļþϵͳ֮ºó£¬½ÓÏÂÀ´¾Íµ÷ÓÃÁíÍâÒ»¸öº¯Êýselinux_android_reload_policyÀ´½«SEAndroid°²È«²ßÂÔ¼ÓÔØµ½Äں˿ռäµÄSELinux LSMÄ£¿éÖÐÈ¥¡£

ÔڽϾɰ汾µÄLinuxϵͳÖУ¬SELinuxÎļþϵͳÊÇÒÔ/selinuxΪ°²×°µãµÄ£¬²»¹ýºóÃæ½Ïеİ汾¶¼ÊÇÒÔ/sys/fs/selinuxΪ°²×°µãµÄ£¬AndroidϵͳʹÓõÄÊǺóÕß¡£

º¯Êýselinux_android_reload_policyÒ²ÊǶ¨ÒåÔÚÎļþexternal/libselinux/src/android.cÖУ¬ËüµÄʵÏÖÈçÏÂËùʾ£º

static const char *const sepolicy_file[] = {  
"/data/security/current/sepolicy",
"/sepolicy",
0 };

......

int selinux_android_reload_policy(void)
{
int fd = -1, rc;
struct stat sb;
void *map = NULL;
int i = 0;

while (fd < 0 && sepolicy_file[i]) {
fd = open(sepolicy_file[i], O_RDONLY | O_NOFOLLOW);
i++;
}
if (fd < 0) {
selinux_log(SELINUX_ERROR, "SELinux: Could not open sepolicy: %s\n",
strerror(errno));
return -1;
}
if (fstat(fd, &sb) < 0) {
selinux_log(SELINUX_ERROR, "SELinux: Could not stat %s: %s\n",
sepolicy_file[i], strerror(errno));
close(fd);
return -1;
}
map = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (map == MAP_FAILED) {
selinux_log(SELINUX_ERROR, "SELinux: Could not map %s: %s\n",
sepolicy_file[i], strerror(errno));
close(fd);
return -1;
}

rc = security_load_policy(map, sb.st_size);
if (rc < 0) {
selinux_log(SELINUX_ERROR, "SELinux: Could not load policy: %s\n",
strerror(errno));
munmap(map, sb.st_size);
close(fd);
return -1;
}

munmap(map, sb.st_size);
close(fd);
selinux_log(SELINUX_INFO, "SELinux: Loaded policy from %s\n", sepolicy_file[i]);

return 0;
}

º¯Êýselinux_android_reload_policyµÄÖ´Ðйý³ÌÈçÏÂËùʾ£º

A. ÒÀ´Î´Ó/data/security/currentºÍ¸ùĿ¼ѰÕÒsepolicyÎļþ£¬ÕÒµ½Ö®ºó¾Í´ò¿ª£¬»ñµÃÒ»¸öÎļþÃèÊö·ûfd¡£

B. ͨ¹ýÎļþÃèÊö·ûfd½«Ç°Ãæ´ò¿ªµÄsepolicyÎļþµÄÄÚÈÝÓ³Éäµ½ÄÚ´æÖÐÀ´£¬²¢Çҵõ½ËüµÄÆðʼµØÖ·Îªmap¡£

C. µ÷ÓÃÁíÍâÒ»¸öº¯Êýsecurity_load_policy½«ÒѾ­Ó³Éäµ½ÄÚ´æÖеÄsepolicyÎļþÄÚÈÝ£¬¼´SEAndroid°²È«²ßÂÔ£¬¼ÓÔØµ½Äں˿ռäµÄSELinux LSMÄ£¿éÖÐÈ¥¡£

D. ¼ÓÔØÍê³Éºó£¬ÊÍ·ÅsepolicyÎļþÕ¼ÓõÄÄڴ棬²¢ÇҹرÕsepolicyÎļþ¡£

º¯Êýsecurity_load_policy¶¨ÒåÔÚÎļþexternal/libselinux/src/load_policy.cÖУ¬ËüµÄʵÏÖÈçÏÂËùʾ£º

int security_load_policy(void *data, size_t len)  
{
char path[PATH_MAX];
int fd, ret;

if (!selinux_mnt) {N
errno = ENOENT;
return -1;
}

snprintf(path, sizeof path, "%s/load", selinux_mnt);
fd = open(path, O_RDWR);
if (fd < 0)
return -1;

ret = write(fd, data, len);
close(fd);
if (ret < 0)
return -1;
return 0;
}

selinux_mntÊÇÒ»¸öÈ«¾Ö±äÁ¿£¬ËüÃèÊöµÄÊÇSELinuxÎļþϵͳµÄ°²×°µã¡£ÔÚÎÒÃÇÕâ¸öÇé¾°ÖУ¬ËüµÄÖµ¾ÍµÈÓÚ/sys/fs/selinux¡£
º¯Êýsecurity_load_policyµÄʵÏֺܼòµ¥£¬ËüÊ×ÏÈ´ò/sys/fs/selinux/loadÎļþ£¬È»ºó½«²ÎÊýdataËùÃèÊöµÄ°²È«²ßÂÔдÈëµ½Õâ¸öÎļþÖÐÈ¥¡£ÓÉÓÚ/sys/fs/selinuxÊÇÓÉÄں˿ռäµÄSELinux LSMÄ£¿éµ¼³öÀ´µÄÎļþϵͳ½Ó¿Ú£¬Òò´Ëµ±ÎÒÃǽ«°²È«²ßÂÔдÈ뵽λÓÚ¸ÃÎļþϵͳÖеÄloadÎļþʱ£¬¾ÍÏ൱ÓÚÊǽ«°²È«²ßÂÔ´ÓÓû§¿Õ¼ä¼ÓÔØµ½SELinux LSMÄ£¿éÖÐÈ¥ÁË¡£ÒÔºóSELinux LSMÄ£¿éÖеÄSecurity Server¾Í¿ÉÒÔͨ¹ýËüÀ´½øÐа²È«¼ì²é¡£

3. Security Server

Óû§¿Õ¼äµÄSecurity ServerÖ÷ÒªÊÇÓÃÀ´±£»¤Óû§¿Õ¼ä×ÊÔ´µÄ£¬ÒÔ¼°ÓÃÀ´²Ù×÷Äں˿ռä¶ÔÏóµÄ°²È«ÉÏÏÂÎĵģ¬ËüÓÉÓ¦ÓóÌÐò°²×°·þÎñPackageManagerService¡¢Ó¦ÓóÌÐò°²×°ÊØ»¤½ø³Ìinstalld¡¢Ó¦ÓóÌÐò½ø³Ì·õ»¯Æ÷Zygote½ø³ÌÒÔ¼°init½ø³Ì×é³É¡£ÆäÖУ¬PackageManagerServiceºÍinstalld¸ºÔð´´½¨AppÊý¾ÝĿ¼µÄ°²È«ÉÏÏÂÎÄ£¬Zygote½ø³Ì¸ºÔð´´½¨App½ø³ÌµÄ°²È«ÉÏÏÂÎÄ£¬¶øinit½ø³Ì¸ºÔð¿ØÖÆÏµÍ³ÊôÐԵݲȫ·ÃÎÊ¡£

Ó¦ÓóÌÐò°²×°·þÎñPackageManagerServiceÔÚÆô¶¯µÄʱºò£¬»áÔÚ/etc/securityĿ¼ÖÐÕÒµ½ÎÒÃÇÇ°Ãæ·ÖÎöµÄmac_permissions.xmlÎļþ£¬È»ºó¶ÔËü½øÐнâÎö£¬µÃµ½AppÇ©Ãû»òÕß°üÃûÓëseinfoµÄ¶ÔÓ¦¹ØÏµ¡£µ±PackageManagerService°²×°AppµÄʱºò£¬Ëü¾Í»á¸ù¾ÝÆäÇ©Ãû»òÕß°üÃû²éÕÒµ½¶ÔÓ¦µÄseinfo£¬²¢ÇÒ½«Õâ¸öseinfo´«µÝ¸øÁíÍâÒ»¸öÊØ»¤½ø³Ìinstalled¡£

ÊØ»¤½ø³Ìinstalld¸ºÔð´´½¨AppÊý¾ÝĿ¼¡£ÔÚ´´½¨AppÊý¾ÝĿ¼µÄʱºò£¬ÐèÒª¸øËüÉèÖð²È«ÉÏÏÂÎÄ£¬Ê¹µÃSEAndroid°²È«»úÖÆ¿ÉÒÔ¶ÔËü½øÐа²È«·ÃÎÊ¿ØÖÆ¡£Installd¸ù¾ÝPackageManagerService´«µÝ¹ýÀ´µÄseinfo£¬²¢ÇÒµ÷ÓÃlibselinux¿âÌṩµÄselabel_lookupº¯Êýµ½Ç°ÃæÎÒÃÇ·ÖÎöµÄseapp_contextsÎļþÖвéÕÒµ½¶ÔÓ¦µÄType¡£ÓÐÁËÕâ¸öTypeÖ®ºó£¬installd¾Í¿ÉÒÔ¸øÕýÔÚ°²×°µÄAppµÄÊý¾ÝĿ¼ÉèÖð²È«ÉÏÏÂÎÄÁË£¬ÕâÊÇͨ¹ýµ÷ÓÃlibselinux¿âÌṩµÄlsetfileconº¯ÊýÀ´ÊµÏֵġ£

´ÓÇ°ÃæAndroidÓ¦ÓóÌÐò½ø³ÌÆô¶¯¹ý³ÌµÄÔ´´úÂë·ÖÎöºÍAndroidϵͳ½ø³ÌZygoteÆô¶¯¹ý³ÌµÄÔ´´úÂë·ÖÎöÕâÁ½ÆªÎÄÕ¿ÉÒÔÖªµÀ£¬ÔÚAndroidϵͳÖУ¬Zygote½ø³Ì¸ºÔð´´½¨Ó¦ÓóÌÐò½ø³Ì¡£Ó¦ÓóÌÐò½ø³ÌÊÇSEAndroid°²È«»úÖÆÖеÄÖ÷Ì壬Òò´ËËüÃÇÒ²ÐèÒªÉèÖð²È«ÉÏÏÂÎÄ£¬ÕâÊÇÓÉZygote½ø³ÌÀ´ÉèÖõġ£×é¼þ¹ÜÀí·þÎñActivityManagerServiceÔÚÇëÇóZygote½ø³Ì´´½¨Ó¦ÓóÌÐò½ø³Ì֮ǰ£¬»áµ½PackageManagerServiceÖÐÈ¥²éѯ¶ÔÓ¦µÄseinfo£¬²¢ÇÒ½«Õâ¸öseinfo´«µÝµ½Zygote½ø³Ì¡£ÓÚÊÇ£¬Zygote½ø³ÌÔÚforkÒ»¸öÓ¦ÓóÌÐò½ø³ÌÖ®ºó£¬¾Í»áʹÓÃActivityManagerService´«µÝ¹ýÀ´µÄseinfo£¬²¢ÇÒµ÷ÓÃlibselinux¿âÌṩµÄselabel_lookupº¯Êýµ½Ç°ÃæÎÒÃÇ·ÖÎöµÄseapp_contextsÎļþÖвéÕÒµ½¶ÔÓ¦µÄDomain¡£ÓÐÁËÕâ¸öDomainÖ®ºó£¬Zygote½ø³Ì¾Í¿ÉÒÔ¸ø¸Õ²Å´´½¨µÄÓ¦ÓóÌÐò½ø³ÌÉèÖð²È«ÉÏÏÂÎÄÁË£¬ÕâÊÇͨ¹ýµ÷ÓÃlibselinux¿âÌṩµÄlsetconº¯ÊýÀ´ÊµÏֵġ£

Ç°ÃæÌáµ½£¬ÔÚAndroidϵͳÖУ¬ÊôÐÔÒ²ÊÇÒ»ÏîÐèÒª±£»¤µÄ×ÊÔ´¡£Init½ø³ÌÔÚÆô¶¯µÄʱºò£¬»á´´½¨Ò»¿éÄÚ´æÇøÓòÀ´Î¬»¤ÏµÍ³ÖеÄÊôÐÔ£¬½Ó×Å»¹»á´´½¨Ò»¸öProperty·þÎñ¡£Õâ¸öProperty·þÎñͨ¹ýsocketÌṩ½Ó¿Ú¸øÆäËü½ø³Ì·ÃÎÊAndroidϵͳÖеÄÊôÐÔ¡£ÆäËü½ø³Ìͨ¹ýsocketÀ´ºÍProperty·þÎñͨÐÅʱ£¬Property·þÎñ¿ÉÒÔ»ñµÃËüµÄ°²È«ÉÏÏÂÎÄ¡£ÓÐÁËÕâ¸ö°²È«ÉÏÏÂÎÄÖ®ºó£¬Property·þÎñ¾Í¿ÉÒÔͨ¹ýlibselinux¿âÌṩµÄselabel_lookupº¯Êýµ½Ç°ÃæÎÒÃÇ·ÖÎöµÄproperty_contextsÈ¥²éÕÒÒª·ÃÎʵÄÊôÐԵݲȫÉÏÏÂÎÄÁË¡£ÓÐÁËÕâÁ½¸ö°²È«ÉÏÏÂÎÄÖ®ºó£¬Property·þÎñ¾Í¿ÉÒÔ¾ö¶¨ÊÇ·ñÔÊÐíÒ»¸ö½ø³Ì·ÃÎÊËüËùÖ¸¶¨µÄÊôÐÔÁË¡£

ÖÁ´Ë£¬ÎÒÃǾͷÖÎöÍê³ÉSEAndroid°²È«»úÖÆµÄÕûÌå¿ò¼ÜÁË¡£ÓÐÁËÕâЩ»ù´¡ÖªÊ¶Ö®ºó£¬½ÓÏÂÀ´ÎÒÃǾͿÉÒÔ¸ü¼ÓÉîÈëµØÈ¥·ÖÎöһЩ¾ßÌåµÄʹÓÃÇé¾°ÁË¡£ÀýÈ磬ÎÒÃÇÇ°Ãæ½éÉܵÄÓû§¿Õ¼äµÄSecurity ServerÊÇÈçºÎÒ»²½Ò»²½µØÉèÖÃÓ¦ÓóÌÐòÊý¾ÝĿ¼ºÍÓ¦ÓóÌÐò½ø³ÌµÄ°²È«ÉÏÏÂÎĵģ¬ÒÔ¼°Init½ø³ÌÊÇÈçºÎ¿ØÖÆÏµÍ³ÖеÄÊôÐÔ·ÃÎʵ쬾´Çë¹Ø×¢£¡

   
3778 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ