问题标签 [seandroid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 为什么 AOSP 7.1.2 上出现 getpidcon() 错误?
我正在制作基于 AOSP Nougat 最新源的定制 bsp。
Android 服务进程要求服务管理器查找或添加服务。服务管理器尝试通过调用 svc_can_register() 或 svc_can_find() 来检查 mac 权限,后者调用 check_mac_perms(),后者调用 getpidcon()。
让我们看看 svc_can_find()
check_mac_perms_from_lookup() 是这样的:
它调用 check_mac_perms()。check_mac_perms() 像这样:
它调用 getpidcon()。getpidcon() 在 external/selinux/libselinux/src/procattr.c 中定义
getpidcon() 定义如下:
"getpidattr_def(pidcon, current)" 扩展为 getpidcon() 函数定义并调用 getprocatrcon()
getprocattrcon() 是这样的:
很简单吧?只需打开一些文件并读取内容并通过函数参数返回。
它在 openattr() 处失败。我已经通过在 openattr() 中插入一些日志函数来确认这一点。openattr() 也是一个简单的函数。
失败点是“fd = open(path, flags | O_CLOEXEC);”
即使文件存在,几乎总是打开失败。我不明白这一点,想知道是什么导致了问题。我通过插入一些日志打印代码、检查 android log(adb logcat) 并从 android shell(adb shell) 读取文件来确认失败,例如“cat /proc/412/attr/current”。'cat ...' 读取成功,但日志显示打开文件失败。奇怪的是,如果 'pid' 为 0,它就成功了。
如果打开失败,将无法启动服务,导致系统无法正常启动。如果我忽略失败并从 getpidcon() 返回成功,系统会正确启动,但这显然不是正确的做法。
我正在将 bsp 测试为 selinux 许可模式。
谁能有我这样的经历?如果有人,请分享经验和问题的解决方案。
谢谢你。李三永。
android - SEPolicy for Android Native binder 客户端
我是 Android 世界的新手
我想知道如何 为本机 binder 客户端程序设置 SEPolicy (以及设置什么......)
我正在使用来自Using Binde-IPC 的供应商绑定器(vndservicemanager)参考
我为所需的 SEPolicy 添加了一些文件
现在我有两个内置的可执行文件——my_binder_service和my_client
它们都在 /vendor/bin/ 下
my_binder_service在启动时启动,它会将服务添加到 vendor servicemanager
my_client是一个使用 binder IPC 从my_binder_service执行某些功能的程序
这是我在init.rc中的设置
到目前为止我有什么:
- my_binder_service在引导时成功启动
- 它可以向供应商服务管理器添加服务
- my_client在permissive 模式下表现良好
以上内容在强制模式下通过ps -AZ和vndservice list命令进行验证
但是,my_client在强制模式下遇到分段错误
我通过以下方式检查被拒绝的消息
但是我在许可和强制模式下都没有找到任何消息
我还通过ps -AZ检查了这两个正在运行的进程的上下文:
我发现没有为my_client正确设置进程上下文
我认为这可能是my_client在强制模式下的问题
我认为my_binder_service设置正确是因为 init.rc 文件中的seclabel命令
但我不知道在哪里为 my_client 设置进程上下文
这里是my_client.te的内容(my_binder_service.te和这个类似)
并且文件上下文在file_context文件中指定
SEPolicy 部分是否缺少任何内容?
或者这不是关于 SEPolicy 的问题?
android - 非初始化进程/文件的 SElinux 域转换(Android Natvie)
我正在编写 Android Native 程序并设置它们的 SEPolicy
我想知道如何为非init程序设置进程上下文,看来域转换不起作用
我写了 2 个程序并将构建的可执行文件放在/vendor/bin
一个程序my_service作为初始化守护程序服务运行;
而另一个my_client是一个非初始化程序,必须手动执行
这 2 个程序使用 Binder IPC 进行通信。
但是我在尝试为my_client设置进程上下文时遇到了麻烦,这是一个非初始化程序
对于 my_service,它的 selinux 上下文主要设置在 2 个文件中
- 我的服务.te
- 文件上下文
而且我还在init.rc文件中使用了 seclabel
我检查了my_service的文件上下文和进程上下文,它们被设置为我所期望的
对于 my_client 的SEPolicy,一切都与my_service类似,只是它没有写在init.rc文件中,因为它不是一个 init 程序
但是,对于my_client,只有文件上下文设置为my_client_exec
我尝试运行 my_client 并查看了进程上下文:
进程上下文是su,而我希望它是my_client
此外,我在te_macros中获得了有关init_daemon_domain(XX)的信息
我认为它会进行域转换:当 init 运行带有 XX_exec 上下文的文件时,它会将其进程上下文转换为 XX!
所以我将规则更改为:
但这违反了一些预定义的策略。
顺便说一句,这两个程序之间的活页夹 IPC 似乎工作。
令人困惑的是,即使进程上下文不是my_client ,以下规则仍然有效?
有没有办法为非初始化程序进行域转换?
或者我对 SEPolicy 有什么误解?因为我找到的所有资源都是关于为 init 程序设置 SEPolicy
java - setenforce 0 后无法打开设备节点
我试图从/dev/graphics/fb0
服务路径中的设备文件中获取一些数据,U 具有 root 权限并执行chmod 777
命令,然后出现“权限被拒绝”错误。
然后我执行setenforce 0
了:,错误消失了,但文件的大小仍然为零
android - 在 Android 10 上的 SElinux 中添加新的安全策略
我希望女巫/dev/i2c-1
设备不在 Android 10 上的 SELinux 安全策略范围内。
我有 Android 10 的源代码。我尝试.te
在/device/thales/mt8768q/sepolicy/edgelab.te
在 foo.te 中,我向该站点添加了一个类似的示例:https ://source.android.com/security/selinux/customize 。
但是,在编译中,这一行会产生错误。
更新:
我在以下位置添加新行/device/manufacturer/device-name/BoardConfig.mk
:
错误是:
也许i2c-1_device
不是一个有效的名称,但我不知道如何/dev/i2c-1
在.te
文件中引用。
compiler-errors - SEAndroid:转储状态是否违反了永远不允许的规则
在构建 AOSP S(12) 时,我遇到了一个奇怪的问题,但可能只在有时/某些机器上。error.log如下
然后我检查规则。系统/sepolicy/private/property.te:46 说:
和 system/sepolicy/public/dumpstate.te:278 说:
我的问题是,这是否违反了从不允许规则并导致此错误?如果是,为什么有时不会弹出此错误。如果不是,我的错误的原因是什么?
提前致谢。