1

Web サイトを介してプログラムで RSA 公開鍵を authorized_keys ファイルに追加しようとしていますが、解決策を見つけることができませんでした。PHP のfile_put_contents()関数を使用しようとしましたが、アクセス許可が拒否されたというエラーが発生しました。動作する Python スクリプトがありますが、exec()コマンドまたはshell_exec(). 関連する PHP コードは次のとおりです。

if(@$_POST['action']=='submit'){
    $key = $_POST['key_field'];

    //file_put_contents("/home/biosproject/.ssh/authorized_keys", $key, FILE_APPEND);

    $test = "/usr/bin/python savetofile.py \"".$key."\"";
    $tmp = shell_exec($test);
}

入力をサニタイズする必要があることは承知していますが、サイトは現在開発中であるため、当面はこのようにテストしています。現在、Apache を実行する XAMPP を使用しています。私が見逃しているもの、または試すことができるものはありますか? PHP exec/shell_exec については、コマンドのすべての部分にフル パス名を使用してみましたが、まだ何も機能していません。Pythonスクリプトは次のとおりです。

#!usr/bin/python
import sys    
key = sys.argv[1]    
with open("/home/biosproject/.ssh/authorized_keys","a") as append:
    diditwork = append.write(key)
print key

前述したように、このスクリプトは機能しますが、PHP スクリプトから呼び出すことはできません。

編集:

私のauthorized_keysファイルは次のようになります:
-rw-rw-rw- 1 biosproject www-data 1200 Apr 15 13:17 /home/biosproject/.ssh/authorized_keys

アップデート:

代わりに、データベース エントリから必要な情報を追加する cron ジョブを使用してアクセス許可をバイパスすることで、問題を解決しました。今すぐ大活躍!

4

2 に答える 2

0

私のインラインコードについての説明:

$text = "nice text to append :P";
// open a file handler with a+ flag that means "open file for append and if it does not exist, create it"
$fo = fopen("filename.ext", "a+");
// append $text to file handler with a \n at the end
fwrite($fo, $text . PHP_EOL);
于 2013-04-16T17:22:25.803 に答える
0

ここでは Python スクリプトは役に立ちません。これはファイルのパーミッションの問題/home/biosproject/.ssh/authorized_keysです。つまり、Apache にはファイルを変更するパーミッションがなく、Python スクリプトを含むプロセスも生成されません。

最も簡単な修正は、ファイルのアクセス許可を変更して、Apache から書き込み可能にすることです。apache が group として実行されていると仮定するとwww-data、...

sudo chgrp www-data /home/biosproject/.ssh/authorized_keys
sudo chmod g+w /home/biosproject/.ssh/authorized_keys

...に設定されている場合にssh文句を言うかどうかは忘れますが。authorized_keysg+w

アップデート

この方法でディレクトリのアクセス許可を変更すると、文句を言うと確信していますが、変更できるようにするには、すべての親ディレクトリへのアクセスwww-dataも必要になると思います。+x/home/biosproject/.ssh/authorized_keysssh.ssh

/home/biosproject/.sshディレクトリの所有者と同じ UID で apache を実行するか、setuidスクリプトを使用して変更を行う必要があります。

于 2013-04-16T17:23:52.450 に答える