sudo sysctl -w kern.tfp.policy=1 失败?

sudo sysctl -w kern.tfp.policy=1 失败?

我尝试将 kern.tfp.policy 设置为一个,但是它不允许我这样做。

sudo sysctl -w kern.tfp.policy=1

kern.tfp.policy:2 sysctl:kern.tfp.policy:无效参数

我如何设置 kern.tfp.policy=1。

我这样做是为了能够使用 mach_inject。

谢谢

答案1

这个选项五年前就已经从 Mac OS X 内核中完全删除了。

792(Mac OS X 10.4.x Tiger),它仍然存在:

#define KERN_TFP_POLICY_DENY        0   /* Deny Mode: None allowed except privileged */
#define KERN_TFP_POLICY_PERMISSIVE  1   /* Permissive Mode: related ones allowed or privileged */
#define KERN_TFP_POLICY_RESTRICTED  2   /* Restricted Mode: privileged or setgid and realted */

在最近1228(Mac OS X 10.5.x Leopard)它已被删除:

#define KERN_TFP_POLICY_DENY        0   /* Deny Mode: None allowed except privileged */
#define KERN_TFP_POLICY_DEFAULT     2   /* Default  Mode: related ones allowed and upcall authentication */

由于1不再是此选项的有效值,因此您的调用将失败并显示该错误消息。

似乎没有办法再解决这个问题,所以你必须使用procmod群组成员身份。


作为一种解决方法,请查看man taskgated。它有一个允许 Tiger 兼容性的参数,以及一些其他参数。

接受旧的 (Tiger) 约定,即允许具有 procmod 或 procview 主有效组的进程获取任务端口。如果没有此选项,则不支持此传统模式。

您可能需要更改 launchdplist并重新启动该服务。不确定您的用例是否可以这样做。

相关内容