- ベストアンサー
シェルスクリプトについて
とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
基本的には、その「管理プログラム」と同じユーザ権限で動きます。 「基本的には」というのは、変える手段があるからですが。 UNIXでは、全てのプログラム(プロセス)にたいして「ユーザ権限」が対応付けられています。 特別な操作をしない限り、あるプログラムAが別のプログラムBを起動したらAとBは同じユーザ権限で動きます。 UNIXではシェルも単なるプログラムなので、シェルスクリプトである事による特別なことはありません。
その他の回答 (2)
- a-saitoh
- ベストアンサー率30% (524/1722)
例えば、 su daemon -c "コマンド・・・・・・・" で、daemon権限でコマンドを動かすことができます。 ここで問題は、suはroot権限でないと使えないことです。それ以外のユーザがsuを使うときにはパスワードを入力しないといけないので、シェルスクリプトには適しません。 あとはsudoなどsetuid機能を使ってユーザを切り替えることになります。 ユーザ権限の変更を伴うシェルスクリプトはセキュリティホールになりやすいので、十分な経験を積むまではお勧めできません。ましてや、シェルスクリプトそのものをsetuidするのはやめておいた方が無難です。
- notnot
- ベストアンサー率47% (4900/10358)
su は別ユーザで対話型シェルを実行するコマンドなので、別ユーザで特定コマンドを実行するのは sudo コマンドを使います。 また、プログラムファイルの属性として、「そのプログラム実行中だけこのユーザ権限で」という設定もあります。 以上が、ユーザー権限の話ですが、環境変数はまた別の話になります。環境変数はユーザーの属性ではなく、プロセスの属性です。同じユーザーでもbashでログインしたときとcshでログインしたときでは環境変数設定ファイルは異なります。ログインしないで他機からコマンドだけリモート実行する場合はこれまた違います。 とあるユーザーがbashでログインしたときと同じ環境変数であるコマンドを実行したいなら、 env - HOME=/home/tanin bash -i /cmd/cmd1 でしょうか。env - の - は現状の環境変数を参照しないという意味なので、現状の環境変数に別ユーザの環境変数を「追加」するなら、 HOME=/home/tanin bash -i /cmd/cmd1 でOKです。 ユーザー権限も変更が必要なら上記をsudoで実行してください。
お礼
ありがとうございます。 大変参考になります。 あと「変える手段」なんですが例えばなんですがシェル内記述で suでユーザ変更するという趣旨なんでしょうか?。。