私たちのサーバーには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_t
とhttpd_sys_rw_content_t
の2つのラベルを何らかの形で組み合わせて/var/spool/cron directory
にすることはできますか?