深入探索 Android SELinux 策略加载与文件系统
1. Android 设备启动与策略加载
Android 设备的启动顺序与 *NIX 系统类似。启动加载器先启动内核,内核最终执行 init 进程。init 进程通过 init 脚本和守护进程中的一些硬编码逻辑来管理设备的启动过程。init 进程的入口点是 main 函数,这也是第一个用户空间进程的起始点,相关代码位于 system/core/init/init.c 。
当 init 进程进入 main 函数时,它会处理命令行参数,挂载一些临时文件系统(如 /dev)和伪文件系统(如 procfs)。对于支持 SELinux 的 Android 设备,init 进程会在启动过程中尽早将策略加载到内核中。SELinux 系统的策略并不内置于内核,而是存放在一个单独的文件中。在 Android 早期启动时,唯一挂载的文件系统是根文件系统,它是 boot.img 中的一个 ramdisk,策略文件可以在 UDOO 或目标设备的根文件系统的 /sepolicy 路径下找到。此时,init 进程会调用一个函数从磁盘加载策略并发送到内核,代码如下:
int main(int argc, char *argv[]) {
...
process_kernel_cmdline();
unionselinux_callback cb;
cb.func_log = klog_write;
selinux_set_callback(SELINUX_CB_LOG, cb);
cb.func_audit = audit
超级会员免费看
订阅专栏 解锁全文
26

被折叠的 条评论
为什么被折叠?



