0

cron が正常に動作していません。次のコマンドで /etc/cron.d 内にファイルを作成しました

$ touch /etc/cron.d/php-crons
$ chown www-data /etc/cron.d/php-crons

(*system*php-crons) WRONG FILE OWNER (/etc/cron.d/php-crons) のようなエラーが発生 したので、ファイル所有者をルートとして変更しました

$ chown root /etc/cron.d/php-crons

cronが機能していなくても。私のphpファイル(cron.php)は次のとおりです

 $fp = fopen('/etc/cron.d/php-crons', 'a');
 fwrite($fp, '10 * * * * root usr/bin/php PATH TO SCRIPT/email.php'.PHP_EOL);
 fclose($fp);

/etc/cron.d/php-crons を開くと、ジョブが表示されます。

 10 * * * * root usr/bin/php /var/www/PATH TO SCRIPT/email.php

email.php に含めました

  #!/usr/bin/php
 mail ("examplemail@gmail.com", "Cron Successful Public HTML!", "Hello World from cron.php!");

(/etc/cron.d/php-crons)ファイルの所有者をルートとして変更し、ブラウザでcron.phpを実行すると、 /etc/cron.d/php- crons 内に何も書き込むことができず、次のような警告が表示されます。続きます。

警告: fopen(/etc/cron.d/php-crons): ストリームを開くことができませんでした: 行 2 の /var/www/cron.php で許可が拒否されました 警告: fwrite() は、パラメーター 1 がリソースであると想定しています。 3 行目の /var/www/cron.php 警告: fclose() は、パラメーター 1 が、4 行目の /var/www/cron.php で指定されたブール値のリソースであることを想定しています。誰か私を導いてください!!

4

2 に答える 2

1

いくつかの問題があります。お気づきのように、cron デーモンの実装では、root 以外のユーザーがファイルを所有することは許可されておらず、同じセキュリティ上の理由から、ファイルを誰でも書き込み可能にすることは許可されていません。

少なくとも例では、cron ジョブ行には、絶対パスである必要がある相対パス ("usr/bin/php") がリストされています。cron.php ファイルが root によって所有されているからといって、root ユーザーとして実行されているわけではありません。適切なグループおよび/またはその他の許可ビットがあるため、PHP によって実行および実行されます。また、root として実行する方法 (setuid-chmods など) でパーミッションを変更しないでください。

おそらくすべきことは、PHP スクリプトのラッパーとして機能する cronjob 行です。PHP スクリプトは、データベースからすべてのジョブを読み取り、それらを実行するか、既に作成したものと同様のテキスト ファイルを実行します。

このようにして、非 root ユーザーとしてラッパー スクリプトを実行できます。ほとんどの cron 実装では、スクリプトの前に「su」コマンドを使用して、他のユーザー (www-data など) に名前を付けることができます (その他を参照man 5 crontab)。

于 2012-07-26T11:54:32.087 に答える
0

どのオペレーティングシステムを使用していますか? 通常、このような場合は、ユーザーごとの crontab を使用します。そのため、コマンドはそのユーザーとして実行されます。/etc/cron.d は、システムの crontab に使用されます。(/var/spool/cron/crontabs) はユーザーの crontab が保存される場所ですが、有効にする必要があります。通常は、それらの使用を許可されているユーザーを /etc/cron.allow に追加します。root として実行されるファイルを Web プロセスが変更できるようにすることは、本当に悪い考えです。ユーザーごとのオプションを使用すると、通常は触れることができるものにしか触れることができないため、セキュリティリスクが少なくなります。

于 2012-07-26T11:54:59.230 に答える