how can I change the permissions of a linux socket

2020-02-26 09:12发布

I have a program which creates a socket, and then I want to change the permissions of the socket file:

ret_val = chmod(filename, 0777);

, but it doesn't change, even though ret_val will be 0. If I try the same thing on a regular file, it works.

Any ideas?

P.S: I am running the program as root, so it has all the authority needed.

1条回答
啃猪蹄的小仙女
2楼-- · 2020-02-26 09:38

From man 7 unix:

In the Linux implementation, sockets which are visible in the file system honor the permissions of the directory they are in. Their owner, group and their permissions can be changed. Creation of a new socket will fail if the process does not have write and search (execute) permission on the directory the socket is created in. Connecting to the socket object requires read/write permission. This behavior differs from many BSD-derived systems which ignore permissions for UNIX domain sockets. Portable programs should not rely on this feature for security.

So if you want to control permissions on a socket, in order to be portable, you should instead control the permissions of the directory containing the socket.

查看更多
登录 后发表回答