PHPをメール起動するも“許可がありません”

このQ&Aのポイント
  • FTPでデータをアップロードし、その内容をメールで送信し、PHPの処理をする際に許可エラーが発生しています。
  • PEARからファイルがアクセスできず、unlinkでは許可がありませんと表示されるため、sudoを使用する以外の解決方法を探しています。
  • qmailユーザを設定するため、現在どのユーザを認めるべきかわからない状況です。
回答を見る
  • ベストアンサー

PHPをメール起動するも“許可がありません”

PHPをメール起動するも“許可がありません” あるシステムよりFTPでデータをアップロードし、その内容(ファイル名のみ)をメールで送信して、そのメールをトリガにPHPの処理をしています。 ところが(当然といえば当然)PEAR(アップロードファイルの解凍をしています)からはファイルがアクセスできませんとメッセージが表示され、unlinkでは許可がありませんと表示されてしまいます。 単体で試験すると動作するのですがメール起動のためユーザ権限が問題で、このような事象になると思っているのですが、解決する方法はsudoしかないのでしょうか? またsudoの設定をする場合、起動されるユーザは何になるのでしょうか? メールはqmailを使用しています。ユーザ一覧を見てみると、qmailだけで数ユーザが定義されていて、どれで認めて良いのかもわかりません。 非常に困っています。お願いいたします。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

必要な情報が開示されていないので、とりあえずセキュリティーを考えずに 実験的に実行するだけなら sudo経由のroot権限でとしか言えません 特定のユーザ権限で実行できるようにしたいのなら下記情報を開示すれば、 助言を得られるでしょう 1.「メールをトリガにPHPの処理をしています」この処理しているスクリプトは  どこから起動しているのか。それによって誰の権限で実行しているかが変わります  例・ユーザのホーム内の「.qmail」から起動している=> メール受信者の権限になります   ・qmail/control/aliasから起動している=>この場合aliasの権限だったかな   ・cronから起動している=>そのcron設定の権限に依存 2.実行スクリプトのオーナーとパーミッションが何か 3.そのスクリプトでアクセス(または削除)しているファイルのオーナとパーミッション 無難にやりたいのなら ・「その内容(ファイル名のみ)をメールで送信して」このメールの受信者の  ホームディレクトリ内の".qmail"から処理するプログラムを起動する ・「FTPでデータをアップロードし」のデータファイルのアクセス権を上記メール  受信者に与える ・処理するスクリプトの実行権限を やはりメールの受信者に与える ・unlinkするファイルへのアクセス権をメールの受信者に与える ・そのスクリプトの出力先へのアクセス権をメールの受信者に与える(出力あれば) こうすればsudoは不要です

papope
質問者

お礼

ご回答ありがとうございます。 助言いただきましてありがとうございます。 参考になりました。 やはりsudoは厳しいと思いましたので、アクセス権を付与する方向で 調べていきたいと思います。 ありがとうございました。

関連するQ&A

  • 空メールでPHPを起動

    CentOS 4.5、Apache 2.0.53、PHP 5.2.4+qmailで空メールのシステムを開発中ですが、Could_not_open_input_fileのエラーが出てPHPのプログラムが起動されません。 システムとしてはから空メール宛先用のユーザー321を追加し、/home/321/の.qmailを | /usr/local/bin/php -q /usr/local/apache2/htdocs_test/htdocs/mail_action2.php としてパーミションを600、所有者を321、stickyビットを立てています。ディレクトリー321も321所有で権限は700です。 呼ばれるmail_action2.phpはテスト用に #!/usr/local/bin/php -q <?php $fp = @fopen("/tmp/test.txt", "w"); $size = fwrite($fp, "xxx"); fclose($fp); ?> としています。所有者は321、権限は604、これもstickyビットを立てました。ディレクトリhtdocsは開発者所有、705の権限です。 これで321に空メールを送ると何も返答がなく、maillog上に greylist[31334]: IP nnn.nnn.nnn.nnn OK - accepting ... qmail: 1xx6.8xx4 delivery 1949: deferral: Could_not_open_input_file:_/usr/local/apache2/htdocs_test/htdocs/mail_action2.php_/ qmail: 1xx6.8xx5 status: local 0/10 remote 0/20 qmail: 1xx3.8xx0 starting delivery 1950: msg 1xx9 to local 321@abc.com qmail: 1xx3.8xx9 status: local 1/10 remote 0/20 qmail: 1xx3.8xx9 delivery 1950: deferral: Could_not_open_input_file:_/usr/local/apache2/htdocs_test/htdocs/mail_action2.php_/ qmail: 1xx3.8xx9 status: local 0/10 remote 0/20 と出ます。(文字数の関係からかなり省略しています。) mail_action2.phpは実行されず、/tmp/test.txtは作成されません。 ひとつ気になるのがSPAM対策としてgreylistを使っているのですが、多分このせいでCould_not_open_input_fileが2回出ていることです。これが影響しているのかもしれません。 どなたか他の方法でも結構ですからお知恵をお貸しください。

    • ベストアンサー
    • PHP
  • unlink「許可がありません」となり、消せない・・・

    PHP初心者です。 PHP4.2xです。 サーバーにアップしてあるログファイル(data.log)をPHPの操作で削除したいのですが・・・ $file = './data.log'; unlink($file); で消そうとすると、 Warning: unlink(./data.log): 許可がありません in /home/xxxx/xxxx/xxxx.com/httpdocs/xxxx/test.php on line 6 と表示されます。 ファイルのパーミッションは777にしています。 おそらくphp.iniの設定かセーフティモードがどうのこうのじゃないかなぁ・・・とは思っていますが、具体的にはどこをどうしたらいいのか分かりません。 どなたかアドバイス頂けないでしょうか・・・? どうぞよろしくお願いします!!

    • 締切済み
    • PHP
  • PHPのライブラリPEARを使わせる場合

    レンタルサーバのユーザにPHPのライブラリPEARを使わせる場合、 サーバ側(サーバ管理者)が全てのPEARを用意して、インクルードしてやっておかないといけませんか? CentOS5.6(私がサーバを提供する側) PHP5.3.3 というのも、 php.iniの include_pathが include_path = .:/usr/share/pear:/usr/share/php  になっておりサーバ管理者である私が/usr/share/pearにはまだPEARパッケージを1つも入れていません。 そこでPEARパッケージを使いたいユーザ自身がFTPでphp等アップロードしたディレクトリに 使いたいPEARパッケージを独自で配置し、ユーザ自身が配置したPEARパッケージを読み込んで使う形でもいいのでしょうか? ユーザがどんなパッケージを必要とするか分からないので、こちらがあらかじめ準備してやるなら、 すべてのパッケージを/usr/share/pearにインストールしておいてやらないといけなくなるのでは? と思います。 レンタルサーバなど通常はどうやっているんでしょうか?ユーザ各々にアップさせるものですか?

    • ベストアンサー
    • PHP
  • XAMPPに収録されているMercury/32メールサーバで受信をトリ

    XAMPPに収録されているMercury/32メールサーバで受信をトリガにPHPのプログラムを起動させる事は出来ないのでしょうか? ネットで調べたのですがqmail等のメールサーバでは可能との事なのですが、windowsでのシステム開発をしたく、ご教授いただけたらばと思います。

    • 締切済み
    • PHP
  • php pear

    php5にpearをインストールしました。 早速、c:\php>pear install MAIL としたところ、 No releases available for package "pear.php.net/MAIL" Cannot initialize 'channel://peara.php.net/MAIL', invalid or missing package file Package "channel://pear.php.net/MAIL" is not valid install failed というエラーメッセージが出ます。 どこを直したらよいのか、分かりません。 アドバイスお願いします。

    • 締切済み
    • PHP
  • go-pear.phpでエラーが発生する

    こちらの記事を元にしてpaerをインストールしようとしています。 http://pear.php.net/go-pear  のテキストファイルをphpに変換して、アップロード、アクセスすると 「Sorry! Your PHP version is too new (5.3.3) for this go-pear. Instead use http://pear.php.net/go-pear.phar for a more stable and current version of go-pear, more suited to your PHP version. Thank you for your coopertion and sorry for the inconvenience!」 というメッセージが表示されます。 http://pear.php.net/go-pear.phar をダウンロードして、拡張子をphpに変更。 そしてアクセスをすると「Web ページが見つかりません」と表示されます。 パーミッションを777に変更してみると Internal Server Error File "/home/hogehoge/public_html/pear/go-pear.php" is writeable by group というメッセージが表示されます。 気になる点としてはhttp://pear.php.net/go-pear.phar の文末の文字化けです。 エンコードの種類を日本語(sjis,ecu,utf)、ギリシャ文字など試しましたが、化けたままです。 どうしたらよいのかわからずスタート段階でストップ状態です。 ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP初心者です。pearの具体的な使用方法

    本当に素人なので変な質問かもしれません。 現在ロリポップでpearをインストールしたのですが、具体的なpearの使用方法というのは リモートサーバのインストールした場所でpearのフォルダの中からPHPファイルをみてコピペでコードを作成していくのでしょうか?  ただ今の時点でインストールしたpearのphpファイルどれをブラウザで開いてもエラーがでて、それぞれのphpファイルの機能がどういうものかもわかりません。この時点でpearの使用方法が間違っているのかもしれませんが、ネットで調べてもインストールする手順ぐらいしか見ることができずに困っています。  pearの活用例とpearのファイルがどれもエラーである理由を教えてください。 ちなみにエラーは Fatal error: No PEAR.php in supplied PEAR directory: @pear_dir@ in /home/users/0/xxxxx/web/pear/TMP1q84zbu.php on line 24 こんな感じです。

    • 締切済み
    • PHP
  • qmailからのスクリプト起動でのPostgreSQLへの接続と他のスクリプトの起動

    こんにちは.はじめまして. qmailを起動し,メール到着時にmail.plというPerlスクリプトを起動しています. このmail.pl内で,PostgreSQLに接続し,データベースをいじりたいのですが, なぜかqmailで指定したスクリプトからはいじれません. 同じように,他のスクリプト(new.pl)をrequireを使用して呼び出しているのですが, 呼び出すことができません. new.plのパーティションは777に設定しました.(こんなに必要だとは思いませんが) qmail を利用すると,起動するスクリプトは誰が起動していることになるのでしょうか? 全てのスクリプトと.qmailはユーザーuser,の中にあります. PostgreSQLでは,ユーザーuserは作成してあり, mail.plの中で呼び出すDBの作成者はuser です. 初心者で何もわかっていないのですが, よろしくお願いします.

  • メールをPHPスクリプトに転送させたい

    コアサーバー(qmail)・独自ドメインで運用しています。 指定したメールアドレスに送信されたメールを、PHPスクリプトに転送させて処理したいと思っています。 「アカウント名\Maildir」と同じ階層に「.mailfilter」というファイルを作り、 to "|/usr/local/bin/php /virtual/user_name/hoge/mail.php" exit と記述したのですがうまくいきませんでした。 PHPのパスは、サポートページに書いてあったので間違ってはいないと思います。 もちろん、mail.phpまでのパスも確認しました。 PHPには、転送されたことが確実にわかるように mb_send_mail("mail_address", "TEST", "OK", "mail_address"); とだけ記述しています。 .mailfilterの書き方がおかしいのか、設置するディレクトリがおかしいのか、そもそもコアサーバーでこのようなことが可能なのか、さっぱりわかりません。 これから、どのようなことを確認・試行すればいいのか教えていただけないでしょうか。 宜しくお願いいたします。 なお、コアサーバーはサポートが悪く、1ヶ月待っても返事が返ってきませんので、こちらで質問させていただきました。

    • ベストアンサー
    • PHP
  • リンクしたPHPへ変数をわたしたい

    今 サンプルをくっつけようとしています。 *1つのサンプルはログイン認証(PHP)で、ユーザー($username)を認証してから他のメニュー(ここではアップロード・ダウンロード,PHP)へ飛ぶようにテンプレート(TPL)上でPHPのリンクをつけてあります。 *TPLファイルでは、以下のような部分を付加してありますが、 画面上でログインしているユーザー名($username)が表示されます。 <P> {$username|escape:"html"} <BR> <BR> <A href="storage.php?{$username}={$username|escape:"html"}">"{$username|escape:"html"}"ファイルのアップロード・ダウンロード</A> <BR> <BR> 画面上に表示されたリンクをクリックしてstorage.phpへ飛ぶと、 storage.php内で 表示できるように設定した$usernameが表示されません。 storage.phpではユーザー別のフォルダをつくりそこにアップロード・ダウンロードさせたいのですが $usernameがわたらないために どのユーザーでも同じフォルダーにアクセスすることになってる現状です。 storage.phpでは 以下のような内容 function listup($username,$key) { global $dirname; print $dirname; $dir="./data/$dirname"; ............... $username さんのファイル一覧 インターネットや本をみたのですが、わかりません。 すみませんが お気づづきのかたいらっしゃいましたら アドバイスお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう