Доменные сокеты UNIX недоступны для разных пользователей? - PullRequest
6 голосов
/ 11 августа 2010

Я запускаю клиент-серверное приложение в Red Hat Enterprise, используя ZMQ для передачи сообщений. Сокет IPC, используемый для связи клиента с сервером, реализован с использованием сокета домена Unix.

Если пользователь A запускает процесс сервера, кажется, что только клиенты, запущенные пользователем A, могут подключаться и взаимодействовать через этот сокет. Наш проект требует, чтобы клиенты могли работать с разными пользователями, поэтому это главный камень преткновения.

Сокет расположен в / tmp / ipc_assoc с разрешениями по умолчанию 755. chmod 777 не решает проблему. chown userB позволяет пользователю B получить доступ к сокету, но пользователь A теряет доступ. Даже root не может получить доступ к сокету. На компьютере не используются ACL или SeLinux.

Это типичное поведение для доменных сокетов Unix? Кто-нибудь разобрался, как обойти это?

Ответы [ 4 ]

4 голосов
/ 12 декабря 2012

chmod (s.sun_path, 0777); после прослушивания сокета.

domain = AF_UNIX;
name = servname;
port = -1;

n = MakeLocalSocket(s);
if (n == 0) {
    fatal("can't create socket");
}

unlink(s.sun_path);

if (bind(fd, & s, n) < 0) {
    fatal("can't bind socket");
}

if (listen(fd, 5) != 0) {
    fatal("can't listen to socket");
}

/* UNIX domain sockets need to be mode 777 on 4.3 */
chmod(s.sun_path, 0777);
2 голосов
/ 02 марта 2013

Временно измените umask:

mode_t umask_ = umask(0000); /* let the socket be mode 0777 so that other users can connect */
int err = bind(fd, (struct sockaddr *)&unix_bind_addr, sizeof(unix_bind_addr));
umask(umask_); /* restore old umask (0777 is a pretty bad choice for normal stuff) */
if (err) {
  /* handle bind error here */
}

Конечно, это плохая идея, если вы используете потоки.

1 голос
/ 11 августа 2010

С некоторой помощью из списка рассылки ZMQ я обошел стороной.Это некрасиво, но, похоже, работает согласованно.

Мне пришлось создать подкаталог в / tmp и chmod 777 it.Сервер теперь создает сокет в этой новой папке.Это также программно chmod 777 розетка.Теперь, пока сервер работает от имени пользователя root, любой пользователь может запускать клиент и общаться с сервером.

Я не знаю, почему сокет домена UNIX ведет себя так, но это, безусловно, раздражает.1007 *

0 голосов
/ 11 августа 2010

Вы пытались добавить UserA и UserB в общую группу пользователей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...