2017-03-23 5 views
1

Es gibt Fedora 25 und Apache auf unserem Server.
Ich möchte, dass das PHP-Skript auf unserer Website crontab Einstellungen ändern kann.Selinux blockiert den Befehl crontab von PHP

Ich habe den folgenden Test PHP-Skript:

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

Aber es hat nicht funktioniert. Ich habe die Nachricht:

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

ich am Ausgang sah von sealert -a /var/log/audit/audit.log und gefunden:

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

Okay. Es klingt wie Apache ist der Schreibzugriff auf /var/spool/cron nicht erlaubt, da dieses Verzeichnis nicht die httpd_sys_rw_content_t label hat. Also habe ich den Befehl ausgeführt: chcon -v -R -t httpd_sys_rw_content_t /var/spool/cron

Mein PHP-Skript begann zu arbeiten. Der Befehl crontab -l gab eine normale Ausgabe.
Aber das neue Problem erschien. :(Die cron-Aufgaben nicht ausgeführt wurde

im Verzeichnis/var/log/cron ich den Fehler gesehen.

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) 

Nach vielen Zeit der Forschung ... fand ich, dass das Verzeichnis/var/spool/cron muss das user_cron_spool_t Label so ausgeführt. I:. chcon -v -R -t user_cron_spool_t /var/spool/cron

die cron Aufgaben arbeiten begonnen Aber mein pHP-Skript hat nicht wieder das gleiche Problem wie am Anfang

sealert vorgeschlagen, die Befehle wie... :
ausearch -c 'crontab' - Zeichnung | audit2allow -M my-crontab
semodul -X 300 -i my-crontab.pp
Aber es hat nicht geholfen.

Was fehlt mir? Wie löst man das Problem? Kann ich die beiden Labels user_cron_spool_t und httpd_sys_rw_content_t für /var/spool/cron directory kombinieren?

Antwort

0

Ich hatte das Problem gelöst.

Der Grund lag darin: sealert generiert in allen vorgeschlagenen Befehlen den gleichen politischen Namen my-crontab. Die neue Politik hat das Alte überschrieben.
Es ist nur notwendig, diesen Namen leicht zu ändern.

Also ich ausgeführt:

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
semodul -X 300 -i my-crontab3.pp
...

Vor jedem ausearch ... ich ausgeführt:
echo -n ""> /var/log/audit/audit.log
Mein PHP-Skript.
sealert -a /var/log/audit/audit.log

Verwandte Themen