特定の非常に特殊なコマンドをルートとして実行する C++ プログラムがあります。これが必要な理由は、Node.js で実行されている別のプログラムが、システム時刻の設定、タイム ゾーンの設定などを実行する必要があるためです。これには root 権限が必要です。setuid コマンドを使用した後、root 権限でシステム コールを行うために、C++ で関数 execve を使用しています。環境変数の脆弱性を作成しないように環境を壁で囲みたいので、具体的には execve コマンドを選択します。
setuid(0);
execve(acExeName, pArgsForExec2, pcEnv);
私がやりたいことは、プログラムが必要とするプログラムを実行するための環境変数リストである pcEnv を正確に見つけることです。たとえば、ツール time-admin をコンソールから実行しているかのように実行したい場合、必要な環境変数をどのように把握すればよいでしょうか。コマンドprintenvを使用して環境変数を出力できることは知っていますが、それですべてが得られます。それらすべてを必要とせず、できるだけ小さなサブセットが必要だと確信しています。
それらをすべて使用してから、ゆっくりとそれぞれをコメントアウトして、それが機能し続けるかどうかを確認できることはわかっていますが、実際にはそこまで行きたくありません.
プログラムで使用されている環境変数を特定する賢い方法を知っている人はいますか? Ubuntu 12.04 LTSのインストールでこれを行っていることを追加する必要があります。
助けてくれてありがとう。