在 Mac OS X 目录下,/audit
我有一些用户可以chmod
根据自己的喜好访问的文件。
我需要chmod
通过记录时间、用户和文件来审核对任何文件所做的任何操作chmod
,尤其是后者。
我可以dtrace -n 'syscall::chmod:entry'
检测事件,如何读取第一个参数chmod
?
man 2 chmod
告诉我路径在第一个参数中:
chmod(const char *path, mode_t mode);
但我怎样才能阅读args[0]
呢?我认为我这样做的方式是错误的..也许条目与实际的系统调用不对应?
如果我有一个可以监控的探测器,我如何检查它提供哪些参数供访问以及它们是什么类型?我假设一些指针需要根据其数据布局取消引用。
答案1
参数位于 中arg0
,但这是调用者的用户空间地址而不是实际的字符串。您还需要用 a 包裹它copyinstr()
:
dtrace -n 'syscall::chmod:entry { printf("%d %s", uid, copyinstr(arg0)); }'