Может ли LocalSocketGroup быть успешно установлен не по умолчанию? Ошибка: не удалось изменить владельца сокета

Я хочу нормально запустить clamd от имени пользователя root и назначить локальный сокет для использования Qmail-Scanner (только). clamd работает как пользователь / группа clamav, qmail-scanner-queue - как qscand.

$ id -nG clamav
clamav qscand
$ id -nG qscand
qscand

clamd.conf следующим образом:

$ cat /usr/local/etc/clamd.conf
LocalSocket /tmp/clamav/clamd.socket
LocalSocketGroup qscand
LocalSocketMode 660
User clamav

Когда я пытаюсь запустить clamd, через несколько секунд я получаю:

# ls -l /tmp/clamav
total 0
# clamd
ERROR: Failed to change socket ownership to group qscand
# ls -l /tmp/clamav
total 0
s--------- 1 clamav clamav 0 2012-12-11 15:57 clamd.socket=
# sudo -u clamav clamd
# ls -l /tmp/clamav
total 0
srw-rw---- 1 clamav qscand 0 2012-12-11 15:57 clamd.socket=

Видите забавный трюк, в который я должен играть?

Если я запускаю его с правами root, после удаления привилегий программа не узнает, что ее эффективный пользователь является членом нужной группы. Но если я запускаю его как пользователь clamav, это работает!

Я использую старый Linux (Slackware 11.0.0), поэтому после прочтения документации и компиляции тестового кода я начинаю подозревать проблему с библиотекой в ​​этом дистрибутиве. Поиски выявили людей, столкнувшихся с этой ошибкой в ​​2010 году, но не нашли окончательных решений.

Кто-нибудь может подтвердить, что clamav должен работать так, как я ожидаю? Или покажи мне ошибку моих путей...

1 ответ

Теперь у меня есть конфигурация именно так, как я хочу. Поведение является дизайном; почему, я не уверен. В любом случае включение опции "AllowSupplementaryGroups" решило мою проблему:

$ cat /usr/local/etc/clamd.conf
LocalSocket /tmp/clamav/clamd.socket
LocalSocketGroup qscand
LocalSocketMode 660
User clamav
AllowSupplementaryGroups yes

Теперь root может запустить сервер без каких-либо специальных уловок.

Другие вопросы по тегам