街中で見かけて「グッときた人」の思い出

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から外部コマンドを使ってファイルやディレクトリを新規作成することができるでしょうか?
よろしくお願いします。

A 回答 (5件)

やりたいことがrootでのuseraddだけなら、sudoersに


apache ALL=(root) NOPASSWD: /usr/sbin/useradd
とでも書いておきsudoすれば済むでしょう。

しかし私ならphpから直接sudoなどはせず、キューに入れるだけにしますね。別途サニタイズしつつ処理するものを書いてcronで回します。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。お礼が遅くなって申し訳ありません。(長い間、見ていませんでした。)

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

お礼日時:2009/05/04 17:13

「非対話 adduser linux」あたりでググればひっかかるかもしれません


私のメイン環境のFreeBSDなら「pw」で一発なんですけどね
Fedoraはあまりつかっていないので具体的なコマンドは知りません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/04 17:14

>PHPで外部コマンドを使ってサーバ内にディレクトリを新規作成したい



>外部コマンドでユーザ登録できない

全然ちがうレベルの話にかわっていますね?
新規ユーザーの追加ってなるとスーパーユーザーの仕事です。
apacheの実行ユーザーでなんでもできたら、apacheが乗っ取られた
ときサーバーすべて乗っ取られますよ・・・
    • good
    • 0
この回答へのお礼

すみません。質問の内容が変わってしまっていますね…。

ユーザを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のパスワードを忘れた場合の対処法はたくさん載っているのですが…。

お礼日時:2009/04/22 19:51

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

    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます。

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

お礼日時:2009/04/22 16:32

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

    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございます。

sudo、検討してみましたが、どうやらディレクトリは作成されるようでした。すみません。

# useradd hogehoge

を外部コマンドを使って実行しようとしていて、/home/hogehogeが作成されなかったので、そのように勘違いしていました。ディレクトリだけなら作成できました。

…という訳で、外部コマンドではないphpの機能ではユーザの新規登録はできないと思いますので、外部コマンドでユーザ登録できないかと思います。

お礼日時:2009/04/22 16:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!