[Dovecot] Automatically Cleaning Kerberos Credential Cache Files

Maura Dailey maura at eclipse.ncsc.mil
Tue Dec 11 02:11:10 EET 2012


On 12/10/2012 05:31 PM, Ben Morrow wrote:
> At  3PM -0500 on 10/12/12 you (Maura Dailey) wrote:
>> I'm in a situation here at work where I'm trying to support a mixed
>> network of OS X and RHEL desktop machines with a Postfix/Dovecot
>> combination.
>>     - user account information is stored in LDAP
>>     - user credentials are in MIT Kerberos
>>     - server is running RHEL 6/Dovecot 2.0.9/Postfix 2.6.6
>>
>> I am currently using the PAM passdb module to authenticate my users (I
>> began to have trouble with using GSSAPI directly). After I implemented
>> it, a few weeks later, I noticed that some users were no longer getting
>> their mail if they hadn't logged in during the past day. Postfix's mailq
>> showed that hundreds of messages were backing up in the queue. I
>> eventually tracked it down to leftover Kerberos credential cache files
>> (/tmp/krb5cc_????) sitting in /tmp on the mail server. The presence of
>> expired credential files was preventing Postfix from delivering mail to
>> those users' mail spools. If I delete the credential files manually,
>> Postfix immediately delivers the queued emails.
> This is rather odd. Is krb5-authenticated NFS involved here, or does
> Postfix's delivery make any other use of Kerberos? The only other thing
> I can think of is that so many expired ccaches are accumulating that the
> user goes over their inode quota.

Each user has one credential cache file in /tmp on the mail server after 
logging into Dovecot. We aren't using randomized names, so everything is 
in the standard format /tmp/krb5cc_uid. We do use KRB5 authenticated 
(and encrypted) NFS, but we don't deliver mail to home directories. 
Since all users are "real" users, and our office size is small, everyone 
has a mail spool directory on the mail server.

Postfix is configured to use Dovecot for Kerberos. The relevant lines in 
its /etc/postfix/main.cf are as follows:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, 
permit_sasl_authenticated, reject_unauth_destination
smtpd_client_restrictions = permit_mynetworks, 
permit_sasl_authenticated, reject
smtpd_sasl_security_options = noanonymous

>> Currently, I have a cron job deleting the files manually every night.
>> Obviously, this is a cruddy solution.
> Well, I don't know about that: obviously, it would be a good idea to
> work out what's going on here, in case it causes anything else to go
> wrong, but a cronjob clearing out /tmp is a good idea in any case. 
Fair enough. And of course, I get a cache file every time I use sudo or 
log in through a GUI. Those aren't cleaned up either! Maybe I should be 
deleting credential cache files on all the machines every night. Those 
cache files have never given me a problem, though.

>> I have Dovecot configured on a
>> RHEL 6 box. The Pam stack on a RHEL 6 machine uses sssd (pam_sss.so) for
>> authentication with Kerberos, not pam_krb5.so. I'm trying to track down
>> which piece of the puzzle is responsible for cleaning up leftover
>> credential caches. Is there a configuration option I can pass to
>> Dovecot's passdb directly to clean up these cache files?
> There are two relevant Dovecot settings: passing setcred=yes to the pam
> passdb will make Dovecot call pam_setcred, and passing session=yes will
> make it open and immediately close a PAM session. (Probably it ought to
> wait until the IMAP user logs out to close the session, but currently it
> can't do that because of the way the passdb lookups are done.) Changing
> either of these may have an effect, depending on when exactly your PAM
> module creates and destroys ccaches. 
I've tried session=yes by itself, but I don't think I've tried it with 
setcred=yes. I'll throw it in there and give it a try after I send this 
email.
>> Do others
>> generally have more success using a custom PAM stack with pam_krb5.so
>> instead of pam_sss.so?
> Well, I don't use RH (I use FreeBSD), but I use and would recommend Russ
> Allbery's pam_krb5.so, which may or may not be the same as the normal
> pam_krb5.so provided by your system. It has options to control whether
> and where ccaches are created; assuming Dovecot doesn't need krb5 creds
> (say, for NFS), you would probably be better off telling it not to
> create a permanent ccache at all.
>
> http://www.eyrie.org/~eagle/software/pam-krb5/
I haven't had to configure pam_krb5.so directly before (we use the Red 
Hat/Fedora configured default, pam_sss.so, which claims to be a one stop 
shop for LDAP/Kerberos/NIS,etc.), but it does seem to have more options. 
We certainly don't need credential caches to stick around for email 
users. All the mail spools are stored on locally mounted storage on the 
mail server.

>> Poring over sssd's configuration options didn't
>> reveal anything useful. I'm still not sure why Postfix even cares if
>> there are expired credential cache files in /tmp at all.
>>
>> I'm back to trying GSSAPI directly again as well in the meantime on a
>> few test clients. When I used that in the past, users were getting
>> issued duplicate Kerberos tickets and users were forced to log into the
>> mail server directly using SSH after a day in order to get their mail to
>> work (seemingly a related issue). If I get those same errors again, I'll
>> start another thread.
> This certainly does all sound related. What are the ccache files called:
> are they just /tmp/krb5cc_UID or is there a random portion as well? Are
> they being created with the correct permissions, and are there any
> security policies (SELinux or ACLs of some kind) set up which might
> interfere with their creation or destruction?
No random portion (the only application we have configured with random 
ccache names is SSH), just the usual /tmp/krb5cc_uid. Permissions appear 
correct, they belong to the appropriate user and group accounts. The 
SELinux permissions are set to: system_u:object_r:user_tmp_t:s0. This is 
different from the machine's credential cache 
(system_u:object_r:gssd_tmp_t:s0), but I've disabled and re-enabled 
SELinux during different parts of my testing and didn't notice any errors.

Using GSSAPI directly doesn't create any cached credential files on the 
server. However, I just verified that I'm still sporadically getting the 
duplicate tickets (two lines for imap/hostname.server.com at SERVER.COM, 
with identical expiration dates). It comes and goes. I have a few users 
testing it for me, and they'll let me know if their logins break 
tomorrow like they have in the past once the normal log in period 
elapses. Since the "fix" for that problem is to log into the mail 
server, I have a hard time testing for the problem myself (being logged 
into the mail server nearly continuously just now).

> What happens if you log in as an ordinary user (preferably using the
> same PAM stack as Dovecot uses), use klist to find the ccache name and
> 'ls -i' to find its inode number, then manually kinit again? Does the
> kinit succeed, and does the new ccache have a different inode number
> from before? Does the ccache file get removed when you log out?
I've noticed that the ccache files for regular users do not get deleted 
when they log out. On another user's workstation, I found a ccache file 
for my account from a week ago (my current session was using a randomly 
generated SSH ccache file). I ran a command with sudo to force it to 
reauthenticate with pam_sss, and the timestamp on the ccache file was 
updated and the inode changed. My best guess is that pam_sss.so just 
doesn't do ccache cleanup.

> Ben
>

Thanks for taking a look, I appreciate all the suggestions. This 
problem's been driving me up a wall for weeks now. I only just managed 
to narrow down the cause in the last few days. If I can't get a fix 
working in Dovecot, I'll try tackling it from a different perspective. I 
understand why Dovecot might not be cleaning up credential files 
(especially if it's just calling PAM normally), but I definitely do not 
understand why Postfix is behaving the way it does. If I can just get 
GSSAPI to work, I could probably bypass the problem as well.

- Maura Dailey
maura at eclipse.ncsc.mil




More information about the dovecot mailing list