how can I change the permissions of a linux socket file?
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.
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.
https://stackoverflow.com/a/42955529/1425297
"If you want your socket world-writeable, the easiest way would be for you app to call this before your socket is created and bound: umask(0);"
精彩评论