Назад | Перейти на главную страницу

Можно ли установить 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 должен работать так, как я ожидал? Или покажи мне ошибку моего пути ...

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

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

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