哪些系统不支持套接字读/写权限?

Ali*_*cia 6 permissions socket portability

man 7 unix 在 Linux 上说:

在 Linux 实现中,文件系统中可见的套接字尊重它们所在目录的权限。它们的所有者、组和权限可以更改。如果进程在创建套接字的目录上没有写入和搜索(执行)权限,则创建新套接字将失败。 连接到套接字对象需要读/写权限。这种行为不同于许多 BSD 派生系统,后者忽略 UNIX 域套接字的权限。便携式程序不应依赖此功能来确保安全。

哪些系统会忽略 UNIX 域套接字的权限?

Nic*_*son 5

例如,HP-UX 会忽略套接字文件的权限。

请注意,文档正在讨论套接字文件的权限。所有实现都尊重父目录的权限 - 可移植程序必须在私有目录中创建套接字,而不是依赖于umask在公共目录中创建具有限制性权限(通过 )的套接字。


Sté*_*las 1

鉴于此,不确定他们的意思

  • 套接字起源于 BSD 和 4.3BSD,文档明确指定connect().
  • 同样在 Linux 上,不需要读取权限,只需要写入权限。

如果套接字文件不可写,POSIX 似乎并不要求失败,但明确允许它(如果指定的套接字不可写,可能会失败 [...])。这个“可能”表明可能确实存在不遵守权限的系统,但我怀疑它们是否是 BSD 派生的。connect()connect

  • 另外,在查看了 http://minnie.tuhs.org/cgi-bin/utree.pl?file=4.2BSD/usr/src/sys/sys/uipc_usrreq.c 上的一些旧代码后,看起来 4.2BSD 有一个未经许可检查即可连接。与在“unp_connect”中执行“access(ip, IWRITE)”的 4.3BSD 代码进行比较。因此,也许“许多 BSD 派生系统”实际上意味着“少数不幸的 4.2BSD 幸存者”。即使在 4.2BSD 中,目录权限当然也会由“namei”检查。 (4认同)
  • 我注意到 POSIX 规范将其放在“可能失败”下,而不是“将失败”下,这表明其意图是允许实现以任何一种方式进行。奇怪的是,“目录搜索权限”部分也在那里,我无法想象这些权限不会被检查。 (2认同)