Vi.*_*Vi. 9 linux credentials unix-socket
SO_PEERCRED是获取连接的AF_UNIX流套接字的pid/uid/gid的简单方法,SCM_CREDENTIALS或多或少相同,但更复杂(各种辅助消息).指向两种方式的示例链接.
我该怎么用?
如果我理解正确,两者之间会有细微差别.SO_PEERCRED检索对等进程的凭证,而不需要来自对等进程的任何交互.相反,SCM_CREDENTIALS是一种发送/接收对等进程凭证的机制,然后由内核检查.当进程以UID 0运行时,这种细微差别可能很重要.SCM_CREDENTIALS允许以UID 0运行的进程声明自己的特权较低(例如,UID 50),而这是不可能的SO_PEERCRED.
往上看.我想SCM_CREDENTIALS鼓励使用,SO_PEERCRED只支持兼容性.
dbus守护进程似乎使用SO_PEERCRED和getpeereid().我认为最好复制他们的代码以便获取凭据.
小智 5
SO_PEERCRED返回套接字对等方的凭据。SCM_CREDENTIALS允许您传递您有权限的任何凭据。这是特别有价值的,因为内核将转换 ids,因此一个 pid 命名空间中的任务可以发送 pid 到另一个命名空间中的进程,并确保收到的 pid 将引用它想要的同一进程。
如果您想要同行的凭据,请使用SO_PEERCRED. SCM_CREDENTIAL是调用者指定的凭据(它必须具有特权),不一定是对等方的凭据。