SCM_RIGHTS 发送具有较少权限的文件描述符

问题描述

有没有办法使用 unix 套接字将文件描述符发送到另一个进程,但权限比打开时少?我对以下场景感兴趣:

  1. P1:使用 RW 权限打开文件“x”并获取文件描述符 fd
  2. P1:发送 fd 到具有只读权限的进程 P2
  3. P2:使用 fd 从文件中读取内容
  4. P1:使用 fd 向文件写入内容

解决方法

无法更改现有文件描述符的访问模式,或将其发送到具有不同访问模式的另一个进程。您可以做的最接近的事情是打开 "/dev/fd/%d""/proc/self/fd/%d" 以获取指向与旧文件相同的文件的新文件描述符,您可以将其设为只读,然后发送该文件到 P2。