- Android系統(tǒng)級深入開發(fā)
- 韓超 梁泉
- 402字
- 2018-12-29 13:39:33
4.3.7 Android Paranoid網(wǎng)絡
Android Paranoid網(wǎng)絡是一個對Linux內核網(wǎng)絡部分的改動,通過這個改動增加了網(wǎng)絡的認證機制。這個特性通過宏ANDROID_PARANOID_NETWORK來進行使能。
這個特性主要影響了Linux源代碼中以下一些文件:
net/ipv4/af_inet.c:IPV4的協(xié)議文件
net/ipv6/af_inet6.c:IPV6的協(xié)議文件
net/bluetooth/af_bluetooth.c:藍牙的協(xié)議文件
security/commoncap.c:安全性的文件
事實上,af_inet.c,af_inet6.c和af_bluetooth.c是3種不同的網(wǎng)絡協(xié)議中處理協(xié)議方面的文件,它們在邏輯上是并列的關系。
Android的頭文件include/linux/android_aid.h中定義了關于網(wǎng)絡的部分AID,這個內容和標準的Linux有所區(qū)別,如下所示:
#ifndef _LINUX_ANDROID_AID_H #define _LINUX_ANDROID_AID_H #define AID_NET_BT_ADMIN 3001 #define AID_NET_BT 3002 #define AID_INET 3003 #define AID_NET_RAW 3004 #define AID_NET_ADMIN 3005 #endif
在net/ipv4/af_inet.c中,相關的內容如下所示:
#ifdef CONFIG_ANDROID_PARANOID_NETWORK #include <linux/android_aid.h> static inline int current_has_network(void) { return in_egroup_p(AID_INET) || capable(CAP_NET_RAW); } #else static inline int current_has_network(void) { return 1; } #endif
在這個地方,進一步檢查了AID,如果符合才返回1,如果沒有附加這個特性,則直接返回1。
在安全性的文件security/commoncap.c中,相關的內容如下所示:
int cap_capable(struct task_struct *tsk, const struct cred *cred, int cap, int audit) { #ifdef CONFIG_ANDROID_PARANOID_NETWORK if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW)) return 0; if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN)) return 0; #endif return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM; }
這里的工作是檢查能力方面,增加了對AID的判斷。如果AID符合,則直接返回0,不再使用cap_raised()函數(shù)進行處理。
推薦閱讀
- 編程的修煉
- 動手玩轉Scratch3.0編程:人工智能科創(chuàng)教育指南
- Python網(wǎng)絡爬蟲從入門到實踐(第2版)
- 算法精粹:經(jīng)典計算機科學問題的Python實現(xiàn)
- 匯編語言程序設計(第3版)
- Java應用開發(fā)技術實例教程
- PhoneGap:Beginner's Guide(Third Edition)
- SQL Server 2008 R2數(shù)據(jù)庫技術及應用(第3版)
- Java并發(fā)編程:核心方法與框架
- Practical GIS
- .NET 4.0面向對象編程漫談:應用篇
- Python Django Web從入門到項目實戰(zhàn)(視頻版)
- Cinder:Begin Creative Coding
- 走近SDN/NFV
- Scratch超人漫游記:創(chuàng)意程序設計:STEAM創(chuàng)新教育指南