私のWebルートディレクトリに、次の行を含むcopy.shというシェルスクリプトがあります。
rsync -rzv -e 'ssh -p 199' test.txt [email protected]:/home/testuser/txt
ssh [email protected] -p 199 . /home/testuser/lty.sh > ltylog.txt 2>&1
スクリプトは最初にテキストファイルをリモートサーバーにコピーし、シェルスクリプトを実行して他の2つのサーバー間でファイルを同期します。現在のサーバーからtestuserのSSH公開/秘密鍵を生成してリモートサーバーにコピーしました。パスワードなしでリモートサーバーにSSHで接続できます
ssh [email protected] -p 199
上記のコマンドを実行してリモートサーバーにアクセスできます。私のホストでは、testuser状態にあるときに問題なくシェルスクリプトを実行できます。ファイルをコピーしてリモートスクリプトを実行します。これでスクリプト権限を777に設定しました。ただし、PHPを使用して次のようにshell_execを実行してこのスクリプトを実行する必要があります。
<?php
shell_exec('. /var/www/html/copy.sh');
echo "<pre>";
echo file_get_contents("ltylog.txt");
echo "<pre>";
?>
しかし、このPHPを実行すると何も起こりません。これは、シェルスクリプトを実行するユーザーがテストユーザーではなくApacheユーザーだと思うからです。しかし、shell_exec PWDなどを実行すると、シェルスクリプトを実行するのではなく完全に実行されます。 PHPセーフモードを無効にし、すべてのファイルに777権限を付与しました。しかし、私はまだこれを動作させることはできません。
PS私は、権限のあるWebルートにシェルスクリプトを配置すると大きなセキュリティリスクを引き起こすことを知っています。しかし、これは本番システムではなく、内部目的のために小さなWebアプリケーションをテストしています。私がこれを行っているサーバーはインターネットにまったくアクセスできません。誰でもこの問題を解決するのに役立ちますか?私は小さな解決策を探しています。なぜなら、この小さなWebアプリケーションは1人か2人だけが使うからです。ありがとう
ベストアンサー1
あなたの質問を正しく理解し、セキュリティリスクに興味がない場合は、sudoをインストールし、すべての権限を持つsudoersファイルに「www-data」(www-dataはnginx / apacheで使用されるデフォルトのユーザーです)を追加してから、必要ありません。パスワードが必要で、それを使用して他のユーザーとしてコマンドを実行します。
次のことができます。
sudoをインストールします。
apt-get install sudo
次に、設定にユーザーを追加します。
nano /etc/sudoers
最後の行に追加します。
www-data ALL=(ALL) NOPASSWD: ALL
最後に、sudoを使用してPHPを編集してコマンドを実行できます。
shell_exec('sudo -u testuser /var/www/html/copy.sh');
@編集する
私のサーバーで実行するように管理しました。以下の手順に従うだけで効果があります。
PHPコードを次のコードに置き換えてください。
<?php echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser echo "<pre>"; echo file_get_contents("ltylog.txt"); echo "<pre>"; ?>
次に、www-dataがcopy.shファイルにアクセスできることを確認してください。
次のように777 chmodを指定できます。
chmod 777 /var/www/html/copy.sh
または、ファイルをユーザーwww-data(Apacheで使用)に属するように作成することもできます。
chown www-data:www-data /var/www/html/copy.sh
ただし、2番目のオプションを使用することを選択した場合は、次のようにchmodを適用して、www-dataが引き続きファイルを実行できることを確認してください。
chmod 755 /var/www/html/copy.sh
ファイルを実行可能にします。
chmod +x /var/www/html/copy.sh
copy.shコードを次に変更します。
rsync -rzv -e 'ssh -p 199' test.txt [email protected]:/home/testuser/txt ssh [email protected] -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
最後に、testuserが次のファイルにアクセスできることを確認してください。
- /家/
- /ホーム/テストユーザー/
- /home/testuser/lty.sh
- /home/testuser/ltylog.txt
セキュリティに興味がない場合は、リモートサーバーのコンソールに入力するだけです。
chmod 777 -R /home/
あるいは、各ファイルを手動で調べて、権限が正しく設定されていることを確認することもできます。