SO_PEERCRED是获取连接的AF_UNIX流套接字的pid / uid / gid的简单方法,SCM_CREDENTIALS或多或少相同,但更复杂(各种辅助消息)。 Links to example showing both ways
我应该使用什么?
答案 0 :(得分:7)
如果我理解正确,两者之间会有细微差别。 SO_PEERCRED
检索对等进程的凭据,而不需要来自对等进程的任何交互。相反,SCM_CREDENTIALS
是发送/接收对等进程凭证的机制,然后由内核检查。当进程以UID 0运行时,这种微妙的差异可能很重要。SCM_CREDENTIALS
允许以UID 0运行的进程声明自己的特权较低(例如,UID 50),而{{1}则无法实现这一点。 }。
见上文。我想鼓励使用SO_PEERCRED
并且仅支持SCM_CREDENTIALS
兼容性。
dbus守护程序似乎使用SO_PEERCRED
和SO_PEERCRED
。我认为最好复制他们的代码以便获取凭证。
答案 1 :(得分:2)
SO_PEERCRED
返回套接字对等的凭据。 SCM_CREDENTIALS
允许您传递您拥有权限的任何凭据。这是特别有价值的,因为内核将转换id,因此一个pid命名空间中的任务可以发送pid以在另一个命名空间中处理,并确保收到的pid将引用它预期的相同进程。
如果您需要对等人的凭据,请使用SO_PEERCRED
。 SCM_CREDENTIAL
是调用者指定的凭证(它必须拥有特权),不一定是对等人。