x(执行)权限对 unix 套接字有什么作用?

Вла*_*тин 15 linux permissions unix-sockets

根据我的经验,如果没有设置 x 位,非特权用户无法访问他/她不拥有的 unix 套接字。这个位到底有什么作用?谢谢

ilk*_*chu 12

没什么,正如我所见。

Linux的手册页UNIX(7)称,该目录包含一个插座的权限通常适用(即你需要+x/foo连接/foo/sock,并+w/foo创建/foo/sock),并写入连接到插座本身的权限控制:

在 Linux 上,连接到流套接字对象需要对该套接字的写权限;向数据报套接字发送数据报同样需要对该套接字的写权限。

显然,其他一些系统的行为有所不同:

POSIX 没有声明权限对套接字文件的影响,并且在某些系统(例如,较旧的 BSD)上,套接字权限会被忽略。便携式程序不应依赖此功能来确保安全。

unix(4)在 FreeBSD 上描述了类似的要求。Linux 手册页没有说明某些系统上的套接字访问是否也会忽略目录权限。

x从套接字中删除位似乎会在尝试执行套接字时产生不同的错误,但这并没有太大的实际区别:

$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied
Run Code Online (Sandbox Code Playgroud)

(我也确实测试过,确实只有这w一点对于访问 Debian 的 Linux 4.9.0 上的套接字很重要。)

也许您指的套接字已从用户中删除了所有权限位,或者您指的x是目录中的位?

  • @AlexisWilke,因为有人问相应的执行权限位对其有何作用。 (4认同)