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