Может ли 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 может запустить сервер без каких-либо специальных уловок.