![LocalSocketGroup 是否可以成功设置为非默认值?错误:无法更改套接字所有权](https://linux22.com/image/602371/LocalSocketGroup%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%88%90%E5%8A%9F%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%9D%9E%E9%BB%98%E8%AE%A4%E5%80%BC%EF%BC%9F%E9%94%99%E8%AF%AF%EF%BC%9A%E6%97%A0%E6%B3%95%E6%9B%B4%E6%94%B9%E5%A5%97%E6%8E%A5%E5%AD%97%E6%89%80%E6%9C%89%E6%9D%83.png)
我想以 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 可以启动服务器,无需任何特殊技巧。