前言
有时候喜欢定时任务放到容器里面,虽然不是很推荐,但是确实有人这么做了,确实遇到问题了。
问题
启动了crond服务,然后添加任务发现没有执行,只好启动rsyslog来通过系统日志查看。
0x00 查看crond的日志
tail /var/log/crond
Jan 11 16:39:01 test-docker crond[2839]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session)
Jan 11 16:40:01 test-docker crond[2842]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session)
Jan 11 16:40:01 test-docker crond[2841]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session)
Jan 11 16:41:01 test-docker crond[2846]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session)
0x01 查看secure会话相关的日志
tail /var/log/secure
Jan 11 16:39:01 test-docker crond[2839]: pam_loginuid(crond:session): set_loginuid failed
Jan 11 16:40:01 test-docker crond[2841]: pam_loginuid(crond:session): set_loginuid failed
Jan 11 16:40:01 test-docker crond[2842]: pam_loginuid(crond:session): set_loginuid failed
Jan 11 16:41:01 test-docker crond[2846]: pam_loginuid(crond:session): set_loginuid failed
0x02 从crontab的日志可以看到由于pam验证不通过导致无法建立session;通过查看secure日志, 报出了set_loginuid failed , 无法获取用户uid。
查资料
pam_loginuid.so模块: session类型:用来设置已通过认证的进程的uid.以使程序通过正常的审核(audit)。
而在docker里面,由于内核能力机制的安全限制,docker启动的容器被严格要求只允许使用内核的部分能力。导致crond服务启动时的set_loginuid failed,而required机制要求必须所有的验证条件均要满足,程序才会执行操作。
解决方法
居然没法验证就不要验证了,在配置文件里面直接修改就可以了。
vim /etc/pam.d/crond
account required pam_access.soaccount include password-auth#session required pam_loginuid.so #注释此行session include password-authauth include password-auth
举报/反馈

linux运维菜

648获赞 9652粉丝
运维一点点积累、分享
关注
0
0
收藏
分享