• 締切済み

UNIXシェルの途中でユーザー切り替え

UNIXシェルの途中でユーザーを切り替える方法はありますか。 例)  ・ユーザAで先頭100行を実行し、残りはユーザBで実行など・・・。  ※suできれば良いのですが、対話形式のパスワード入力を促されてしまいますよね・・・。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.4

#3です。 >これを一つのシェルにして、都度ログインしている部分、及び、コマンド実行部分を自動化したい・・・、と言うのが趣旨です。 >それで、まとめたシェルについては、rootで実行ではなくて、一般ユーザで行ないたい・・・。 >という流れとなります。ニュアンスは伝わりましたでしょうか。 伝わってますよ。その前提での回答です。回答を良くお読みください。cmdaとcmdbを並べた親コマンドを作ってそれを一般ユーザーで実行します。 ただし、都度ログインということはログイン時の環境変数設定とかも影響するかもしれないので、必要に応じて、cmda, cmdb の先頭で、source ~usera/.profile などを実行する必要があります。

kank-jp
質問者

補足

こんばんは。 何度もありがとうございました。 とりあえず、色々やってみます。 どうもありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.3

ファイルを分けてよければ、前半をcmda 後半をcmdbとして、rootユーザーで以下を実行し、 chown ユーザA cmda chown ユーザB cmdb chmod 4755 cmda cmdb と、setuidビットをセットすれば、あとは一般ユーザで親コマンドからcmdaとcmdbを順に呼び出せば良いです。

kank-jp
質問者

補足

こんにちは。 ちょっと方向性が変わってきている?のかも知れませんので、軌道修正致しますと・・・。 現状、ある事を達成させる為に、複数のユーザを駆使して各種シェルを起動しています(都度、ログイン後・・・)。 ※「都度、ログイン」って結構重要です。 つまり、事柄1はユーザA。事柄2はユーザB、、と言った具合で・・・。(事柄はいくつも存在) これを一つのシェルにして、都度ログインしている部分、及び、コマンド実行部分を自動化したい・・・、と言うのが趣旨です。 それで、まとめたシェルについては、rootで実行ではなくて、一般ユーザで行ないたい・・・。 という流れとなります。ニュアンスは伝わりましたでしょうか。 PS:文章だけで伝えるのって難しいもんですね。

  • tomoarai
  • ベストアンサー率31% (15/48)
回答No.2

対話形式の入力を自動化するには、Expectを利用してみるのも一つの手ではないでしょうか? Expectのスクリプト自身にかファイルとしてパスワードリストを持たせておいて、su部分をExpectで実行といった流れになると思います。

参考URL:
http://kansai.anesth.or.jp/gijutu/expect/howto-expect.html
kank-jp
質問者

補足

こんにちは。 すみません、回答を頂いていた様なのですが、ちょっと忙しすぎてしまいまして手が付けられていませんでした。ただ、Expectのさわりだけはいじってみたのですが・・・。 時間が取れる様になったら、挑戦してみます。 ありがとうございました。

  • na_kirajp
  • ベストアンサー率43% (33/76)
回答No.1

ルートユーザでシェルを実行ではNGですか? ルートユーザで実行し、ユーザAの部分はsuでAユーザになって、ユーザBの部分はsuでBユーザになって・・・ (ルートなのでパスワード聞かれないので) 他にもrshとか手はあるかと思いますが、

kank-jp
質問者

補足

ルートユーザは極力使いたくないかと思ってます。 また、r系コマンドもセキュリティ面を考えると、使いたくないかなと…。 何か他に良い手はないものでしょうか?

関連するQ&A