2012-04-02 22 views
0

PHPを使用してファイルをコンパイルしようとしています。 PHPコードは、私がコードや権限に問題があるかわからないPHP Execの権限が拒否されました

/usr/bin/ld: cannot open output file a.out: Permission denied collect2: ld returned 1 exit status 1 

として出力を取得しています...

if(isset($_POST['submit'])){ 
    $filename= "source/source.c"; 
    $fp = fopen($filename, "w"); 
    fwrite($fp, $_POST['answer']);  
    // Now compile...  
    echo system("gcc $filename 2>&1"); 


} 

です。私はLAMP Stackを使ってUbuntu 11.04を使っています。 私はchownをwww-dataに、chmodingを777にしようとしました。しかし、私はまだ同じエラーが発生しています。

に何をすべきか上の任意の案内が高く評価される:)

おかげですでに、

よろしく

アマンゴータム

+1

チェック権限を削除します。また 'chmod'を実行した後、' ls -l'で再度確認してください –

+0

gccでユーザ入力をコンパイルしていますか? – jordanm

+2

私はこれが単なる個人的なプロジェクトであり、公的なシステムには何もないことを願っています。これは、公開されるようにする予定の場合、大きなセキュリティ上の問題です。 – jncraton

答えて

2

出力ディレクトリのパーミッションを確認し、私は$を見ます_POSTなので、スクリプトを実行しているApacheのようで、apacheがディレクトリに書き込めるかどうかを確認し、既存のa.outを上書きします。

+0

答えをありがとう。しかし、どうすればいいのですか?ユーザーwww-dataがあります。しかし、私はどのようにプロセスに許可を与えることができますか? –

+0

2つのソリューション:使用するディレクトリでchmod -R o + rw(またはchmod -R 666) wwwデータユーザーにディレクトリへの完全なアクセス権を与える必要があります。他のプロセスにアクセスさせたくない場合はACLを使用できますが、もっと複雑です。 – mamadrood

+0

www-dataのアクセス権を確認するために使用するディレクトリでls -ldを実行します。 – mamadrood

1

権限を持っていて777であってもそれでも動作しない場合は、システム内でapp armorまたはse Linuxがアクティブであるかどうかを確認することができます。アプリの鎧を無効にするには:

のAppArmorを無効にすることができ、およびカーネルモジュールは、次の を入力して、アンロード:

sudoのアップデート-RCを停止/etc/init.d/apparmor

sudoを。 D -f AppArmorは、具体的a.outの上

リブート

関連する問題