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

时间:2008-12-11 10:46:19

标签: security macos sockets

在许多操作系统下,Unix域套接字允许进程以不会被恶意破坏的方式可靠地将其凭据传递给另一个进程。例如,这是通过SO_PASSCRED and SO_PEERCRED options,FreeBSD by passing messages that include the cmsgcred structure和NetBSD by setting the LOCAL_CREDS option在Linux上完成的。但是,我无法找到在Mac OS X下执行此操作的方法。相应的标头(socket.h)似乎已禁用Apple的构建功能。

#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#ifndef __APPLE__
// ...
struct cmsgcred {

是否有其他Mac OS X工具可以实现相同的结果?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

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

请参阅Technical Note TN2083. Daemons and Agents