• 締切済み
  • 暇なときにでも

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

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数1722
  • ありがとう数5

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • シェル内で自動ユーザ変更

    SunOS 5.10を使っていますが シェルを実行するのはAやBなど同一グループに属すユーザとしてシェルと作成し、 シェルの中で実行されるコマンドや子シェルはXというAやBと同一グループだけど 単一ユーザにしたいのですがそういう事は可能ですか? ・rootユーザはNG ・パスワードの入力は対話型でするのではなく自動化させたい ・rshやrloginなどは使いたくない ・恒久的にXというユーザのパスワード入力が省略されるのはNG などが条件です。 要はツールをシェルで作って実行するユーザはマルチユーザ化したいが シェル内ではパスワード入力などマルチユーザが意識しないで処理が止まる事なく 単一ユーザで処理させたい、出力したファイルなどの所有者も 単一ユーザとなるのようにしたいのですが。 わざと抽象的に書いていますが、なにか方法はありますでしょうか?

  • Bシェルでのユーザパスワード変更

    Bシェルのスクリプトを実行しユーザパスワードの変更を自動で 行いたいと思っています。 #!/bin/sh passwd 変更したいユーザ名 abcd ・・・(変更したい人のパスワードです[新しいパスワード用]) abcd ・・・(変更したい人のパスワードです[新しいパスワードの聞きなおし用]) このようにシェルを組み実行したところ コマンドプロンプトにてパスワードの入力 を聞かれてしまい、シェルにパスワードを 指定しているのですが認識してくれません。 この問題を解決するにはどのような シェルの記述方法があるのでしょうか。 ご回答よろしくお願いします。

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

  • 回答No.2

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • UNIXのシェル

    シェルに関して質問です。 0526とか0525のところは一日ごとにフォルダが作成されます。 unix\yasu\0526\hobby\test.txt unix\yasu\0526\hobby\test.txt unix\tomo\0525\hobby\test.txt unix\tomo\0525\hobby\test.txt ./check.sh MMDD 実行するときにMMDDのところに日付を入れてフォルダがあればコマンド1を実行するようにしたいです。 引数に指定した文字を判定するにはどうしたらいいのでしょうか? よろしくお願いします。 ----------------------------- #シェルの名前は「check.sh」です #! /bin/sh if [ $1 = "日付" ] ; then コマンド1 else コマンド2 fi -----------------------------

  • suと一般ユーザの判別

    こんにちは、よろしくお願いします! 一連の処理をシェルで記述しているのですが、 本シェルを"su"の権限である場合のみ実行させたいと考えています。 (つまり一般ユーザ権限では実行できないようにしたいのです) シェル内で、なにかしらの判定を行い、 suなら処理続行、一般ユーザなら処理中断・・・ のようにしていきたいのですが、 何か良い方法はありませんでしょうか? なお、シェル内で"su"を実行し、 強制的にsuにする方法も検討しましたが、 su状態においても、さらにsuがきいてしまうようで、 失敗しました。 よろしくお願いします。

  • unixのシェルで

    シェルを実行して、ファイルAの内容と、引数Aを連結してファイルBを作成したい場合にはどうしたら良いですか? 例> 実行するシェル : test.csh ファイルAの内容 : 123456 引数A : 9 作成したいファイルBの内容 : 1234569 123456と9の間にSPACEは入れないようにしたいのですが、どうしても入ってしまいます。 よろしくお願いします。

  • Bシェル内でのユーザー変更

    お世話になっております。 あるBシェルをJP1に登録しジョブ実行しようとしています。 Bシェル内には複数の処理があり、必要に応じてユーザー変更を行う必要があるのですが上手く行きません。 なお、禁止事項にrootユーザーでJP1実行、suid、guidの未指定があり上手く対応が出来ません。 どなたか上手く行く方法をご存知ありませんか? 行いたい処理は以下の通りです。 (1)実行ユーザーで実行 (2)posgreユーザーでログイン (3)ダンプファイルを取得 (4)posgreユーザーをログアウト (5)sshユーザでログイン (6)ダンプファイルを移動 (7)sshユーザをログアウト (8)終了 環境は シェルはBシェル OSはRHEL5.3 です。

  • シェルスクリプトの書き方

    すみません、シェル初心者なのですが、急を用してまして質問させて頂きました。 シェルスクリプトで コマンドを実行する前に他のユーザにスイッチしてから 実行するというのを実現したいのですが・・・ #!/bin/csh コマンド1 コマンド2 ・・・ とコマンド1の前に su コマンドを実行させたいのですが、 パスワードを入力する際、対話式なので どう書いてよいか分かりません。 よろしくお願いします。

  • シェルの中からシェルを呼び出して判定

    UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。

  • UNIXシェルの設定ファイルについて

    solaris8使用してるのですが2つほど質問があります。 1. rootのシェルの設定ファイル(.cshrcとか.profileにあたるもの?) ってどこにあるのでしょうか? su でroot になったときや、rootでcshと打ち込んだときなど はどこのファイルの設定を読むのでしょうか? 2. 一般ユーザを新規に追加した場合にその新規ユーザの シェルの設定ファイルってどこからもってきたものなんでしょうか? デフォルトのファイルのようなものをコピーしてくる感じなのでしょうか? ご存知の方よろしくお願いします。

  • UNIXシェル内での日付計算

    UNIX(今使ってるのがHP-UX11i)上のバッチシェルで、 指定した日数分の前の日付を取得したいのですが、 何か方法はないでしょうか。 (例) 現在の日付: 20060511 指定した日数: 10(MAX値は100程度) 取得する日:20060501

  • Linux  CentOS shellスクリプト内でユーザーをスイッチする方法教えて下さい。

    困っています。ご存知の方教えて下さい。 一般ユーザーでshellスクリプトを実行して、root権限にスイッチして、root権限のみに許されたコマンドを実行してから、 一般ユーザーに戻る方法がわかりません。 ターミナルで sudo su コマンドを実行すると、対話式でパスワードを入力できますが、スクリプト内で対話式のパスワードを入力してrootに ユーザーをスイッチする方法がわかりません。 ------------ !#/bin/sh mkdir /home/user1/tmp ←一般ユーザーで実行したいコマンド sudo su ←ここでパスーワード入力して rootに権限スイッチ mkdir /var/log/aaa   ←root権限で実行したいコマンド su user1 touch /home/user1/bbb ← 一般ユーザーに戻ってコマンド実行 ------------ 環境:CentOS5 お願いします。

  • UNIXのシェルについて教えてください。

    UNIXシェル初心者です困っていますので教えてください。 (例) /tmp/test.txtのファイルがあるといたします。 このファイルの中身は、下記のようになっております。 01 一番 一郎 02 二番 次郎 04 三番 太郎 05 四番 吾郎      ・      ・ この中身をUNIXシェルを利用して/tmp/test1.csvに書き出し 内容を下記ように変更したいです。 01 一番 一郎 背番号 01 である。 02 二番 次郎 背番号 02 である。 04 三番 太郎 背番号 04 である。 05 四番 吾郎 背番号 05 である。      ・      ・ 実際に実施した/tmp/test.txtファイルは何百行もあり手動で作成するのは 手間です。 よろしくお願いいたします。