官术网_书友最值得收藏!

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ù)進行處理。

主站蜘蛛池模板: 平原县| 建阳市| 长兴县| 玛曲县| 唐海县| 龙江县| 鄂伦春自治旗| 沾益县| 泾阳县| 育儿| 漾濞| 浪卡子县| 策勒县| 大埔区| 洛南县| 福泉市| 铜鼓县| 天水市| 和龙市| 运城市| 定州市| 成武县| 游戏| 商丘市| 方山县| 荣成市| 罗甸县| 若羌县| 浦城县| 乳山市| 绥宁县| 桓仁| 安吉县| 邯郸市| 兴和县| 建湖县| 资兴市| 罗田县| 巴中市| 佛坪县| 卓尼县|