I just found out that p11_child does benefit from the caching mechanism by OpenSC.
The difference is significant 9 secs vs 0.9 secs ! ( factor 10 )
# CACHE: DISABLED
$ cat /etc/opensc.conf | grep use_file_caching
use_file_caching = no;
$ time pkcs11-tool --list-objects
real 0m8.982s
user 0m0.030s
sys 0m0.033s
# CACHE: ENABLED
$ cat /etc/opensc.conf | grep use_file_caching
use_file_caching = public; <---- default
$ time pkcs11-tool --list-objects
real 0m0.963s
user 0m0.017s
sys 0m0.011s
I'm using a wrapper to benchmark p11_child:
$ cat /usr/libexec/sssd/p11_child
#!/usr/bin/bash
LOG="/tmp/p11_child.log"
#export XDG_CACHE_HOME="/var/tmp/xdg-cache/root_p11/"
#mkdir -p $XDG_CACHE_HOME
id >> $LOG
env >> $LOG
echo "HOME: $HOME" >>$LOG
{ time /usr/libexec/sssd/p11_child.bin "$@" ; } 2>>$LOG
When testing p11_child:
$pamtester -v gdm-smartcard <mylogin> authenticate
$ tail -f /tmp/p11_child.log
real 0m8.820s
user 0m0.008s
sys 0m0.012s
This take 8.8 secs for p11_child, and thus not using caching (0.8 secs)
I'm missing an option in /etc/sssd.conf, for example:
p11_child_xdg_cache_home=/var/cache/p11_child
which sets the environment variable XDG_CACHE_HOME before calling pkcs11-opensc.so.
In the example wrapper above I would then get the 0.8 secs.
Note:
Setting a global cache dir according to man opensc.conf :
$ cat /etc/opensc.conf | grep file_cache_dir
file_cache_dir = "/var/cache/opensc";
works, but is a global option, I would prefer a seperate option for p11_child.
As a result, currently, at least on RedHat, the default is to not use caching, and thus is performing poorly.
Caching in OpenSC is configured globally but does not work in p11_child, because neither $HOME nor $XDG_CACHE_HOME ist set in p11_child. Setting file_cache_dir would work, but needs a additional SELinux rule.
I would prefer a default in sssd, including a shipped SELinux rule, for p11_child which runs in context=system_u:system_r:sssd_t:s0.
I just found out that p11_child does benefit from the caching mechanism by OpenSC.
The difference is significant 9 secs vs 0.9 secs ! ( factor 10 )
I'm using a wrapper to benchmark p11_child:
When testing p11_child:
This take 8.8 secs for p11_child, and thus not using caching (0.8 secs)
I'm missing an option in /etc/sssd.conf, for example:
p11_child_xdg_cache_home=/var/cache/p11_child
which sets the environment variable XDG_CACHE_HOME before calling pkcs11-opensc.so.
In the example wrapper above I would then get the 0.8 secs.
Note:
Setting a global cache dir according to man opensc.conf :
works, but is a global option, I would prefer a seperate option for p11_child.
As a result, currently, at least on RedHat, the default is to not use caching, and thus is performing poorly.
Caching in OpenSC is configured globally but does not work in p11_child, because neither $HOME nor $XDG_CACHE_HOME ist set in p11_child. Setting file_cache_dir would work, but needs a additional SELinux rule.
I would prefer a default in sssd, including a shipped SELinux rule, for p11_child which runs in context=system_u:system_r:sssd_t:s0.