linux内核模块版本检查

###1. linux的内核版本号 linux的内核版本号(KERNELRELEASE)在编译的过程中生成, 存储在“include/config/kernel.release”文件中, 在KERNEL的Makefile中有 KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) 先来看“include/config/kernel.release”文件的生成过程, 同样是在kernel的Makefile中 # Store (new) KERNELRELASE string in include/config/kernel.release include/config/kernel.release: include/config/auto.conf FORCE $(Q)rm -f $@ $(Q)echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" > $@ 可以看到, KERNELRELEASE由两部分组成: KERNELVERSION : 这一部分是kernel源码的版本信息, 对于某一版本的源码来说, 是固定不变的...

linux内核模块签名

###1. linux内核模块签名 linux内核从3.7 开始加入模块签名检查机制, 校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证, 模块签名验证并非强制使用, 可在编译内核时配置是否开启 linux 内核中与模块签名验证相关的config项有: CONFIG_MODULE_SIG : 模块签名验证功能, 配置为‘y’后, 还有如下的子选项可以配置 CONFIG_MODULE_SIG_FORCE :是否验证模块的签名, 配置为‘n’时, 对于未签名或者使用无效的key签名的模块, 内核都允许加载, 但是kernel会被标记为被感染(tainted), 并且使用商业许可的模块也会被标记为被感染, 若配置为‘y’, 则只有正确签名的模块才能被允许加载, 其他的模块将被拒绝加载, 并且kernel会打出错误信息 CONFIG_MODULE_SIG_ALL : 若配置为’n’, 则在build kernel的过程中, 所有的模块都不会被签名, 需要自己手动签名, 若被配置为‘y’, 则在build kernel的 “modules_install”阶段, 所有的模块都会被自动签名 若不希望在加载模块的过程中进行签名验证, 只需要在build...

WPAS与client的通信

###1. WPAS支持的连接方式 WPAS支持client使用如下几种方式来进行连接: named pipe udp socket unix socket 在Android和Linux上, wpa_cli通常使用unix socket来连接WPAS ###2. WPAS的控制接口 在socket通信时, server端在定义好的端口上监听, client端发起连接,而WPAS所监听的端口被称作WPAS的控制接口, 在unix socekt address中, 没有端口号, 由一个文件路径来标识地址, 这一控制接口, 因此, 在下文中也将这一文件的路径称作WPAS的控制接口, 用以下方式来指定 在WPAS启动参数中, 使用“-g”选项来指定全局的控制接口 在WPAS中为每一个无线网络接口单独使用“-C”选项来指定 在WPAS中使用“-O”来指定override的控制接口, 可以覆盖第2步指定的控制接口对应的文件路径 在Android中, 启动WPAS时, 使用了 “-g” 和 “-O” 两个选项 首先,在WPAS启动参数中使用“-g”指定的全局控制接口, 对应的文件路径为“/dev/sockets/wpa_wlan0”,在WPAS初始化时,...

dumpsys

###1. dumpsys Android使用ServiceManager服务进程来管理系统所有的服务,在系统启动时,每个服务必须注册到ServiceManager进程中,那如何查看系统运行了那些服务呢?ServiceManager提供了listServices接口来罗列出系统注册的所有服务, dumpsys工具比较简单,就是调用ServiceManager服务的listServices来查询系统注册的所有服务,并且通过checkService接口来获取服务的Binder远程代理对象,使用每个服务的dump()函数来打印该服务的相关信息 dumpsys源码在 frameworks\native\cmds\dumpsys\dumpsys.cpp ###2. 获取dumpsys支持的命令 执行 $ dumpsys 在输出的信息的开头, 列出了系统中正在运行的service,但是这样输出太多了, 因此, 可以使用 $ dumpsys | grep “DUMP OF SERVICE” 来进行过滤 ###3. 支持dumpsys的service acount 显示设备上所有用户的信息 Cpuinfo 可以显示每个进程在内核空间和用户空间的cpu占用率 Activity 用于查看 activity组件的信息,详细信息使用 $ dumpsys activity -h 获取帮助 appwidget android窗口小部件的信息 audio...

SELinux 安全上下文

###1. SELinux之安全上下文 SElinux建立在对象的安全上下文的基础上的, 安全上下文用于描述资源, 由 user:role:type:sensitivity 组成, 例如 # ls -Z /init.rc -rwxr-x--- root root u:object_r:rootfs:s0 init.rc # ps -Z LABEL USER PID PPID NAME u:r:init:s0 root 1 0 /init 表明文件/init.rc的SELinux用户、SELinux角色、类型和安全级别分别为u、object_r、rootfs和s0 进程init的安全上下文为“u:r:init:s0”,这表明进程init的SELinux用户、SELinux角色、类型和安全级别分别为u、r、init和s0 需要注意的是, 对象可以划分为主体(进程)和客体(资源),对于客体, role是没有意义的,但是为了保持安全上下文标签的完整性, SELinux硬编码了一个特殊的role用于客体,所以我们看到的客体的role都是”object_r”, 并且不能在外部再声明名为“object”的role 在基于类型强制的安全上下文中, 类型才是最重要的, android中默认只有一个user一个role,...