docker-crontab在容器中無法正常使用?解決方法!

前言

有時候喜歡定時任務放到容器裡面,雖然不是很推薦,但是確實有人這麼做了,確實遇到問題了。


問題

啟動了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)

Advertisements

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

Advertisements

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.so

account include password-auth

#session required pam_loginuid.so #註釋此行

session include password-auth

auth include password-auth

Advertisements

你可能會喜歡