根据我的经验,如果没有设置 x 位,非特权用户无法访问他/她不拥有的 unix 套接字。这一点到底有什么作用?
答案1
据我所知,什么也没有。
LinuxUNIX 手册页(7)表示包含套接字的目录的权限通常适用(即您需要+x
on/foo
来连接/foo/sock
,并+w
on/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
(我也测试过,确实只有这w
一点对于访问 Debian 的 Linux 4.9.0 上的套接字很重要。)
也许您指的套接字已从用户中删除了所有权限位,或者您指的是x
目录上的位?