轉自:http://blog.csdn.net/yiyaaixuexi/article/details/8490886php
最近研究SEAndroid,會陸續對各個模塊作對比分析,學習移植SELinux至Android,學習程序管控策略。linux
bionic 做爲第一個分析的模塊,在此以前,先簡單敘述一下SEAndroid,便於後續理解。數據庫
SEAndroid 與 Android 的區別
一句話歸納:SEAndroid = SElinux + Android , 經過MAC的方式管控應用程序,從而提高原生Android系統的安全性。
SEAndroid 如何管控程序
一句話歸納:程序向SEAndroid(確切的說是SELinux)發送請求,SEAndroid根據策略數據庫進行策略分析,比對安全上下文,控制應用程序的資源存取。安全
SEAndroid bionic
SEAndroid在架構和機制上與SELinux徹底同樣,考慮到移動設備的特色,因此移植到SEAndroid的只是SELinux的一個子集。架構
1.增長系統調用
對比Android,SEAndroid bionic下增長了12個 system call :dom
- int fsetxattr(int, const char *, const void *, size_t, int)
- ssize_t fgetxattr(int, const char *, void *, size_t)
- ssize_t flistxattr(int, char *, size_t)
- int fremovexattr(int, const char *)
- int setxattr(const char *, const char *, const void *, size_t, int)
- int lsetxattr(const char *, const char *, const void *, size_t, int)
- ssize_t getxattr(const char *, const char *, void *, size_t)
- ssize_t lgetxattr(const char *, const char *, void *, size_t)
- ssize_t listxattr(const char *, char *, size_t)
- ssize_t llistxattr(const char *, char *, size_t)
- int removexattr(const char *, const char *)
- int lremovexattr(const char *, const char *)
2.linker增長AT_SECURE
SELinux爲加載的應用程序設置AT_SECURE auxv 標誌,具體在bionic/linker/linker.c:ionic
-
- vecs = linker_env_init(vecs);
-
-
-
-
- for (v = vecs; v[0]; v += 2) {
- if (v[0] == AT_SECURE) {
-
- program_is_setuid = v[1];
- goto sanitize;
- }
- }
-
-
- program_is_setuid = (getuid() != geteuid()) || (getgid() != getegid());
綜上所述,bionic差別並不大,主要是AT_SECURE的加入, SELinux水很深,推薦鳥哥的文章一讀:ide
鳥哥的 Linux 私房菜-第十七章、程序管理與 SELinux 初探學習