我想通常以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),所以在阅读文档和编译testing代码后,我开始怀疑这个发行版的库问题。 search揭示2010年遇到这种错误的人,但没有明确的解决scheme。
任何人都可以证实,克拉马夫应该按我期望的方式工作吗? 或者告诉我我的方式的错误…
我现在拥有完全符合我所需的configuration。 行为是devise的; 为什么,我不确定。 无论如何,启用“AllowSupplementaryGroups”选项解决了我的问题:
$ cat /usr/local/etc/clamd.conf LocalSocket /tmp/clamav/clamd.socket LocalSocketGroup qscand LocalSocketMode 660 User clamav AllowSupplementaryGroups yes
现在root可以启动服务器,没有任何特殊的技巧。