在 Mac OS X 目录下,/audit我有一些用户可以chmod根据自己的喜好访问的文件。
我需要chmod通过记录时间、用户和文件来审核对任何文件所做的任何事情chmod,尤其是后者。
我可以dtrace -n 'syscall::chmod:entry'并检测到事件,如何读取第一个参数chmod?
man 2 chmod 告诉我路径在第一个参数中:
chmod(const char *path, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
但我怎么读args[0]?我想我这样做是错误的。也许条目与实际的系统调用不对应?
如果我有一个可以监控的探针,我如何检查它提供哪些参数供访问以及它们是什么类型?我假设一些指针需要根据它们的数据布局取消引用..
所以我在 C 程序的上下文中获得系统调用,但我的教科书并没有真正解决在终端(在 Mac OSX 上)中进行系统调用的问题。您可以像“命令”一样在命令行上执行这些操作,还是完全不同的概念?抱歉,我确定这是非常初级的,只是找不到答案。
有没有一种简单的方法可以找出 C 函数声明在哪个头文件中?cd进入/usr/include并运行 ( grep -E 'system.*\(' *.h -R) 需要一些反复试验,但没有更简单的方法来做到这一点吗?
在上述链接何谓parent_tidptr并child_tidptr在do_fork()其中创建新的进程?
好的,这是一个脑力难题:如何找出当前在 Linux 机器上运行的任何/所有进程(以任何模式)打开特定文件的次数?即有多少文件描述符,全局(或在命名空间/容器内,无关紧要)正在使用引用特定文件/inode?
找出这一点的一种方法可能是使用 lsof 并计算有问题的文件名在其输出中出现的次数。但这似乎不雅,无论如何,我需要在 C 中以编程方式进行类似的操作。
编辑:或者可能是一个类似但不同的问题,这也有帮助:任何进程(可能不包括这个)?
在关于 Device Mapper 的 Red Hat 文档中,它写道:
“设备映射器的应用程序接口是 ioctl 系统调用。”
到目前为止,我知道ioctl被发送到/dev/mapper/control(对于大多数发行版),但似乎我需要深入研究dmsetup、 libdevmapper 或类似的源代码,以了解 ioctl 实际如何工作以及如何使用它们。
是否有任何书籍、讲座或文档对这个主题进行了扩展?我是否陷入了解析复杂源代码的困境?我使用 libdevmapper 而不是 ioctl 系统调用更好吗?ioctl 的手册页过于笼统,在这种情况下没有多大用处。
如果用户有权访问某些内容,他如何直接执行系统调用,例如 geteuid() - 从 bash 获取有效的用户 ID(这只是一个示例),我该怎么做?
有没有办法解决观察到的系统调用的数量:
SYS_345(0xe, 0xbff94188, 0x2, 0x4000, 0xb6526000) = 2
Run Code Online (Sandbox Code Playgroud)
在正在运行的内核中使用它的符号名称而不在源代码中查找它?
编辑用例是一个过时的strace二进制文件,位于外部框上,其内核源代码检索起来可能很乏味。
我正在调试一个程序,但不太清楚为什么我不能删除权限。
我有 root 权限sudo,可以调用setgid/setuid,但[is]不支持该操作。
重现的基本代码(golang):
package main
import (
"fmt"
"os"
"strconv"
"syscall"
)
func main() {
if os.Getuid() != 0 {
fmt.Println("run as root")
os.Exit(1)
}
uid, err := strconv.Atoi(os.Getenv("SUDO_UID"))
check("", err)
gid, err := strconv.Atoi(os.Getenv("SUDO_GID"))
check("", err)
fmt.Printf("uid: %d, gid: %d\n", uid, gid)
check("gid", syscall.Setgid(gid))
check("uid", syscall.Setuid(uid))
}
func check(message string, err error) {
if err != nil {
fmt.Printf("%s: %s\n", message, err)
os.Exit(1)
}
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
$ sudo ./drop-sudo
uid: 1000, …Run Code Online (Sandbox Code Playgroud) system-calls ×10
linux ×3
c ×2
osx ×2
command-line ×1
dm-crypt ×1
dtrace ×1
filesystems ×1
history ×1
ioctl ×1
kernel ×1
linux-kernel ×1
lsof ×1
monitoring ×1
permissions ×1
root ×1
setuid ×1
strace ×1
sudo ×1