容器化Ubuntu环境下pam_sss生成的Kerberos票据复用问题及PAM/SSSD对接AD配置咨询
我之前在容器化环境里折腾SSSD和Kerberos票据复用的时候,跟你遇到过几乎一模一样的问题!结合你提到的SSSD编译参数和cifs-utils的代码逻辑,给你几个落地可行的解决方向:
解决pam_sss生成的Kerberos票据复用问题
1. 调整SSSD的票据缓存命名模板(最彻底的方案)
既然你提到SSSD的票据命名由编译时的--with-default-ccname-template参数决定,其实不需要重新编译源码,直接在SSSD配置里覆盖这个模板即可:
- 编辑
/etc/sssd/sssd.conf,找到[domain/你的AD域名]段(或者如果是全局生效,加在[pam]段),添加:
这里的krb5_ccname_template = FILE:/tmp/krb5cc_%U%U会自动替换为当前用户的UID,生成的票据路径就和kinit默认的/tmp/krb5cc_<uid>完全一致了。 - 重启SSSD服务让配置生效:
systemctl restart sssd - 验证:重新通过RStudio Server登录,检查
/tmp目录下的票据文件名是否已经变成标准格式。
2. 让pam_mount适配非标准票据路径
如果不想修改SSSD的默认配置,可以直接给pam_mount指定票据的具体路径:
- 编辑
/etc/security/pam_mount.conf.xml,在你定义的CIFS共享<volume>条目里,添加krb5cc参数:
注意这里的<volume user="*" fstype="cifs" server="your-ad-server" path="your-share" mountpoint="/mnt/ad-share" options="sec=krb5,krb5cc=/tmp/krb5cc_%U_xxxx" />%U可以直接用,大部分系统会自动替换为当前用户的UID;如果不行,也可以用%{USERUID}变量。 - 另外,也可以通过设置环境变量
KRB5CCNAME告诉cifs.upcall去哪里找票据:在pam_mount的配置里添加<environment>段,或者在RStudio的启动脚本里提前导出这个变量。
3. 配置MSSQL ODBC驱动复用票据
MSSQL ODBC驱动是通过读取KRB5CCNAME环境变量来定位Kerberos票据的,所以有两种设置方式:
- 全局生效:编辑
/etc/environment,添加一行:
这样所有用户登录后都会继承这个环境变量,ODBC驱动就能自动找到票据。KRB5CCNAME=FILE:/tmp/krb5cc_%U_xxxx - 仅针对RStudio生效:编辑
/etc/rstudio/rserver.conf,添加:
或者让用户在自己的server-set-env=KRB5CCNAME=FILE:/tmp/krb5cc_${USERUID}_xxxx.bashrc/.profile里手动导出这个变量,确保RStudio启动时能获取到。
额外验证步骤
- 登录RStudio后,执行
echo $KRB5CCNAME确认环境变量是否正确设置。 - 手动测试CIFS挂载:
mount -t cifs //your-ad-server/your-share /mnt/ad-share -o sec=krb5,krb5cc=/tmp/krb5cc_<你的UID>_xxxx,看是否能成功挂载。 - 测试ODBC连接:用
isql工具或者R的DBI包连接MSSQL,验证是否能自动使用Kerberos认证,无需手动输入密码。
内容的提问来源于stack exchange,提问作者g0pher
相关产品推荐
相关产品推荐

