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


11

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


是套接字或目录上的权限吗?
Rui F Ribeiro

在插座上。目录的模式为0755,因此用户可以观察内容。套接字的模式为0644,因此从逻辑上讲,用户(属于“其他”,因为他/她不拥有套接字,而属于组拥有套接字)则应该能够写入套接字。但是,除非将模式0777应用于套接字,否则用户会获得拒绝权限消息。
ВладимирТюхтин

2
@ВладимирТюхтин 0644表示对组成员和“其他”成员具有读权限,因此只有所有者才能访问套接字(因为写权限对其进行了控制)。0666,或者0222不需要阅读权限,就足以将访问权限授予所有人。但是,与其向所有人授予权限,不如考虑使用组来允许访问。
ilkkachu

Answers:


9

没什么,正如我所看到的。

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

(我还测试了确实只有一w点点似乎对访问Debian的Linux 4.9.0上的套接字很重要。)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.