2017-03-23 19 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.

オーケー、私はメッセージが表示されました。そのディレクトリにはhttpd_sys_rw_content_t labelがないため、Apacheのような書き込みアクセスは/var/spool/cronに許可されていません。 私はコマンドを実行しました: chcon -v -R -t httpd_sys_rw_content_t /var/spool/cron

私のPHPスクリプトが動作し始めました。 crontab -lコマンドは通常の出力を出しました。
しかし、新しい問題が発生しました。 :(cronタスクが実行されなかった私は、エラーを見ては/ var/log /の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 /スプールことがわかりました。。chcon -v -R -t user_cron_spool_t /var/spool/cron作品に始め

cronタスクをしかし、私のPHPスクリプトは、冒頭のように、再び同じ問題が動作しませんでした

sealertは次のようにコマンドを提案:cronがだから私は実行user_cron_spool_tラベルを持っている必要があります。。。 :
ausearch -c 'crontab' --raw | audit2allow -M my-crontab
semodule -X 300 -i my-crontab.pp
しかし、それは役に立たなかった。

私には何が欠けていますか? どのように問題を解決するには? user_cron_spool_thttpd_sys_rw_content_tの2つのラベルを何らかの形で組み合わせて/var/spool/cron directoryにすることはできますか?

答えて

0

私はこの問題を解決しました。

この理由は:sealertはすべての推奨コマンドで同じ政治的名前my-crontabを生成します。新しい政治は古いものを上書きした。
この名前を少し変更するだけです。

だから私は、実行:--raw

ausearch -c 'のcrontab' |を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

関連する問題