特定のグループに限定されたUnixドメインソケットを作成したいと思います。 chown
が、その後グループを設定する唯一の方法であると思われるので、ソケットhas no effectにしかしUnixドメインソケットのグループ所有権を安全に設定する方法は?
// Set the "address" (ie filesystem path)
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, "./my.sock");
int fd = socket(AF_UNIX, SOCK_DGRAM, 0); // create the socket
// Set the group owner and permissions
fchmod(fd, 0770); // This seems to succeed
fchown(fd, -1, wanted_group_id); // Silently fails
// Create the filesystem entry
bind(fd, (struct sockaddr *)&addr, sizeof(addr));
、fchown
:だから私は、理想的にやるだろうがあるようなもの(エラーチェックを無視して)。私は、ソケットにアクセスすることを許されるべきでないプロセスにソケットを一時的にアクセスさせないようにしたい。
私が持っている最高のアイデアは、次のとおりです。
int fd = socket(...);
fchmod(fd, 0700); // Remove group permissions
bind(fd, ...); // Create fs entry
chown("./my.sock", -1, wanted_group_id); // set the correct group owner
fchmod(fd, 0770); // And restore group permissions
は確かにこれはUnixソケットをやりたいための一般的なもので、これを達成するための標準的な方法がありますが、私は明確な答えを発見していません。
私は本当にLinuxに興味がありますが、POSIXだけに依存している点については特典があります。
最初に目的のグループで作成されるように、プログラムがソケットのSet-GIDを目的のグループに作成するようにすることができます。 –
私はそれが役立つとは思わない。私のプログラムはすでにそのグループを利用可能にしており、異なるグループの複数のソケットを作成したいと思うでしょう。 –
同様の考え方:少なくともlinuxでは、あなたのプログラムに 'CAP_SETGID'機能を与えて、一時的に望むどんなグループIDでも使えます。 –