LocalSocketGroup 是否可以成功设置为非默认值?错误:无法更改套接字所有权

LocalSocketGroup 是否可以成功设置为非默认值?错误:无法更改套接字所有权

我想以 root 用户身份正常启动 clamd,并分配本地套接字供 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 可以启动服务器,无需任何特殊技巧。

相关内容