2017-03-23 58 views
1

服務器上有Fedora 25和apache。
我想這樣做,我們的網站上的PHP腳本可以更改crontab設置。Selinux從php中阻止crontab命令

我創建了下面的測試PHP腳本:

<?php 
system("echo '*/2 * * * * date > /var/www/logs/testlog.txt' | crontab - 2>&1"); 

但沒有奏效。我得到的消息:

/var/spool/cron/#tmp.mh203-95.XXXXG0KrFF: Permission denied

我看着輸出sealert -a /var/log/audit/audit.log 發現:

SELinux is preventing crontab from write access on the directory /var/spool/cron.

好。聽起來像apache不允許對/var/spool/cron的寫入訪問,因爲該目錄沒有httpd_sys_rw_content_t label。 所以我執行命令: chcon -v -R -t httpd_sys_rw_content_t /var/spool/cron

我的PHP腳本開始工作。 crontab -l命令提供正常輸出。
但出現新問題。 :(這個cron任務未執行

在/ var /日誌/ cron的我看到的錯誤:

Mar 23 18:05:01 mh203-95 crond[1653]: (apache) Unauthorized SELinux context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 file_context=system_u:object_r:httpd_sys_rw_content_t:s0 (/var/spool/cron/apache) 
Mar 23 18:05:01 mh203-95 crond[1653]: (apache) FAILED (loading cron table) 

經過研究大量的時間......我發現,在/ var /卷軸/ cron的必須有user_cron_spool_t標籤,以便我執行:。chcon -v -R -t user_cron_spool_t /var/spool/cron

開始工作這個cron任務,但我的PHP腳本沒有像一開始重新工作,同樣的問題

sealert建議喜歡的命令。 :
ausearch -c'crontab'--raw | audit2allow -M my-crontab
semodule -X 300 -i my-crontab.pp
但它沒有幫助。

我錯過了什麼? 如何解決問題? 我可以以某種方式將兩個標籤user_cron_spool_thttpd_sys_rw_content_t合併爲/var/spool/cron directory

回答

0

我已經解決了這個問題。

原因在於:sealert在所有建議的命令中都會生成相同的政治名稱my-crontab。新政策覆蓋了舊的政策。
這只是稍微改變這個名字。

所以我執行:

ausearch -c'crontab'--raw | audit2allow -M my-crontab
semodule -X 300 -i my-crontab.pp

ausearch -c'crontab'--raw | audit2allow -M my-crontab2
semodule -X 300 -i my-crontab2.pp

ausearch -c'crontab'--raw | audit2allow -M my-crontab3
semodule -X 300 -i my-crontab3.pp
...

每ausearch之前...我執行:
回聲-n 「」> /var/log/audit/audit.log
我的PHP腳本。
sealert -a /var/log/audit/audit.log