如何通过Mac OS X上的Unix域套接字传递用户凭据?

Dio*_*lis 4 sockets security macos

在许多操作系统下,Unix域套接字允许进程以不会被恶意破坏的方式可靠地将其凭据传递给另一个进程.例如,这是通过SO_PASSCRED和SO_PEERCRED选项在Linux上完成的,在FreeBSD上通过传递包含cmsgcred结构的消息,在NetBSD上通过设置LOCAL_CREDS选项完成.但是,我还没有找到在Mac OS X下执行此操作的方法.相应的标题(socket.h)似乎已禁用Apple的构建功能.

#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#ifndef __APPLE__
// ...
struct cmsgcred {
Run Code Online (Sandbox Code Playgroud)

想到另一个可以实现相同结果的Mac OS X工具吗?

dic*_*ciu 5

我从未使用过它,但我认为您正在寻找LOCAL_PEERCRED。(请参见man unix)

您可以使用Mac OS X 10.4中引入的LOCAL_PEERCRED套接字选项,在套接字的另一端确认程序的身份。

请参阅技术说明TN2083。守护程序和代理


Dio*_*lis 5

更好的是,由于接受了答案,我发现getpeereid()直接返回所需的数据.