• ベストアンサー

PHPから外部コマンドを使ってファイルやディレクトリを新規作成するには?

LinuxのFedora10で、PHPで外部コマンドを使ってサーバ内にディレクトリを新規作成したいのですができません。 /var/www/uuu内に、index.phpを設置し、その中の一部に以下のようなスクリプトを書いています。 <?php system("pwd"); system("touch fff"); system("mkdir ddd"); ?> system("pwd")は/var/www/uuuという結果を出してくれます。しかし、system("touch fff")やsystem("mkdir ddd")に関しては全く結果を出してくれません。 (PHP自体のエラーではないようです。) どうやら、外部コマンド自体はうまく機能してくれているみたいなのですが、ディレクトリやファイルを新規作成することができないようなのです。 /var/www内のディレクトリuuuのパーミッションを777にして、オーナーを一般ユーザにしてやってみても同様にうまくいきません。 どのようにすれば、PHPから外部コマンドを使ってファイルやディレクトリを新規作成することができるでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • mattalix
  • ベストアンサー率62% (47/75)
回答No.5

やりたいことがrootでのuseraddだけなら、sudoersに apache ALL=(root) NOPASSWD: /usr/sbin/useradd とでも書いておきsudoすれば済むでしょう。 しかし私ならphpから直接sudoなどはせず、キューに入れるだけにしますね。別途サニタイズしつつ処理するものを書いてcronで回します。

wataj
質問者

お礼

ご回答どうもありがとうございました。お礼が遅くなって申し訳ありません。(長い間、見ていませんでした。) まさにお答えの通りでした。この十日間、別の方法でやっていましたが、mattalixさん投稿を拝見し、試したところ、うまく行きました。(ですから、mattalixさんの方法に変更しました。) 新しいことを学ばせて頂き、またLinuxを使うことが楽しくなりました。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

「非対話 adduser linux」あたりでググればひっかかるかもしれません 私のメイン環境のFreeBSDなら「pw」で一発なんですけどね Fedoraはあまりつかっていないので具体的なコマンドは知りません。

wataj
質問者

お礼

色々とお世話頂き、有難うございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>PHPで外部コマンドを使ってサーバ内にディレクトリを新規作成したい >外部コマンドでユーザ登録できない 全然ちがうレベルの話にかわっていますね? 新規ユーザーの追加ってなるとスーパーユーザーの仕事です。 apacheの実行ユーザーでなんでもできたら、apacheが乗っ取られた ときサーバーすべて乗っ取られますよ・・・

wataj
質問者

お礼

すみません。質問の内容が変わってしまっていますね…。 ユーザをapacheからrootに換えてやろうと思っているのですが、何故だかユーザを変えられません。 system("whoami"); system("su"); system("mypass"); system("whoami"); 結果は、 apache apache です。つまり、ユーザはapacheから変わっていません。 それではと、apacheのままsudoを使って、 # sudo useradd newuser にしてもapacheのパスワードを二度入れなければならないと思うので、以下のように書こうと思うのですが… system("sudo useradd newuser"); system("password_of_apache"); system("password_of_apache"); apacheのパスワードが分かりません。どうやって調べるのでしょうか。rootのパスワードを忘れた場合の対処法はたくさん載っているのですが…。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

プログラムを実行しているユーザーにコマンドの実行権が無いか、パスが通ってないという事ではないでしょうか。

wataj
質問者

お礼

ご回答どうもありがとうございます。 ただ、プログラムを実行しているユーザーにコマンドの実行権はありますし、パスが通ってないという事はありません。(質問をご覧ください。)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

sudoなどを使うか、外部コマンドではないphpの機能をつかってみては?

wataj
質問者

お礼

ご回答どうもありがとうございます。 sudo、検討してみましたが、どうやらディレクトリは作成されるようでした。すみません。 # useradd hogehoge を外部コマンドを使って実行しようとしていて、/home/hogehogeが作成されなかったので、そのように勘違いしていました。ディレクトリだけなら作成できました。 …という訳で、外部コマンドではないphpの機能ではユーザの新規登録はできないと思いますので、外部コマンドでユーザ登録できないかと思います。

関連するQ&A