Sven,

I think your points in reply to Bernd are spot-on.  I really don't have much to 
add except to say that it's fairly common for Perl daemons to start as root and 
then daemonize under a user account, at least from what I've seen.  The issue 
with SA using  root/.spamassassin/user_prefs at startup is a minor 
inconvenience at worst, but we're looking into eliminating that with the next 
release.  

To use site-wide Bayes/whitelist you absolutely need to put the DBs in a shared 
location (this is not specific to spampd).

Cheers,
-Max



At 12/22/2005 07:03 PM +0100, Sven Mueller wrote:
>Bernd Zeimetz wrote on 20/12/2005 05:07:
>
>Maxim: I would be interested to hear any idea you might have about these
>issues.
>
>> 2. spamassassin/autolearn uses /root/.spamassassin
>> 
>> After checking the output of spampd in the emails I've seen an
>> autolearn=failed entry from spamassassin. Starting spampd in debugging
>> mode showed, that spampd's spammassassin tries to put it's stuff into
>> /root/.spamassassin/:
>
>> [28638] dbg: config: using "/root/.spamassassin/user_prefs" for user
>> prefs file
>
>If you want to use auto-learn (or auto-whitelist for that matter), you
>will have to configure spamassassin in a way that it uses some other
>location. However, since this has to be configured in the spamassassin
>configs, there is nothing I could do about this.
>
>Regarding the matter of dropping privileges:
>The way spampd works, it first reads the spamassassin configs, then uses
>libnet-server-perl (in its Net::Server::PreForkSimple incarnation) to
>start a server process (which drops privileges after binding to the
>configured port). There are basically two options:
>1) Only read spamassassin configs after forking
>   This looses most of the performance advantage of running a server
>   process in the first place. And it would require a rewrite of major
>   parts of spampd.
>2) Drop privileges outside Net::Server::PreForkSimple.
>   This looses the ability to bind to low ports (<1024), which is a
>   feature many people use (to have spampd run in front of their MTA).
>Both options are unusable in my opinion. The first is simple to big of a
>task for this little benefit, the second is a no-no because it would
>break existing (and working) installations.
>
>Also, this certainly isn't any security issue, since the accesses you
>talk about are done before any user generated input is accepted (i.e.
>before spampd binds to a port) or are tried after privileges have been
>dropped.
>
>> This works while starting the daemon - seems it's still running as root
>> at this time, but as soon as it has given up root rights and it's
>> running as spampd it should be unable to access /root/.spamassassin, at
>> least on a well configured system.
>
>As said, these accesses are done by spamassassin code (and are to be
>configured/disabled in the spamassassin config). For centralized usage
>of spamassasssin (like with spampd), I would suggest configuring
>spamassassin to use an SQL database (how to do this is documented in
>/usr/share/docs/spamassassin/sql) for bayes and autowhitelist data.
>
>> This bug is a bit critical imho, such a daemon should not even try to
>> access stuff in /root.
>
>While this is probably true, there is nothing I could do about that as
>this is what spamassassin (not spampd) has been configured to do.
>
>> Unfortunately I can't come up with a path for this - my knowledge of
>> perl is much much too minimal.
>
>Well, I would certainly love to see a clean solution for this, but I
>can't come up with one.
>
>cu,
>sven
>
>PS: Maxim: libnet-server-perl aka Net::Server changed it's log()
>behaviour in 0.89 to "fix" the security issues this function had. Their
>fix is to not allow format strings anymore as the second parameter. I'm
>working on a fix for this which remains compatible (and secure) with
>earlier versions of Net::Server. I will let you know as soon as I worked
>something out. 



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to