[Dovecot] 2.2.4 - quota-status changing the user it is running as

Axel Luttgens AxelLuttgens at swing.be
Sun Jul 14 19:54:05 EEST 2013


Hello,

I'm currently experimenting with this quota-status service configuration:

	service quota-status {

		client_limit = 1
		executable = quota-status -p postfix
	
		# Let's make the default explicit.
		user = root

		unix_listener /var/spool/postfix/private/quota-policyd {

			user = postfix
		}
	}

The idea is to run the service as root during the preliminary tests (at worst, since the service is going to be used as a policy daemon by Postfix only, it shouldn't be very problematic to have it running as root anyway).

A user, with address john.doe at example.com and identified as john.doe, is known to be over-quota.
A "doveadm quota get" returns:

	$ sudo doveadm quota get -u john.doe
	Password:
	Quota name        Type    Value Limit                                     %
	Quota utilisateur STORAGE     5     5                                   100
	Quota utilisateur MESSAGE     9     -                                     0

and messages for that user are correctly rejected by lmtp:

	dovecot[4989]: lmtp(5069, john.doe at example.com): QWSWLgrP4lF7FAAA5Q0ykw: msgid=<20130714161643.9085DF176F2 at ALMba.local>: save failed to INBOX: Quota exceeded (mailbox for user is full)

Let's now simulate a connection from Postfix:

	$ sudo -u postfix telnet /_ROOT/var/spool/postfix/private/quota-policyd
	Trying /_ROOT/var/spool/postfix/private/quota-policyd...
	Connected to (null).
	Escape character is '^]'.

A look at the output of top (excerpt) confirms that quota-status is running as root:

	PID	COMMAND		UID
	5100	quota-status	0

Going on with our telnet session:

	recipient=john.doe at example.com
	size=10000

	action=OK


Hmmm... OK, this may be a config problem of mine which may require further investigation.

Anyway, looking at top's output:

	PID	COMMAND		UID
	5100	quota-status	999

it appears that quota-status is now running as the mail_uid/mail_gid user; the switch happens immediately after having entered the empty line in the telnet session.

Let's then try to go further within the telnet session:

	recipient=john.doe at example.com
	size=10000

	action=DEFER_IF_PERMIT Internal error occurred. Refer to server log for more information.

	^]
	telnet> quit
	Connection closed.

and a look at the log indeed reveals that quota-status doesn't have sufficient privileges anymore:

	dovecot[4989]: quota-status(john.doe at example.com): Error: user john.doe at example.com: Error reading configuration: net_connect_unix(/_ROOT/var/run/dovecot/config) failed: Permission denied

Is this the expected behavior, to have quota-status switch to another user?

TIA,
Axel



More information about the dovecot mailing list