ジョブマネージャサーバ経由のコマンド実行について
・サーバA(Kompiraのジョブマネージャをインストール)
・サーバA上に自作のシェル作成 /usr/src/cmd/command01
・/usr/src/cmd/にPATHを通し、"command01"だけで実行可能に設定(権限付与)
・サーバAでkompiraユーザにスイッチ
printenvで/usr/src/cmd/にPATH通っていること確認
"command01"だけで実行可能を確認
・サーバB(Kompira本体)にて、サーバAのジョブマネージャ経由でジョブフロー実行
['command01'] → /bin/bash: command01 : コマンドが見つかりません となりエラーとなる
['/usr/src/cmd/command01'] → こちらは問題なく完了
上記のとおりパス指定なしで実行したいのですが、どのような設定すれば可能でしょうか?
-
正式なコメント
フィックスポイントの高橋です。
下記にある PATH の設定ですが、具体的にどのように設定されていますでしょうか?
・/usr/src/cmd/にPATHを通し、"command01"だけで実行可能に設定(権限付与)
たとえば、サーバ A の kompira ユーザの .bash_profile で環境変数の設定をされているような場合、kompira ユーザとしてログインした場合(ログインシェルとして bash が起動された場合)はその設定が適用されて、パスを省略してコマンドが実行できているかと思います。
しかし、kompira ジョブマネージャでの連携では、ログインシェルを介さずにコマンド実行がなされますので、上記の PATH 設定は反映されずに「コマンドが見つかりません」とエラーになっているのではないかと考えられます。
サーバ A 上のジョブマネージャで(SSH でなく)ローカルにコマンドを、(.bash_profile で設定した)パス指定無しで実行させたい、となると、以下のような対策が有効かもしれません。
- kompira_jobmngrd サービス自体に環境変数 PATH を追加設定して動作させる。
- ログインシェルを介してコマンドを実行させる
前者は、systemd の設定ファイルである /etc/sysconfig/kompira_jobmngrd に環境変数 PATH 設定がありますので、例えばここに /usr/src/cmd を追加すると、パス指定なしで実行できるようなるかもしれません。
後者は、例えば ['/bin/bash -l -c "command01"'] と bash に -l オプションを付けてログインシェル指定で起動させて、そこからコマンドを実行させることができるかもしれません。
PATH の追加指定は場合によっては脆弱性に繋がるため注意が必要である、といった一般的な意見もあるかと思います。特別な理由がなければ ['/usr/src/cmd/command01'] とフルパス指定で実行していただくか、標準のパスが通った場所に配置する、なども再考いただくのもよいかもしれません。
個人的には、標準パスにないコマンドはフルパス指定で実行する方式を選ぶであろうと思います。パス部分は設定オブジェクトなりで可変にしておく、などの工夫もできるかと思います。
参考になさってみてください。
コメントアクション -
ご回答ありがとうございます。
/usr/src/cmd/にPATHを通し、"command01"だけで実行可能に設定(権限付与)
具体的には、/etc/profile.d/cmd.sh というファイルを作成し、
その中に PATH=/usr/src/cmd/:$PATH と記述しておりました。systemd の設定ファイルである /etc/sysconfig/kompira_jobmngrd に環境変数 PATH 設定がありますので、例えばここに /usr/src/cmd を追加すると、パス指定なしで実行できるようなるかもしれません。
確かに、上記ファイルに記述してkompira_jobmngrdを再起動したところ、動作いたしました。
ただ、ご指摘の脆弱性についてまで考えが及んでおりませんでしたので、ご教示いただきました内容を含め、最終どのような方式にするのか検討いたします。
サインインしてコメントを残してください。
コメント
2件のコメント