docker容器中crontab無法正常運(yùn)行解決方案
相信很多人看完docker容器, 需要加crontab, 加完卻發(fā)現(xiàn)不能執(zhí)行,心塞.....接著便開始各種折騰...
首先當(dāng)然是看日志了, 發(fā)現(xiàn)/var/log 下面沒有任何信息, 那是因?yàn)槟銢]有打開rsyslog.
# /etc/init.d/rsyslog start
繼續(xù)看日志
# tail /var/log/crond Dec 29 16:39:01 web01-50794 crond[2839]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:40:01 web01-50794 crond[2842]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:40:01 web01-50794 crond[2841]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:41:01 web01-50794 crond[2846]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) # tail /var/log/secure Dec 29 16:39:01 web01-50794 crond[2839]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:40:01 web01-50794 crond[2841]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:40:01 web01-50794 crond[2842]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:41:01 web01-50794 crond[2846]: pam_loginuid(crond:session): set_loginuid failed # tail /var/log/crond Dec 29 16:39:01 web01-50794 crond[2839]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:40:01 web01-50794 crond[2842]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:40:01 web01-50794 crond[2841]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) Dec 29 16:41:01 web01-50794 crond[2846]: (root) FAILED to open PAM security session (Cannot make/remove an entry for the specified session) # tail /var/log/secure Dec 29 16:39:01 web01-50794 crond[2839]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:40:01 web01-50794 crond[2841]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:40:01 web01-50794 crond[2842]: pam_loginuid(crond:session): set_loginuid failed Dec 29 16:41:01 web01-50794 crond[2846]: pam_loginuid(crond:session): set_loginuid failed
從crontab的日志可以看出是因?yàn)閜am的原因無法建立一個(gè)session連接.
接著看secure日志, 報(bào)出了set_loginuid failed , 無法獲取用戶uid.
分析:
為什么在docker里面無法獲取uid?pam_loginuid.so又代表什么?
pam_loginuid.so模塊: session類型:用來設(shè)置已通過認(rèn)證的進(jìn)程的uid.以使程序通過正常的審核(audit).而在docker里面,由于內(nèi)核能力機(jī)制的安全限制,docker啟動(dòng)的容器被嚴(yán)格要求只允許使用內(nèi)核的部分能力.其中包括,但不僅限于ssh、cron、syslogd、硬件管理工具模塊(例如負(fù)載模塊)、網(wǎng)絡(luò)配置,等屬于特權(quán)進(jìn)程.容器無法獲取這些特權(quán)進(jìn)程信息。導(dǎo)致crond服務(wù)啟動(dòng)時(shí)的set_loginuid failed. 而required機(jī)制要求必須所有的驗(yàn)證條件均要滿足,才能進(jìn)行后續(xù)操作,這就導(dǎo)致了crond的執(zhí)行失敗.
這里扯一下pam模塊鑒證級別,共有四種取值:分別為required、Requisite、sufficient或_optional.
required:表示該行以及所有涉及模塊的成功是用戶通過鑒別的必要條件。換句話說,只有當(dāng)對應(yīng)于應(yīng)用程序的所有帶 required標(biāo)記的模塊全部成功后,該程序才能通過鑒別。同時(shí),如果任何帶required標(biāo)記的模塊出現(xiàn)了錯(cuò)誤,PAM并不立刻將錯(cuò)誤消息返回給應(yīng)用程序,而是在所有模塊都調(diào)用完畢后才將錯(cuò)誤消息返回調(diào)用他的程序。 反正說白了,就是必須將所有的模塊都執(zhí)行一次,其中任何一個(gè)模塊驗(yàn)證出錯(cuò),驗(yàn)證都會(huì)繼續(xù)進(jìn)行,并在執(zhí)行完成之后才返回錯(cuò)誤信息。這樣做的目的就是不讓用戶知道自己被哪個(gè)模塊拒絕,通過一種隱蔽的方式來保護(hù)系統(tǒng)服務(wù)。就像設(shè)置防火墻規(guī)則的時(shí)候?qū)⒕芙^類的規(guī)則都設(shè)置為drop一樣,以致于用戶在訪問網(wǎng)絡(luò)不成功的時(shí)候無法準(zhǔn)確判斷到底是被拒絕還是目標(biāo)網(wǎng)絡(luò)不可達(dá)。
sufficient:表示該行以及所涉及模塊驗(yàn)證成功是用戶通過鑒別的充分條件。也就是說只要標(biāo)記為sufficient的模塊一旦驗(yàn)證成功,那么PAM便立即向應(yīng)用程序返回成功結(jié)果而不必嘗試任何其他模塊。即便后面的層疊模塊使用了requisite或者required控制標(biāo)志也是一樣。當(dāng)標(biāo)記為sufficient的模塊失敗時(shí),sufficient模塊會(huì)當(dāng)做 optional對待。因此擁有sufficient 標(biāo)志位的配置項(xiàng)在執(zhí)行驗(yàn)證出錯(cuò)的時(shí)候并不會(huì)導(dǎo)致整個(gè)驗(yàn)證失敗,但執(zhí)行驗(yàn)證成功之時(shí)則大門敞開。所以該控制位的使用務(wù)必慎重。
解決方案:
# cat /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 # cat /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
以上所述是小編給大家介紹的docker容器中crontab無法正常運(yùn)行解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
docker-compose管理容器network與ip問題
這篇文章主要介紹了docker-compose管理容器network與ip問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01如何設(shè)置docker開機(jī)自啟動(dòng),并設(shè)置容器自動(dòng)重啟
這篇文章主要介紹了如何設(shè)置docker開機(jī)自啟動(dòng),并設(shè)置容器自動(dòng)重啟問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Docker nacos集群部署的實(shí)現(xiàn)
本文將深入探討如何使用Docker來部署Nacos集群,從而實(shí)現(xiàn)服務(wù)的快速擴(kuò)展、高可用性和可維護(hù)性,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹
這篇文章主要介紹了docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹,link的原理就是在/etc/hosts里面添加了一個(gè)alias的名稱,本文通過案例分析給大家詳細(xì)講解,需要的朋友可以參考下2022-09-09docker registry安裝簡單命令實(shí)現(xiàn)
這篇文章主要介紹了docker registry安裝詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10如何解決docker-compose網(wǎng)段路由沖突,docker-compose自定義網(wǎng)絡(luò)
這篇文章主要介紹了如何解決docker-compose網(wǎng)段路由沖突,docker-compose自定義網(wǎng)絡(luò)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01